home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume6 / att_which / which.c < prev   
Encoding:
C/C++ Source or Header  |  1986-11-30  |  925 b   |  58 lines

  1. /* which - C version of the unix/csh 'which' command
  2.  * vix 23jul86 [written]
  3.  * vix 24jul86 [don't use dynamic memory]
  4.  */
  5.  
  6. #include <stdio.h>
  7.  
  8. static    char    *myname;
  9.  
  10. main(argc, argv)
  11. int    argc;
  12. char    *argv[];
  13. {
  14.     char    *getenv(), *path = getenv("PATH");
  15.  
  16.     myname = argv[0];
  17.     for (argc--, argv++;  argc;  argc--, argv++)
  18.         if (0 != which(*argv, path))
  19.             exit(1);
  20.     exit(0);
  21. }
  22.  
  23. static which(name, path)
  24. char    *name, *path;
  25. {
  26.     char    test[1000], *pc, *malloc(), save;
  27.     int    len, namelen = strlen(name), found;
  28.  
  29.     pc = path;
  30.     found = 0;
  31.     while (*pc != '\0' && found == 0)
  32.     {
  33.         len = 0;
  34.         while (*pc != ':' && *pc != '\0')
  35.         {
  36.             len++;
  37.             pc++;
  38.         }
  39.  
  40.         save = *pc;
  41.         *pc = '\0';
  42.         sprintf(test, "%s/%s", pc-len, name);
  43.         *pc = save;
  44.         if (*pc)
  45.             pc++;
  46.  
  47.         found = (0 == access(test, 01));    /* executable */
  48.         if (found)
  49.             puts(test);
  50.     }
  51.     if (found == 0)
  52.     {
  53.         printf("%s: no %s in (%s)\n", myname, name, path);
  54.         return 1;
  55.     }
  56.     return 0;
  57. }
  58.