/* $Header$
*
* Log and send a zephyrgram about any critical errors.
+ *
+ * (c) Copyright 1988 by the Massachusetts Institute of Technology.
+ * For copying and distribution information, please see the file
+ * <mit-copyright.h>.
*/
+#include <mit-copyright.h>
#include <stdio.h>
#include <sys/file.h>
#include <zephyr/zephyr.h>
/* mode to create the file with */
#define LOGFILEMODE 0644
+extern char *whoami;
+
void critical_alert(instance, msg, args)
char *instance; /* Instance for zephyr gram */
/* args = arguements, printf style */
/* This routine sends a class SMS zephyrgram of specified instance
and logs to a special logfile the message passed to it via msg
- and args in printf format. */
+ and args in printf format. *** It expects the global variable
+ whoami to be defined and contain the name of the calling program. */
/* Note: The part of this code that process the variable arguements
was stolen from sprintf(). */
{
FILE _bufstr; /* For _doprnt() */
- int crit; /* File descriptor for critical log file */
+ FILE *crit; /* FILE for critical log file */
char buf[BUFSIZ]; /* Holds the formatted message */
/* Put the fully formatted message into buf */
send_zgram(instance, buf);
/* Log message to critical file */
- if ((crit = open(CRITERRLOG,
- O_WRONLY | O_APPEND | O_CREAT, LOGFILEMODE)) >= 0)
+ if ((crit = fopen(CRITERRLOG, "a")) != (FILE *)NULL)
{
- write(crit,buf,strlen(buf));
- close(crit);
+ long t;
+ char *time_s;
+
+ time(&t);
+ time_s = ctime(&t) + 4;
+ time_s[strlen(time_s)-6] = '\0';
+
+ fprintf(crit, "%s <%d> %s\n", time_s, getpid(), buf);
+ fclose(crit);
}
+
+ com_err(whoami, 0, buf);
}