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