Annotation of coherent/g/usr/bin/vi/prsvunix.c, revision 1.1

1.1     ! root        1: /* prsvunix.c */
        !             2: 
        !             3: /* This file contains the UNIX-specific parts of the "elvprsv" program. */
        !             4: 
        !             5: #if OSK
        !             6: #define ELVPRSV
        !             7: #include "osk.c"
        !             8: #else
        !             9: #include <sys/stat.h>
        !            10: #include <pwd.h>
        !            11: #endif
        !            12: #ifndef __STDC__
        !            13: /* some older systems don't declare this in pwd.h, I guess. */
        !            14: extern struct passwd *getpwuid();
        !            15: #endif
        !            16: 
        !            17: /* This variable is used to add extra error messages for mail sent to root */
        !            18: char *ps;
        !            19: 
        !            20: /* This function returns the login name of the owner of a file */
        !            21: char *ownername(filename)
        !            22:        char    *filename;      /* name of a file */
        !            23: {
        !            24:        struct stat     st;
        !            25:        struct passwd   *pw;
        !            26: 
        !            27:        /* stat the file, to get its uid */
        !            28:        if (stat(filename, &st) < 0)
        !            29:        {
        !            30:                ps = "stat() failed";
        !            31:                return "root";
        !            32:        }
        !            33: 
        !            34:        /* get the /etc/passwd entry for that user */
        !            35:        pw = getpwuid(st.st_uid);
        !            36:        if (!pw)
        !            37:        {
        !            38:                ps = "uid not found in password file";
        !            39:                return "root";
        !            40:        }
        !            41: 
        !            42:        /* return the user's name */
        !            43:        return pw->pw_name;
        !            44: }
        !            45: 
        !            46: 
        !            47: /* This function sends a mail message to a given user, saying that a file
        !            48:  * has been preserved.
        !            49:  */
        !            50: void mail(user, file, when)
        !            51:        char    *user;  /* name of user who should receive the mail */
        !            52:        char    *file;  /* name of original text file that was preserved */
        !            53:        char    *when;  /* description of why the file was preserved */
        !            54: {
        !            55:        char    cmd[80];/* buffer used for constructing a "mail" command */
        !            56:        FILE    *m, *popen();   /* stream used for giving text to the "mail" program */
        !            57:        char    *base;  /* basename of the file */
        !            58: 
        !            59:        /* separate the directory name from the basename. */
        !            60:        for (base = file + strlen(file); --base > file && *base != SLASH; )
        !            61:        {
        !            62:        }
        !            63:        if (*base == SLASH)
        !            64:        {
        !            65:                *base++ = '\0';
        !            66:        }
        !            67: 
        !            68:        /* for anonymous buffers, pretend the name was "foo" */
        !            69:        if (!strcmp(base, "*"))
        !            70:        {
        !            71:                base = "foo";
        !            72:        }
        !            73: 
        !            74:        /* open a pipe to the "mail" program */
        !            75: #if OSK
        !            76:        sprintf(cmd, "mail \"-s=%s preserved!\" %s", base, user);
        !            77: #else /* ANY_UNIX */
        !            78:        sprintf(cmd, "mail %s >/dev/null 2>/dev/null", user);
        !            79: #endif
        !            80:        m = popen(cmd, "w");
        !            81:        if (!m)
        !            82:        {
        !            83:                /* Can't send mail!  Hope the user figures it out. */
        !            84:                return;
        !            85:        }
        !            86: 
        !            87:        /* Tell the user that the file was preserved */
        !            88:        fprintf(m, "A version of your file \"%s%c%s\"\n", file, SLASH, base);
        !            89:        fprintf(m, "was preserved when %s.\n", when);
        !            90:        fprintf(m, "To recover this file, do the following:\n");
        !            91:        fprintf(m, "\n");
        !            92: #if OSK
        !            93:        fprintf(m, "     chd %s\n", file);
        !            94: #else /* ANY_UNIX */
        !            95:        fprintf(m, "     cd %s\n", file);
        !            96: #endif
        !            97:        fprintf(m, "     elvrec %s\n", base);
        !            98:        fprintf(m, "\n");
        !            99:        fprintf(m, "With fond wishes for a speedy recovery,\n");
        !           100:        fprintf(m, "                                    Elvis\n");
        !           101:        if (ps)
        !           102:        {
        !           103:                fprintf(m, "\nP.S. %s\n", ps);
        !           104:                ps = (char *)0;
        !           105:        }
        !           106: 
        !           107:        /* close the stream */
        !           108:        pclose(m);
        !           109: }

unix.superglobalmegacorp.com

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