|
|
1.1 root 1: static char *sccsid = "@(#)from.c 4.1 (Berkeley) 10/1/80";
2: #include <stdio.h>
3: #include <ctype.h>
4: #include <pwd.h>
5:
6: struct passwd *getpwuid();
7:
8: main(argc, argv)
9: int argc;
10: register char **argv;
11: {
12: char lbuf[BUFSIZ];
13: char lbuf2[BUFSIZ];
14: register struct passwd *pp;
15: int stashed = 0;
16: register char *name;
17: char *sender;
18: char *getlogin();
19:
20: if (argc > 1 && *(argv[1]) == '-' && (*++argv)[1] == 's') {
21: if (--argc <= 1) {
22: fprintf (stderr, "Usage: from [-s sender] [user]\n");
23: exit (1);
24: }
25: --argc;
26: sender = *++argv;
27: for (name = sender; *name; name++)
28: if (isupper(*name))
29: *name = tolower(*name);
30:
31: }
32: else
33: sender = NULL;
34: if (chdir("/usr/spool/mail") < 0)
35: exit(1);
36: if (argc > 1)
37: name = argv[1];
38: else {
39: name = getlogin ();
40: if (name == NULL || strlen(name) == 0) {
41: pp = getpwuid(getuid());
42: if (pp == NULL) {
43: fprintf(stderr, "Who are you?\n");
44: exit(1);
45: }
46: name = pp->pw_name;
47: }
48: }
49: if (freopen(name, "r", stdin) == NULL)
50: exit(0);
51: while(fgets(lbuf, sizeof lbuf, stdin) != NULL)
52: if (lbuf[0] == '\n' && stashed) {
53: stashed = 0;
54: printf("%s", lbuf2);
55: }
56: else if (bufcmp(lbuf, "From ", 5) &&
57: (sender == NULL || match(&lbuf[4], sender))) {
58: strcpy(lbuf2, lbuf);
59: stashed = 1;
60: }
61: if (stashed)
62: printf("%s", lbuf2);
63: exit(0);
64: }
65:
66: bufcmp (b1, b2, n)
67: register char *b1, *b2;
68: register int n;
69: {
70: while (n-- > 0)
71: if (*b1++ != *b2++)
72: return (0);
73: return (1);
74: }
75:
76: match (line, str)
77: register char *line, *str;
78: {
79: register char ch;
80:
81: while (*line == ' ' || *line == '\t')
82: ++line;
83: if (*line == '\n')
84: return (0);
85: while (*str && *line != ' ' && *line != '\t' && *line != '\n') {
86: ch = isupper(*line) ? tolower(*line) : *line;
87: if (ch != *str++)
88: return (0);
89: line++;
90: }
91: return (*str == '\0');
92: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.