[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r18923 - in gnunet/src: include util,
gnunet <=