gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r18923 - in gnunet/src: include util


From: gnunet
Subject: [GNUnet-SVN] r18923 - in gnunet/src: include util
Date: Mon, 2 Jan 2012 09:24:28 +0100

Author: grothoff
Date: 2012-01-02 09:24:28 +0100 (Mon, 02 Jan 2012)
New Revision: 18923

Modified:
   gnunet/src/include/gnunet_os_lib.h
   gnunet/src/util/os_priority.c
Log:
adding GNUNET_OS_start_process_vap function

Modified: gnunet/src/include/gnunet_os_lib.h
===================================================================
--- gnunet/src/include/gnunet_os_lib.h  2012-01-02 07:57:38 UTC (rev 18922)
+++ gnunet/src/include/gnunet_os_lib.h  2012-01-02 08:24:28 UTC (rev 18923)
@@ -241,12 +241,29 @@
                                 enum GNUNET_SCHEDULER_Priority prio);
 
 
+
 /**
  * Start a process.
  *
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
+ * @param argv NULL-terminated array of arguments to the process
+ * @return pointer to process structure of the new process, NULL on error
+ */
+struct GNUNET_OS_Process *
+GNUNET_OS_start_process_vap (struct GNUNET_DISK_PipeHandle *pipe_stdin,
+                            struct GNUNET_DISK_PipeHandle *pipe_stdout,
+                            const char *filename, 
+                            char *const argv[]);
+
+
+/**
+ * Start a process.
+ *
+ * @param pipe_stdin pipe to use to send input to child process (or NULL)
+ * @param pipe_stdout pipe to use to get output from child process (or NULL)
+ * @param filename name of the binary
  * @param ... NULL-terminated list of arguments to the process
  * @return pointer to process structure of the new process, NULL on error
  */

Modified: gnunet/src/util/os_priority.c
===================================================================
--- gnunet/src/util/os_priority.c       2012-01-02 07:57:38 UTC (rev 18922)
+++ gnunet/src/util/os_priority.c       2012-01-02 08:24:28 UTC (rev 18923)
@@ -534,16 +534,15 @@
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
- * @param va NULL-terminated list of arguments to the process
+ * @param argv NULL-terminated array of arguments to the process
  * @return pointer to process structure of the new process, NULL on error
  */
 struct GNUNET_OS_Process *
-GNUNET_OS_start_process_va (struct GNUNET_DISK_PipeHandle *pipe_stdin,
-                            struct GNUNET_DISK_PipeHandle *pipe_stdout,
-                            const char *filename, va_list va)
+GNUNET_OS_start_process_vap (struct GNUNET_DISK_PipeHandle *pipe_stdin,
+                            struct GNUNET_DISK_PipeHandle *pipe_stdout,
+                            const char *filename, 
+                            char *const argv[])
 {
-  va_list ap;
-
 #if ENABLE_WINDOWS_WORKAROUNDS
   char *childpipename = NULL;
   struct GNUNET_DISK_FileHandle *control_pipe = NULL;
@@ -552,8 +551,6 @@
 
 #ifndef MINGW
   pid_t ret;
-  char **argv;
-  int argc;
   int fd_stdout_write;
   int fd_stdout_read;
   int fd_stdin_read;
@@ -567,20 +564,6 @@
   if (control_pipe == NULL)
     return NULL;
 #endif
-
-  argc = 0;
-  va_copy (ap, va);
-  while (NULL != va_arg (ap, char *))
-         argc++;
-
-  va_end (ap);
-  argv = GNUNET_malloc (sizeof (char *) * (argc + 1));
-  argc = 0;
-  va_copy (ap, va);
-  while (NULL != (argv[argc] = va_arg (ap, char *)))
-         argc++;
-
-  va_end (ap);
   if (pipe_stdout != NULL)
   {
     GNUNET_DISK_internal_file_handle_ (GNUNET_DISK_pipe_handle
@@ -619,7 +602,6 @@
       gnunet_proc->control_pipe = control_pipe;
 #endif
     }
-    GNUNET_free (argv);
 #if ENABLE_WINDOWS_WORKAROUNDS
     GNUNET_free (childpipename);
 #endif
@@ -656,7 +638,7 @@
   char *cmd, *idx;
   STARTUPINFOW start;
   PROCESS_INFORMATION proc;
-
+  int argc;
   HANDLE stdin_handle;
   HANDLE stdout_handle;
 
@@ -721,26 +703,24 @@
   GNUNET_free (non_const_filename);
 
   cmdlen = 0;
-  va_copy (ap, va);
-  while (NULL != (arg = va_arg (ap, char *)))
+  argc = 0;
+  while (NULL != (arg = argv[argc++]))
   {
     if (cmdlen == 0)
       cmdlen = cmdlen + strlen (path) + 3;
     else
       cmdlen = cmdlen + strlen (arg) + 3;
   }
-  va_end (ap);
 
   cmd = idx = GNUNET_malloc (sizeof (char) * (cmdlen + 1));
-  va_copy (ap, va);
-  while (NULL != (arg = va_arg (ap, char *)))
+  argc = 0;
+  while (NULL != (arg = argv[argc++]))
   {
     if (idx == cmd)
       idx += sprintf (idx, "\"%s\" ", path);
     else
       idx += sprintf (idx, "\"%s\" ", arg);
   }
-  va_end (ap);
 
   memset (&start, 0, sizeof (start));
   start.cb = sizeof (start);
@@ -826,6 +806,46 @@
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
+ * @param va NULL-terminated list of arguments to the process
+ * @return pointer to process structure of the new process, NULL on error
+ */
+struct GNUNET_OS_Process *
+GNUNET_OS_start_process_va (struct GNUNET_DISK_PipeHandle *pipe_stdin,
+                            struct GNUNET_DISK_PipeHandle *pipe_stdout,
+                            const char *filename, va_list va)
+{
+  struct GNUNET_OS_Process *ret;
+  va_list ap;
+  char **argv;
+  int argc;
+
+  argc = 0;
+  va_copy (ap, va);
+  while (NULL != va_arg (ap, char *))
+    argc++;
+  va_end (ap);
+  argv = GNUNET_malloc (sizeof (char *) * (argc + 1));
+  argc = 0;
+  va_copy (ap, va);
+  while (NULL != (argv[argc] = va_arg (ap, char *)))
+    argc++;
+  va_end (ap);
+  ret = GNUNET_OS_start_process_vap (pipe_stdin,
+                                    pipe_stdout,
+                                    filename,
+                                    argv);
+  GNUNET_free (argv);
+  return ret;
+}
+
+
+
+/**
+ * Start a process.
+ *
+ * @param pipe_stdin pipe to use to send input to child process (or NULL)
+ * @param pipe_stdout pipe to use to get output from child process (or NULL)
+ * @param filename name of the binary
  * @param ... NULL-terminated list of arguments to the process
  *
  * @return pointer to process structure of the new process, NULL on error




reply via email to

[Prev in Thread] Current Thread [Next in Thread]