diff options
Diffstat (limited to 'src/pmerr/pmerr.c')
-rw-r--r-- | src/pmerr/pmerr.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/pmerr/pmerr.c b/src/pmerr/pmerr.c new file mode 100644 index 0000000..2bcc36a --- /dev/null +++ b/src/pmerr/pmerr.c @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2014 Red Hat. + * Copyright (c) 1995-2001,2003 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include <stdio.h> +#include <ctype.h> +#include "pmapi.h" +#include <ctype.h> + +extern void __pmDumpErrTab(FILE *); + +int +main(int argc, char **argv) +{ + int code; + int sts; + char *p; + char *q; + + if (argc > 1 && + (strcmp(argv[1], "-l") == 0 || strcmp(argv[1], "--list") == 0)) { + __pmDumpErrTab(stdout); + exit(1); + } + else if (argc > 1 && + (strcmp(argv[1], "-?") == 0 || strcmp(argv[1], "--help") == 0)) { + argc = 0; + } + else if (argc > 1 && argv[1][0] == '-' && !isxdigit((int)argv[1][1])) { + fprintf(stderr, "Illegal option -- %s\n", &argv[1][1]); + argc = 0; + } + + if (argc == 0) { + fprintf(stderr, +"Usage: pmerr [options] [code]\n\n" +" -l, --list causes all known error codes to be listed\n"); + exit(1); + } + + while (argc > 1) { + sts = 0; + p = argv[1]; + if (*p == '0' && (p[1] == 'x' || p[1] == 'X')) { + p = &p[2]; + for (q = p; isxdigit((int)*q); q++) + ; + if (*q == '\0') + sts = sscanf(p, "%x", &code); + } + if (sts < 1) + sts = sscanf(argv[1], "%d", &code); + if (sts != 1) { + printf("Cannot decode \"%s\" - neither decimal nor hexadecimal\n", argv[1]); + goto next; + } + + if (code > 0) { + code = -code; + printf("Code is positive, assume you mean %d\n", code); + } + + printf("Code: %d 0x%x Text: %s\n", code, code, pmErrStr(code)); + +next: + argc--; + argv++; + } + + return 0; +} |