home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / unixlib36d / src / c / system < prev    next >
Text File  |  1994-03-08  |  1KB  |  71 lines

  1. #ifdef __STDC__
  2. static char sccs_id[] = "@(#) system.c 1.2 " __DATE__ " HJR";
  3. #else
  4. static char sccs_id[] = "@(#) system.c 1.2 13/6/91 HJR";
  5. #endif
  6.  
  7. /* system.c (c) Copyright 1990 H.Rogers */
  8.  
  9. #include <stdlib.h>
  10. #include <string.h>
  11.  
  12. #include "sys/param.h"
  13.  
  14. extern int execl (char *,...);
  15. extern int wait (int *);
  16. extern int vfork (void);
  17. extern void _exit (int);
  18.  
  19. #ifdef __STDC__
  20. int
  21. system (const char *command)
  22. #else
  23. int
  24. system (command)
  25.      const char *command;
  26. #endif
  27. {
  28.   int w = 0;
  29.  
  30.   if (!command)
  31.     return (-1);
  32.  
  33.   switch (vfork ())
  34.     {
  35.     case -1:
  36.       return (-1);
  37.       break;
  38.     case 0:
  39.       {
  40.     char *shell, *path;
  41.  
  42. #ifdef ARCH
  43.     if (!(path = getenv ("SHELL")))
  44.       {
  45.         if (*command == '*')
  46.           execl ((char *) command, 0);
  47.         else
  48.           execl ("*", "", (char *) command, 0);
  49.         _exit (1);
  50.       }
  51. #else
  52.     if (!(path = getenv ("SHELL")))
  53.       path = "/bin/sh";
  54. #endif
  55.     shell = strrchr (path, '/');
  56.     if (shell)
  57.       shell++;
  58.     else
  59.       shell = path;
  60.     execl (path, shell, "-c", (char *) command, 0);
  61.     _exit (1);
  62.       }
  63.       break;
  64.     default:
  65.       wait (&w);
  66.       break;
  67.     }
  68.  
  69.   return (w >> 8);
  70. }
  71.