Annotation of 43BSD/contrib/notes/src/nfabort.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.