19a3009b8SGeorge V. Neville-Neil /*- 29a3009b8SGeorge V. Neville-Neil * Copyright (c) 2009 Advanced Computing Technologies 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> 349a3009b8SGeorge V. Neville-Neil #include <sys/errno.h> 359a3009b8SGeorge V. Neville-Neil 369a3009b8SGeorge V. Neville-Neil #define MAX_ERR 256 379a3009b8SGeorge V. Neville-Neil 389a3009b8SGeorge V. Neville-Neil void usage() 399a3009b8SGeorge V. Neville-Neil { 409a3009b8SGeorge V. Neville-Neil 419a3009b8SGeorge V. Neville-Neil printf("usage: perror number\n"); 429a3009b8SGeorge V. Neville-Neil printf("number must be between 1 and %d\n", ELAST); 439a3009b8SGeorge V. Neville-Neil exit(1); 449a3009b8SGeorge V. Neville-Neil } 459a3009b8SGeorge V. Neville-Neil 469a3009b8SGeorge V. Neville-Neil int main(int argc, char **argv) 479a3009b8SGeorge V. Neville-Neil { 489a3009b8SGeorge V. Neville-Neil 499a3009b8SGeorge V. Neville-Neil char errstr[MAX_ERR]; 509a3009b8SGeorge V. Neville-Neil char *cp; 519a3009b8SGeorge V. Neville-Neil int errnum; 529a3009b8SGeorge V. Neville-Neil 539a3009b8SGeorge V. Neville-Neil if (argc != 2) 549a3009b8SGeorge V. Neville-Neil usage(); 559a3009b8SGeorge V. Neville-Neil 569a3009b8SGeorge V. Neville-Neil errnum = strtol(argv[1], &cp, 0); 579a3009b8SGeorge V. Neville-Neil 589a3009b8SGeorge V. Neville-Neil if (((errnum == 0) && (errno == EINVAL)) || (*cp != '\0')) { 599a3009b8SGeorge V. Neville-Neil printf("Argument %s not a number.\n", argv[1]); 609a3009b8SGeorge V. Neville-Neil usage(); 619a3009b8SGeorge V. Neville-Neil } 629a3009b8SGeorge V. Neville-Neil 639a3009b8SGeorge V. Neville-Neil if ((errnum <=0) || (errnum > ELAST)) { 649a3009b8SGeorge V. Neville-Neil printf("Number %d out of range.\n", errnum); 659a3009b8SGeorge V. Neville-Neil usage(); 669a3009b8SGeorge V. Neville-Neil } 679a3009b8SGeorge V. Neville-Neil 689a3009b8SGeorge V. Neville-Neil if (strerror_r(errnum, errstr, sizeof(errstr)) < 0) { 699a3009b8SGeorge V. Neville-Neil printf("Could not find error number %d.\n", errnum); 709a3009b8SGeorge V. Neville-Neil usage(); 719a3009b8SGeorge V. Neville-Neil } 729a3009b8SGeorge V. Neville-Neil 739a3009b8SGeorge V. Neville-Neil printf("Error %d is \"%s\"\n", errnum, errstr); 749a3009b8SGeorge V. Neville-Neil 759a3009b8SGeorge V. Neville-Neil exit(0); 769a3009b8SGeorge V. Neville-Neil } 77