home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume25 / pty4 / part02 / users.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-18  |  1.3 KB  |  71 lines

  1. /* users.c: clone of users program
  2. Daniel J. Bernstein, brnstnd@nyu.edu.
  3. Depends on radixsort.h, sod.h, ralloc.h.
  4. Requires BSD: /etc/utmp, <utmp.h>.
  5. 7/23/91: Baseline. users 2.0, public domain.
  6. No known patent problems.
  7.  
  8. Documentation in users.1.
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <sys/types.h>
  13. #include <utmp.h>
  14. #include "config/utmpfile.h"
  15. #include "radixsort.h"
  16. #include "sod.h"
  17. #include "ralloc.h"
  18.  
  19. struct utmp ut;
  20. SODdecl(namestack,struct { char name[sizeof(ut.ut_name) + 1]; } );
  21.  
  22. main()
  23. {
  24.  register FILE *fi;
  25.  namestack namehead;
  26.  namestack name;
  27.  int numnames;
  28.  char **base;
  29.  int i;
  30.  
  31.  numnames = 0;
  32.  namehead = 0;
  33.  if (!(fi = fopen(UTMP_FILE,"r")))
  34.    exit(1); /*XXX*/
  35.  while (fread((char *) &ut,sizeof(ut),1,fi))
  36.    if (ut.ut_name[0])
  37.     {
  38.      name = SODalloc(namestack,name,ralloc);
  39.      if (!name)
  40.        exit(1); /*XXX*/
  41.      strncpy(SODdata(name).name,ut.ut_name,sizeof(ut.ut_name));
  42.      SODpush(namehead,name);
  43.      ++numnames;
  44.     }
  45.  fclose(fi);
  46.  
  47.  base = RALLOC(char *,numnames);
  48.  if (!base)
  49.    exit(1); /*XXX*/
  50.  
  51.  i = 0;
  52.  for (name = namehead;name;name = SODnext(name))
  53.    base[i++] = SODdata(name).name;
  54.  
  55.  if (radixsort7(base,numnames,0,(unsigned char *) 0,0,ralloc,rfree) == -1)
  56.    exit(1); /*XXX*/
  57.  
  58.  i = 0;
  59.  for (;;)
  60.   {
  61.    if (i)
  62.      putchar(' ');
  63.    if (i == numnames)
  64.      break;
  65.    fputs(base[i],stdout);
  66.    ++i;
  67.   }
  68.  putchar('\n');
  69.  exit(0);
  70. }
  71.