Annotation of 41BSD/cmd/ucbmail/cc.local.c, revision 1.1.1.1

1.1       root        1: #
                      2: 
                      3: /*
                      4:  * Mail -- a mail program
                      5:  *
                      6:  * Computer Center Unix
                      7:  *
                      8:  * Local routines that are installation dependent.
                      9:  */
                     10: 
                     11: #include "rcv.h"
                     12: 
                     13: /*
                     14:  * Locate the user's mailbox file (ie, the place where new, unread
                     15:  * mail is queued).  At Computer Center, it is in /usr/mail/name.
                     16:  */
                     17: 
                     18: findmail()
                     19: {
                     20:        register char *cp;
                     21: 
                     22:        cp = copy("/usr/mail/", mailname);
                     23:        copy(myname, cp);
                     24: }
                     25: 
                     26: /*
                     27:  * Get rid of the queued mail.
                     28:  * This is essentially "mail -n > /dev/null &"
                     29:  */
                     30: 
                     31: demail()
                     32: {
                     33:        register int p;
                     34: 
                     35:        if (uid == 0) {
                     36:                remove(mailname);
                     37:                return;
                     38:        }
                     39:        if ((p = fork()) != 0)
                     40:                return;
                     41:        for (p = 0; p < 15; p++)
                     42:                 close(p);
                     43:        open("/dev/null", 2);
                     44:        dup(0);
                     45:        dup(0);
                     46:        for (p = SIGHUP; p <= SIGQUIT; p++)
                     47:                signal(p, SIG_IGN);
                     48:        execl(MAIL, "mail", "-n", 0);
                     49:        perror(MAIL);
                     50:        exit(1);
                     51: }
                     52: 
                     53: /*
                     54:  * Get the value of an environment variable.
                     55:  */
                     56: 
                     57: char *
                     58: getenv(name)
                     59:        char name[];
                     60: {
                     61:        register int t;
                     62:        static char val[30];
                     63: 
                     64:        t = ttyn(2);
                     65:        hget(t);
                     66:        if (equal(name, "SHELL"))
                     67:                return("/bin/csh");
                     68:        if (!equal(name, "HOME"))
                     69:                return(NOSTR);
                     70:        copy(hgethome(), val);
                     71:        return(val);
                     72: }
                     73: 
                     74: /*
                     75:  * Mail file lock / unlock.
                     76:  * Not implemented in this version.
                     77:  */
                     78: 
                     79: lock(name)
                     80:        char name[];
                     81: {
                     82: 
                     83:        return(0);
                     84: }
                     85: 
                     86: unlock()
                     87: {
                     88:        return(0);
                     89: }
                     90: 
                     91: /*
                     92:  * Discover user login name.
                     93:  */
                     94: 
                     95: username(uid, namebuf)
                     96:        char namebuf[];
                     97: {
                     98: 
                     99:        return(getname(uid, namebuf));
                    100: }
                    101: 
                    102: /*
                    103:  * Unix routine to do an "fopen" on file descriptor
                    104:  * The mode has to be repeated because you can't query its
                    105:  * status
                    106:  */
                    107: 
                    108: FILE *
                    109: fdopen(fd, mode)
                    110: register char *mode;
                    111: {
                    112:        extern int errno;
                    113:        register FILE *iop;
                    114:        extern FILE *_lastbuf;
                    115: 
                    116:        for (iop = _iob; iop->_flag&(_IOREAD|_IOWRT); iop++)
                    117:                if (iop >= _lastbuf)
                    118:                        return(NULL);
                    119:        iop->_cnt = 0;
                    120:        iop->_file = fd;
                    121:        if (*mode != 'r') {
                    122:                iop->_flag |= _IOWRT;
                    123:                if (*mode == 'a')
                    124:                        lseek(fd, 0L, 2);
                    125:        } else
                    126:                iop->_flag |= _IOREAD;
                    127:        return(iop);
                    128: }

unix.superglobalmegacorp.com

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