xref: /freebsd/usr.bin/perror/perror.c (revision 0963af50e96d9c8e93041e9faf281c895bb53dbe)
19a3009b8SGeorge V. Neville-Neil /*-
24d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
31de7b4b8SPedro F. Giffuni  *
4179fa75eSJohn Baldwin  * Copyright (c) 2009 Hudson River Trading LLC
59a3009b8SGeorge V. Neville-Neil  * Written by: George V. Neville-Neil <gnn@FreeBSD.org>
69a3009b8SGeorge V. Neville-Neil  * All rights reserved.
79a3009b8SGeorge V. Neville-Neil  *
89a3009b8SGeorge V. Neville-Neil  * Redistribution and use in source and binary forms, with or without
99a3009b8SGeorge V. Neville-Neil  * modification, are permitted provided that the following conditions
109a3009b8SGeorge V. Neville-Neil  * are met:
119a3009b8SGeorge V. Neville-Neil  * 1. Redistributions of source code must retain the above copyright
129a3009b8SGeorge V. Neville-Neil  *    notice, this list of conditions and the following disclaimer.
139a3009b8SGeorge V. Neville-Neil  * 2. Redistributions in binary form must reproduce the above copyright
149a3009b8SGeorge V. Neville-Neil  *    notice, this list of conditions and the following disclaimer in the
159a3009b8SGeorge V. Neville-Neil  *    documentation and/or other materials provided with the distribution.
169a3009b8SGeorge V. Neville-Neil  *
179a3009b8SGeorge V. Neville-Neil  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
189a3009b8SGeorge V. Neville-Neil  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
199a3009b8SGeorge V. Neville-Neil  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
209a3009b8SGeorge V. Neville-Neil  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
219a3009b8SGeorge V. Neville-Neil  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
229a3009b8SGeorge V. Neville-Neil  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
239a3009b8SGeorge V. Neville-Neil  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
249a3009b8SGeorge V. Neville-Neil  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
259a3009b8SGeorge V. Neville-Neil  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
269a3009b8SGeorge V. Neville-Neil  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
279a3009b8SGeorge V. Neville-Neil  * SUCH DAMAGE.
289a3009b8SGeorge V. Neville-Neil  */
299a3009b8SGeorge V. Neville-Neil 
309a3009b8SGeorge V. Neville-Neil #include <sys/cdefs.h>
3182e9f8c2SFaraz Vahedi #include <sys/errno.h>
3282e9f8c2SFaraz Vahedi 
3382e9f8c2SFaraz Vahedi #include <err.h>
3482e9f8c2SFaraz Vahedi #include <locale.h>
359a3009b8SGeorge V. Neville-Neil #include <stdio.h>
369a3009b8SGeorge V. Neville-Neil #include <stdlib.h>
379a3009b8SGeorge V. Neville-Neil #include <string.h>
389a3009b8SGeorge V. Neville-Neil 
39*adc02d5eSFaraz Vahedi #include <capsicum_helpers.h>
40*adc02d5eSFaraz Vahedi 
411a7ac2bdSAlfonso Gregory static void usage(void) __dead2;
429a3009b8SGeorge V. Neville-Neil 
4399000ae1SGeorge V. Neville-Neil int
main(int argc,char ** argv)4499000ae1SGeorge V. Neville-Neil main(int argc, char **argv)
459a3009b8SGeorge V. Neville-Neil {
469a3009b8SGeorge V. Neville-Neil 	char *cp;
471fdc45cdSGeorge V. Neville-Neil 	char *errstr;
481fdc45cdSGeorge V. Neville-Neil 	long errnum;
499a3009b8SGeorge V. Neville-Neil 
50ec9f71c4SEdwin Groothuis 	(void) setlocale(LC_MESSAGES, "");
51*adc02d5eSFaraz Vahedi 
52*adc02d5eSFaraz Vahedi 	caph_cache_catpages();
53*adc02d5eSFaraz Vahedi 	if (caph_limit_stdio() < 0 || caph_enter() < 0)
54*adc02d5eSFaraz Vahedi 		err(EXIT_FAILURE, "capsicum");
55*adc02d5eSFaraz Vahedi 
569a3009b8SGeorge V. Neville-Neil 	if (argc != 2)
579a3009b8SGeorge V. Neville-Neil 		usage();
589a3009b8SGeorge V. Neville-Neil 
591fdc45cdSGeorge V. Neville-Neil 	errno = 0;
601fdc45cdSGeorge V. Neville-Neil 
619a3009b8SGeorge V. Neville-Neil 	errnum = strtol(argv[1], &cp, 0);
629a3009b8SGeorge V. Neville-Neil 
631fdc45cdSGeorge V. Neville-Neil 	if (errno != 0)
644dd6597aSFaraz Vahedi 		err(EXIT_FAILURE, NULL);
659a3009b8SGeorge V. Neville-Neil 
661fdc45cdSGeorge V. Neville-Neil 	if ((errstr = strerror(errnum)) == NULL)
674dd6597aSFaraz Vahedi 		err(EXIT_FAILURE, NULL);
689a3009b8SGeorge V. Neville-Neil 
691fdc45cdSGeorge V. Neville-Neil 	printf("%s\n", errstr);
709a3009b8SGeorge V. Neville-Neil 
714dd6597aSFaraz Vahedi 	exit(EXIT_SUCCESS);
729a3009b8SGeorge V. Neville-Neil }
731fdc45cdSGeorge V. Neville-Neil 
741fdc45cdSGeorge V. Neville-Neil static void
usage(void)75896406c9SXin LI usage(void)
761fdc45cdSGeorge V. Neville-Neil {
771fdc45cdSGeorge V. Neville-Neil 	fprintf(stderr, "usage: perror number\n");
784dd6597aSFaraz Vahedi 	exit(EXIT_FAILURE);
791fdc45cdSGeorge V. Neville-Neil }
801fdc45cdSGeorge V. Neville-Neil 
81