New function process_run().
authorBen Pfaff <blp@nicira.com>
Tue, 13 Jan 2009 00:49:55 +0000 (16:49 -0800)
committerBen Pfaff <blp@nicira.com>
Tue, 13 Jan 2009 21:16:48 +0000 (13:16 -0800)
lib/process.c
lib/process.h

index 6680ef8adc35bdf64591f72d43809c2c75a04aeb..3315e361abbff20e3c4c4878e9035236129213f5 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008 The Board of Trustees of The Leland Stanford
+/* Copyright (c) 2008, 2009 The Board of Trustees of The Leland Stanford
  * Junior University
  *
  * We are making the OpenFlow specification and associated documentation
@@ -263,6 +263,27 @@ process_status(const struct process *p)
     return p->status;
 }
 
+int
+process_run(char **argv, int *status)
+{
+    struct process *p;
+    int retval;
+
+    retval = process_start(argv, NULL, 0, &p);
+    if (retval) {
+        *status = 0;
+        return retval;
+    }
+
+    while (!process_exited(p)) {
+        process_wait(p);
+        poll_block();
+    }
+    *status = process_status(p);
+    process_destroy(p);
+    return 0;
+}
+
 /* Given 'status', which is a process status in the form reported by waitpid(2)
  * and returned by process_status(), returns a string describing how the
  * process terminated.  The caller is responsible for freeing the string when
index 22601009bea9a7a50e39fd5613a70e4b80d76588..b9c80913b3fe32083f6b03fdd9fef6e33ff336e2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008 The Board of Trustees of The Leland Stanford
+/* Copyright (c) 2008, 2009 The Board of Trustees of The Leland Stanford
  * Junior University
  *
  * We are making the OpenFlow specification and associated documentation
@@ -44,6 +44,8 @@ int process_start(char **argv, const int *keep_fds, size_t n_keep_fds,
 void process_destroy(struct process *);
 int process_kill(const struct process *, int signr);
 
+int process_run(char **argv, int *status);
+
 pid_t process_pid(const struct process *);
 const char *process_name(const struct process *);
 bool process_exited(struct process *);