xref: /freebsd/usr.bin/perror/perror.c (revision 1a7ac2bd24c1763b0d32e23d9c70308fbc24b07a)
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>
319a3009b8SGeorge V. Neville-Neil __FBSDID("$FreeBSD$");
329a3009b8SGeorge V. Neville-Neil 
339a3009b8SGeorge V. Neville-Neil #include <stdio.h>
349a3009b8SGeorge V. Neville-Neil #include <stdlib.h>
359a3009b8SGeorge V. Neville-Neil #include <string.h>
361fdc45cdSGeorge V. Neville-Neil #include <err.h>
37ec9f71c4SEdwin Groothuis #include <locale.h>
389a3009b8SGeorge V. Neville-Neil #include <sys/errno.h>
399a3009b8SGeorge V. Neville-Neil 
40*1a7ac2bdSAlfonso Gregory static void usage(void) __dead2;
419a3009b8SGeorge V. Neville-Neil 
4299000ae1SGeorge V. Neville-Neil int
4399000ae1SGeorge V. Neville-Neil main(int argc, char **argv)
449a3009b8SGeorge V. Neville-Neil {
459a3009b8SGeorge V. Neville-Neil 	char *cp;
461fdc45cdSGeorge V. Neville-Neil 	char *errstr;
471fdc45cdSGeorge V. Neville-Neil 	long errnum;
489a3009b8SGeorge V. Neville-Neil 
49ec9f71c4SEdwin Groothuis 	(void) setlocale(LC_MESSAGES, "");
509a3009b8SGeorge V. Neville-Neil 	if (argc != 2)
519a3009b8SGeorge V. Neville-Neil 		usage();
529a3009b8SGeorge V. Neville-Neil 
531fdc45cdSGeorge V. Neville-Neil 	errno = 0;
541fdc45cdSGeorge V. Neville-Neil 
559a3009b8SGeorge V. Neville-Neil 	errnum = strtol(argv[1], &cp, 0);
569a3009b8SGeorge V. Neville-Neil 
571fdc45cdSGeorge V. Neville-Neil 	if (errno != 0)
581fdc45cdSGeorge V. Neville-Neil 		err(1, NULL);
599a3009b8SGeorge V. Neville-Neil 
601fdc45cdSGeorge V. Neville-Neil 	if ((errstr = strerror(errnum)) == NULL)
611fdc45cdSGeorge V. Neville-Neil 		err(1, NULL);
629a3009b8SGeorge V. Neville-Neil 
631fdc45cdSGeorge V. Neville-Neil 	printf("%s\n", errstr);
649a3009b8SGeorge V. Neville-Neil 
659a3009b8SGeorge V. Neville-Neil 	exit(0);
669a3009b8SGeorge V. Neville-Neil }
671fdc45cdSGeorge V. Neville-Neil 
681fdc45cdSGeorge V. Neville-Neil static void
69896406c9SXin LI usage(void)
701fdc45cdSGeorge V. Neville-Neil {
711fdc45cdSGeorge V. Neville-Neil 	fprintf(stderr, "usage: perror number\n");
721fdc45cdSGeorge V. Neville-Neil 	exit(1);
731fdc45cdSGeorge V. Neville-Neil }
741fdc45cdSGeorge V. Neville-Neil 
75