/* * Copyright (c) 1997-2001 Silicon Graphics, Inc. All Rights Reserved. */ /* * pcp_lite_crash - crash pcp lite */ #include #include int main(int argc, char **argv) { int c; int sts; int errflag = 0; char local[MAXHOSTNAMELEN]; char *namespace = PM_NS_DEFAULT; pmID pmid; pmDesc desc; int type = 0; char *host = NULL; char *metric = "kernel.all.cpu.idle"; __pmSetProgname(argv[0]); while ((c = getopt(argc, argv, "a:D:h:Ln:")) != EOF) { switch (c) { case 'a': /* archive name */ if (type != 0) { fprintf(stderr, "%s: at most one of -a, -h and -L allowed\n", pmProgname); errflag++; } type = PM_CONTEXT_ARCHIVE; host = optarg; break; #ifdef PCP_DEBUG case 'D': /* debug flag */ sts = __pmParseDebug(optarg); if (sts < 0) { fprintf(stderr, "%s: unrecognized debug flag specification (%s)\n", pmProgname, optarg); errflag++; } else pmDebug |= sts; break; #endif case 'h': /* contact PMCD on this hostname */ if (type != 0) { fprintf(stderr, "%s: at most one of -a, -h and -L allowed\n", pmProgname); errflag++; } host = optarg; type = PM_CONTEXT_HOST; break; case 'L': /* local, no PMCD */ if (type != 0) { fprintf(stderr, "%s: at most one of -a, -h and -L allowed\n", pmProgname); errflag++; } host = NULL; type = PM_CONTEXT_LOCAL; break; case 'n': /* alternative name space file */ namespace = optarg; break; case '?': default: errflag++; break; } } if (errflag) { fprintf(stderr, "Usage: %s options ...\n\ \n\ Options:\n\ -a archive use archive log, not host source\n\ -D N set pmDebug debugging flag to N\n\ -h hostname connect to PMCD on this host\n\ -L connect local, no PMCD\n\ -n namespace alternative PMNS specification file\n", pmProgname); exit(1); } if ((sts = pmLoadNameSpace(namespace)) < 0) { printf("%s: Cannot load namespace from \"%s\": %s\n", pmProgname, namespace, pmErrStr(sts)); exit(1); } if (type == 0) { type = PM_CONTEXT_HOST; gethostname(local, sizeof(local)); host = local; } if ((sts = pmNewContext(type, host)) < 0) { if (type == PM_CONTEXT_HOST) fprintf(stderr, "%s: Cannot connect to PMCD on host \"%s\": %s\n", pmProgname, host, pmErrStr(sts)); else if (type == PM_CONTEXT_LOCAL) fprintf(stderr, "%s: Cannot connect in local standalone mode: %s\n", pmProgname, pmErrStr(sts)); else fprintf(stderr, "%s: Cannot open archive \"%s\": %s\n", pmProgname, host, pmErrStr(sts)); exit(1); } if ((sts = pmLookupName(1, &metric, &pmid)) < 0) { printf("%s: %s\n", pmProgname, pmErrStr(sts)); exit(1); } /* crash in here: dereference a null pointer to function */ if ((sts = pmLookupDesc(pmid, &desc)) < 0) { fprintf(stderr, "pmLookupDesc: %s\n", pmErrStr(sts)); exit(1); } exit(0); }