Просмотр исходного кода

* Add a simple_exec() which directly executes the given file.

Bryan Drewery 16 лет назад
Родитель
Сommit
c7d652925e
2 измененных файлов с 21 добавлено и 0 удалено
  1. 20 0
      src/shell.c
  2. 1 0
      src/shell.h

+ 20 - 0
src/shell.c

@@ -471,6 +471,26 @@ int shell_exec(char *cmdline, char *input, char **output, char **erroutput)
   }
 }
 
+int simple_exec(const char* argv[]) {
+  pid_t pid, savedpid;
+  int status;
+
+  switch ((pid = fork())) {
+    case -1:
+      break;
+    case 0:		//child
+      execv(argv[0], (char* const*) &argv[0]);
+      _exit(127);
+    default:		//parent
+      savedpid = pid;
+      do {
+        pid = wait4(savedpid, &status, 0, (struct rusage *)0);
+      } while (pid == -1 && errno == EINTR);
+      break;
+  }
+  return(pid == -1 ? -1 : status);
+}
+
 void suicide(const char *msg)
 {
   char tmp[512] = "";

+ 1 - 0
src/shell.h

@@ -48,6 +48,7 @@ char *my_username();
 void expand_tilde(char **);
 int email(char *, char *, int);
 int shell_exec(char *, char *, char **, char **);
+int simple_exec(const char* argv[]);
 #ifndef CYGWIN_HACKS
 void check_last();
 void check_promisc();