system.c 437 B

12345678910111213141516171819202122232425262728293031323334
  1. #include <u.h>
  2. #include <libc.h>
  3. Waitmsg*
  4. system(char *name, char **argv)
  5. {
  6. char err[ERRMAX];
  7. Waitmsg *w;
  8. int pid;
  9. switch(pid = fork()){ /* assign = */
  10. case -1:
  11. return nil;
  12. case 0:
  13. exec(name, argv);
  14. errstr(err, sizeof err);
  15. _exits(err);
  16. }
  17. for(;;){
  18. w = wait();
  19. if(w == nil)
  20. break;
  21. if(w->pid == pid)
  22. return w;
  23. free(w);
  24. }
  25. return nil;
  26. }
  27. Waitmsg*
  28. systeml(char *name, ...)
  29. {
  30. return system(name, &name+1);
  31. }