|
|
1.1 ! root 1: #include <stdio.h> ! 2: ! 3: #ifdef RCSIDENT ! 4: static char rcsid[] = "$Header: nfabort.c,v 1.7 85/01/18 15:40:50 notes Rel $"; ! 5: #endif RCSIDENT ! 6: ! 7: /* ! 8: * nfabort(nf, message, title, cname, exitcode) ! 9: * ! 10: * Dump a core file and leave it in "cname" suffixed with ! 11: * the pid of the current process. Place "message" and ! 12: * a line about where the core dump is in "nf" with "title" ! 13: * and then terminate with "exitcode" as an exit code. ! 14: * ! 15: * Ray Essick, February 1984 ! 16: */ ! 17: ! 18: extern char *malloc (); ! 19: ! 20: nfabort (nf, message, title, cname, exitcode) ! 21: char *nf; ! 22: char *message; ! 23: char *title; ! 24: char *cname; ! 25: int exitcode; ! 26: { ! 27: int mypid; ! 28: int pid; ! 29: int rpid; ! 30: int retcode; ! 31: char pbuf[256]; /* char buffer */ ! 32: char *p; /* for message */ ! 33: ! 34: if (message == NULL) /* empty */ ! 35: message = ""; /* fake one */ ! 36: if (cname == NULL || *cname == '\0') /* make one */ ! 37: cname = "core"; ! 38: if (title == NULL || *title == '\0') /* title */ ! 39: title = "nfabort"; ! 40: mypid = getpid (); ! 41: ! 42: switch (pid = fork ()) ! 43: { ! 44: case -1: /* couldn't fork! */ ! 45: fprintf (stderr, "nfabort() unable to log dump\n"); ! 46: fflush (stderr); ! 47: /* dump core anyway */ ! 48: case 0: /* child */ ! 49: umask (0); ! 50: abort (); /* die quick */ ! 51: ! 52: default: /* parent */ ! 53: while ((rpid = wait (&retcode)) != pid && rpid != -1); ! 54: sprintf (pbuf, "/bin/mv core %s.%d", cname, mypid); ! 55: system (pbuf); /* move it */ ! 56: sprintf (pbuf, "/bin/chmod 666 %s.%d", cname, mypid); ! 57: system (pbuf); /* un-protect it */ ! 58: sprintf (pbuf, "Core image left in %s.%d\n", cname, mypid); ! 59: p = malloc (strlen (message) + strlen (pbuf) + 4); ! 60: if (p == NULL) /* no space */ ! 61: p = message; /* write something */ ! 62: else ! 63: sprintf (p, "%s\n\n%s", message, pbuf); ! 64: if (nf) /* only if given */ ! 65: nfcomment (nf, p, title, 0, 0); /* and log it */ ! 66: exit (exitcode); ! 67: } ! 68: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.