[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r11854 - gnunet/src/util
From: |
gnunet |
Subject: |
[GNUnet-SVN] r11854 - gnunet/src/util |
Date: |
Mon, 21 Jun 2010 20:52:56 +0200 |
Author: durner
Date: 2010-06-21 20:52:56 +0200 (Mon, 21 Jun 2010)
New Revision: 11854
Modified:
gnunet/src/util/os_priority.c
Log:
fix mem issues, add ".exe" extension to path (fixes #1570, thanks to LRN on
#gnunet)
Modified: gnunet/src/util/os_priority.c
===================================================================
--- gnunet/src/util/os_priority.c 2010-06-21 18:26:06 UTC (rev 11853)
+++ gnunet/src/util/os_priority.c 2010-06-21 18:52:56 UTC (rev 11854)
@@ -370,22 +370,62 @@
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "execvp", filename);
_exit (1);
#else
- char **arg;
+ char **arg, **non_const_argv;
unsigned int cmdlen;
char *cmd, *idx;
STARTUPINFO start;
PROCESS_INFORMATION proc;
+ int argcount = 0;
+ char *non_const_filename = NULL;
+ int filenamelen = 0;
- cmdlen = 0;
+ /* Count the number of arguments */
arg = argv;
while (*arg)
{
+ arg++;
+ argcount++;
+ }
+
+ /* Allocate a copy argv */
+ non_const_argv = GNUNET_malloc (sizeof (char *) * (argcount + 1));
+
+ /* Copy all argv strings */
+ argcount = 0;
+ arg = argv;
+ while (*arg)
+ {
+ non_const_argv[argcount] = GNUNET_strdup (*arg);
+ arg++;
+ argcount++;
+ }
+ non_const_argv[argcount] = NULL;
+
+ /* Fix .exe extension */
+ filenamelen = strlen (filename);
+ if (filenamelen <= 4 || stricmp (&filename[filenamelen - 4], ".exe") != 0)
+ {
+ non_const_filename = GNUNET_malloc (sizeof (char) * (filenamelen + 4 + 1));
+ non_const_filename = strcpy (non_const_filename, non_const_argv[0]);
+ strcat (non_const_filename, ".exe");
+ GNUNET_free (non_const_argv[0]);
+ non_const_argv[0] = non_const_filename;
+ }
+ else
+ non_const_filename = non_const_argv[0];
+
+ /* Count cmd len */
+ cmdlen = 1;
+ arg = non_const_argv;
+ while (*arg)
+ {
cmdlen = cmdlen + strlen (*arg) + 3;
arg++;
}
+ /* Allocate and create cmd */
cmd = idx = GNUNET_malloc (sizeof (char) * cmdlen);
- arg = argv;
+ arg = non_const_argv;
while (*arg)
{
idx += sprintf (idx, "\"%s\" ", *arg);
@@ -396,7 +436,7 @@
start.cb = sizeof (start);
if (!CreateProcess
- (filename, cmd, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &start,
+ (non_const_filename, cmd, NULL, NULL, FALSE, DETACHED_PROCESS, NULL,
NULL, &start,
&proc))
{
SetErrnoFromWinError (GetLastError ());
@@ -409,6 +449,10 @@
CloseHandle (proc.hThread);
GNUNET_free (cmd);
+ while (argcount > 0)
+ GNUNET_free (non_const_argv[--argcount]);
+ GNUNET_free (non_const_argv);
+
return proc.dwProcessId;
#endif
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r11854 - gnunet/src/util,
gnunet <=