Annotation of 40BSD/cmd/from.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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