home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume3 / pathalias2 / part2 / local.c < prev    next >
Encoding:
C/C++ Source or Header  |  1986-11-30  |  1.4 KB  |  84 lines

  1. /* pathalias -- by steve bellovin, as told to peter honeyman */
  2. #ifndef lint
  3. static char    *sccsid = "@(#)local.c    8.1 (down!honey) 86/01/19";
  4. #endif lint
  5.  
  6. #include <stdio.h>
  7. #include "config.h"
  8.  
  9. #ifdef    UNAME
  10. #include <sys/utsname.h>
  11.  
  12. char    *
  13. local()
  14. {
  15.     static struct utsname utsname;
  16.  
  17.     uname(&utsname);
  18.     return(utsname.nodename);
  19. }
  20.  
  21. #else !UNAME
  22.  
  23. char    *
  24. local()
  25. {
  26.     static char lname[64];
  27.     void    gethostname();
  28.  
  29.     gethostname(lname, sizeof(lname));
  30.     return(lname);
  31. }
  32.  
  33. #ifndef GETHOSTNAME
  34.  
  35. static void
  36. gethostname(name, len)
  37. char    *name;
  38. {
  39.     FILE    *whoami, *fopen(), *popen();
  40.     char    *ptr, *index();
  41.  
  42.     *name = '\0';
  43.  
  44.     /* try /etc/whoami */
  45.     if ((whoami = fopen("/etc/whoami", "r")) != 0) {
  46.         (void) fgets(name, len, whoami);
  47.         (void) fclose(whoami);
  48.         if ((ptr = index(name, '\n')) != 0)
  49.             *ptr = '\0';
  50.     }
  51.     if (*name)
  52.         return;
  53.  
  54.     /* try /usr/include/whoami.h */
  55.     if ((whoami = fopen("/usr/include/whoami.h", "r")) != 0) {
  56.         while (!feof(whoami)) {
  57.             char    buf[100];
  58.  
  59.             if (fgets(buf, 100, whoami) == 0)
  60.                 break;
  61.             if (sscanf(buf, "#define sysname \"%[^\"]\"", name))
  62.                 break;
  63.         }
  64.         (void) fclose(whoami);
  65.         if (*name)
  66.             return;
  67.     }
  68.  
  69.     /* ask uucp */
  70.     if ((whoami = popen("uuname -l", "r")) != 0) {
  71.         (void) fgets(name, len, whoami);
  72.         (void) pclose(whoami);
  73.         if ((ptr = index(name, '\n')) != 0)
  74.             *ptr = '\0';
  75.     }
  76.     if (*name)
  77.         return;
  78.     
  79.     /* aw hell, i give up!  is this a real unix? */
  80.     return;
  81. }
  82. #endif GETHOSTNAME
  83. #endif UNAME
  84.