xref: /freebsd/usr.bin/perror/perror.c (revision 179fa75e6e218d71a85a6b17ccc231036a148543)
19a3009b8SGeorge V. Neville-Neil /*-
2*179fa75eSJohn Baldwin  * Copyright (c) 2009 Hudson River Trading LLC
39a3009b8SGeorge V. Neville-Neil  * Written by: George V. Neville-Neil <gnn@FreeBSD.org>
49a3009b8SGeorge V. Neville-Neil  * All rights reserved.
59a3009b8SGeorge V. Neville-Neil  *
69a3009b8SGeorge V. Neville-Neil  * Redistribution and use in source and binary forms, with or without
79a3009b8SGeorge V. Neville-Neil  * modification, are permitted provided that the following conditions
89a3009b8SGeorge V. Neville-Neil  * are met:
99a3009b8SGeorge V. Neville-Neil  * 1. Redistributions of source code must retain the above copyright
109a3009b8SGeorge V. Neville-Neil  *    notice, this list of conditions and the following disclaimer.
119a3009b8SGeorge V. Neville-Neil  * 2. Redistributions in binary form must reproduce the above copyright
129a3009b8SGeorge V. Neville-Neil  *    notice, this list of conditions and the following disclaimer in the
139a3009b8SGeorge V. Neville-Neil  *    documentation and/or other materials provided with the distribution.
149a3009b8SGeorge V. Neville-Neil  *
159a3009b8SGeorge V. Neville-Neil  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
169a3009b8SGeorge V. Neville-Neil  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
179a3009b8SGeorge V. Neville-Neil  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
189a3009b8SGeorge V. Neville-Neil  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
199a3009b8SGeorge V. Neville-Neil  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
209a3009b8SGeorge V. Neville-Neil  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
219a3009b8SGeorge V. Neville-Neil  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
229a3009b8SGeorge V. Neville-Neil  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
239a3009b8SGeorge V. Neville-Neil  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
249a3009b8SGeorge V. Neville-Neil  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
259a3009b8SGeorge V. Neville-Neil  * SUCH DAMAGE.
269a3009b8SGeorge V. Neville-Neil  */
279a3009b8SGeorge V. Neville-Neil 
289a3009b8SGeorge V. Neville-Neil #include <sys/cdefs.h>
299a3009b8SGeorge V. Neville-Neil __FBSDID("$FreeBSD$");
309a3009b8SGeorge V. Neville-Neil 
319a3009b8SGeorge V. Neville-Neil #include <stdio.h>
329a3009b8SGeorge V. Neville-Neil #include <stdlib.h>
339a3009b8SGeorge V. Neville-Neil #include <string.h>
341fdc45cdSGeorge V. Neville-Neil #include <err.h>
35ec9f71c4SEdwin Groothuis #include <locale.h>
369a3009b8SGeorge V. Neville-Neil #include <sys/errno.h>
379a3009b8SGeorge V. Neville-Neil 
38896406c9SXin LI static void usage(void);
399a3009b8SGeorge V. Neville-Neil 
4099000ae1SGeorge V. Neville-Neil int
4199000ae1SGeorge V. Neville-Neil main(int argc, char **argv)
429a3009b8SGeorge V. Neville-Neil {
439a3009b8SGeorge V. Neville-Neil 	char *cp;
441fdc45cdSGeorge V. Neville-Neil 	char *errstr;
451fdc45cdSGeorge V. Neville-Neil 	long errnum;
469a3009b8SGeorge V. Neville-Neil 
47ec9f71c4SEdwin Groothuis 	(void) setlocale(LC_MESSAGES, "");
489a3009b8SGeorge V. Neville-Neil 	if (argc != 2)
499a3009b8SGeorge V. Neville-Neil 		usage();
509a3009b8SGeorge V. Neville-Neil 
511fdc45cdSGeorge V. Neville-Neil 	errno = 0;
521fdc45cdSGeorge V. Neville-Neil 
539a3009b8SGeorge V. Neville-Neil 	errnum = strtol(argv[1], &cp, 0);
549a3009b8SGeorge V. Neville-Neil 
551fdc45cdSGeorge V. Neville-Neil 	if (errno != 0)
561fdc45cdSGeorge V. Neville-Neil 		err(1, NULL);
579a3009b8SGeorge V. Neville-Neil 
581fdc45cdSGeorge V. Neville-Neil 	if ((errstr = strerror(errnum)) == NULL)
591fdc45cdSGeorge V. Neville-Neil 		err(1, NULL);
609a3009b8SGeorge V. Neville-Neil 
611fdc45cdSGeorge V. Neville-Neil 	printf("%s\n", errstr);
629a3009b8SGeorge V. Neville-Neil 
639a3009b8SGeorge V. Neville-Neil 	exit(0);
649a3009b8SGeorge V. Neville-Neil }
651fdc45cdSGeorge V. Neville-Neil 
661fdc45cdSGeorge V. Neville-Neil static void
67896406c9SXin LI usage(void)
681fdc45cdSGeorge V. Neville-Neil {
691fdc45cdSGeorge V. Neville-Neil 	fprintf(stderr, "usage: perror number\n");
701fdc45cdSGeorge V. Neville-Neil 	exit(1);
711fdc45cdSGeorge V. Neville-Neil }
721fdc45cdSGeorge V. Neville-Neil 
73