--- /usr/tmp/TmpDir.31586-0/src/pmie/src/act.sk_1.2 Thu Oct 17 08:13:53 2002 +++ src/pmie/src/act.sk Thu Oct 17 08:12:06 2002 @@ -87,7 +87,7 @@ actAlarm(Expr *x) { static char *alarmv[] = { - "/usr/bin/X11/xconfirm", + NULL, /* need path to xconfirm(1) here */ "-header", "Performance Co-Pilot Alarm", "-b", "Cancel", "-icon", "warning", @@ -101,6 +101,17 @@ time_t clock; pid_t sts; + if (alarmv[0] == NULL) { + /* + * one trip to get path for xconfirm(1) + */ + alarmv[0] = pmGetConfig("PCP_XCONFIRM_PROG"); + if (strcmp(alarmv[0], "") == 0) { + __pmNotifyErr(LOG_ERR, "path to xconfirm(1) for alarm not found, using echo(1)\n"); + alarmv[0] = "/bin/echo"; + } + } + /* if old alarm still active, don't post new one */ if ((x->valid != 0) && (waitpid((pid_t)x->valid, NULL, WNOHANG) == 0)) @@ -118,9 +129,12 @@ alarmv[8] = ctime; alarmv[10] = (char *)arg1->ring; setsid(); - fclose(stdin); - fclose(stdout); - fclose(stderr); + if (strcmp(alarmv[0], "/bin/echo") != 0) { + /* only echo needs stdio, when xconfirm cannot be found */ + fclose(stdin); + fclose(stdout); + fclose(stderr); + } execvp(alarmv[0], alarmv); _exit(1); /* avoid atexit() handler */ } @@ -158,9 +172,9 @@ EVALARG(arg1) openlog(tag, LOG_PID|LOG_CONS, LOG_DAEMON); if (arg1->ring == NULL) - syslog(*pri, ""); + syslog(*pri, "%s", ""); else - syslog(*pri, "%s", arg1->ring); + syslog(*pri, "%s", (char *)arg1->ring); closelog(); *(Truth *)x->ring = TRUE; x->smpls[0].stamp = now;