diff options
Diffstat (limited to 'src/pmerr')
-rw-r--r-- | src/pmerr/GNUmakefile | 31 | ||||
-rw-r--r-- | src/pmerr/pmerr.c | 82 |
2 files changed, 113 insertions, 0 deletions
diff --git a/src/pmerr/GNUmakefile b/src/pmerr/GNUmakefile new file mode 100644 index 0000000..854103a --- /dev/null +++ b/src/pmerr/GNUmakefile @@ -0,0 +1,31 @@ +# +# Copyright (c) 2000,2004 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. +# + +TOPDIR = ../.. +include $(TOPDIR)/src/include/builddefs + +CFILES = pmerr.c +CMDTARGET = pmerr$(EXECSUFFIX) +LLDLIBS = $(PCPLIB) + +default: $(CMDTARGET) + +include $(BUILDRULES) + +install: default + $(INSTALL) -m 755 $(CMDTARGET) $(PCP_BIN_DIR)/$(CMDTARGET) + +default_pcp: default + +install_pcp: install 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; +} |