Annotation of 43BSD/ucb/users.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1980 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  */
                      6: 
                      7: #ifndef lint
                      8: char copyright[] =
                      9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
                     10:  All rights reserved.\n";
                     11: #endif not lint
                     12: 
                     13: #ifndef lint
                     14: static char sccsid[] = "@(#)users.c    5.2 (Berkeley) 11/15/85";
                     15: #endif not lint
                     16: 
                     17: /*
                     18:  * users
                     19:  */
                     20: char   *malloc();
                     21: 
                     22: #include <stdio.h>
                     23: #include <utmp.h>
                     24: 
                     25: #define NMAX sizeof(utmp.ut_name)
                     26: #define LMAX sizeof(utmp.ut_line)
                     27: 
                     28: struct utmp utmp;
                     29: 
                     30: main(argc, argv)
                     31: char **argv;
                     32: {
                     33:        register char *tp, *s;
                     34:        register FILE *fi;
                     35: 
                     36:        s = "/etc/utmp";
                     37:        if(argc == 2)
                     38:                s = argv[1];
                     39:        if ((fi = fopen(s, "r")) == NULL) {
                     40:                perror(s);
                     41:                exit(1);
                     42:        }
                     43:        while (fread((char *)&utmp, sizeof(utmp), 1, fi) == 1) {
                     44:                if(utmp.ut_name[0] == '\0')
                     45:                        continue;
                     46:                putline();
                     47:        }
                     48:        summary();
                     49: }
                     50: 
                     51: char   *names[128];
                     52: char   **namp = names;
                     53: putline()
                     54: {
                     55:        char temp[NMAX+1];
                     56:        strncpy(temp, utmp.ut_name, NMAX);
                     57:        temp[NMAX] = 0;
                     58:        *namp = malloc(strlen(temp) + 1);
                     59:        strcpy(*namp++, temp);
                     60: }
                     61: 
                     62: scmp(p, q)
                     63: char **p, **q;
                     64: {
                     65:        return(strcmp(*p, *q));
                     66: }
                     67: summary()
                     68: {
                     69:        register char **p;
                     70: 
                     71:        qsort(names, namp - names, sizeof names[0], scmp);
                     72:        for (p=names; p < namp; p++) {
                     73:                if (p != names)
                     74:                        putchar(' ');
                     75:                fputs(*p, stdout);
                     76:        }
                     77:        if (namp != names)              /* at least one user */
                     78:                putchar('\n');
                     79: }

unix.superglobalmegacorp.com

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