Browse Source

Eliminate SF_ARGLIST: not portable

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@40487 15284696-431f-4ddb-bdfa-cd5b030d7da7
Glynn Clements 15 years ago
parent
commit
118a3c61e1
2 changed files with 12 additions and 10 deletions
  1. 0 1
      include/spawn.h
  2. 12 9
      lib/gis/spawn.c

+ 0 - 1
include/spawn.h

@@ -23,7 +23,6 @@
 #define SF_BACKGROUND			((const char *) 7)
 #define SF_DIRECTORY			((const char *) 8)
 #define SF_ARGVEC			((const char *) 9)
-#define SF_ARGLIST			((const char *) 10)
 
 enum signal_action
 {

+ 12 - 9
lib/gis/spawn.c

@@ -768,9 +768,6 @@ static void parse_argvec(struct spawn *sp, const char **va)
 	else if (arg == SF_ARGVEC) {
 	    parse_argvec(sp, NEXT_ARG(va, const char **));
 	}
-	else if (arg == SF_ARGLIST) {
-	    parse_arglist(sp, NEXT_ARG(va, va_list));
-	}
 	else
 	    sp->args[sp->num_args++] = arg;
     }
@@ -838,9 +835,6 @@ static void parse_arglist(struct spawn *sp, va_list va)
 	else if (arg == SF_ARGVEC) {
 	    parse_argvec(sp, va_arg(va, const char **));
 	}
-	else if (arg == SF_ARGLIST) {
-	    parse_arglist(sp, va_arg(va, va_list));
-	}
 	else
 	    sp->args[sp->num_args++] = arg;
     }
@@ -901,11 +895,22 @@ int G_spawn_ex(const char *command, ...)
 
 int G_spawn(const char *command, ...)
 {
+    const char *args[MAX_ARGS];
+    int num_args = 0, i;
     va_list va;
     int status = -1;
 
     va_start(va, command);
 
+    for (i = 0; ; i++) {
+	const char *arg = va_arg(va, const char *);
+	args[num_args++] = arg;
+	if (!arg)
+	    break;
+    }
+
+    va_end(va);
+
     status = G_spawn_ex(
 	command,
 #ifndef __MINGW32__
@@ -913,11 +918,9 @@ int G_spawn(const char *command, ...)
 	SF_SIGNAL, SST_PRE, SSA_IGNORE, SIGQUIT,
 	SF_SIGNAL, SST_PRE, SSA_BLOCK, SIGCHLD,
 #endif
-	SF_ARGLIST, va,
+	SF_ARGVEC, args,
 	NULL);
 
-    va_end(va);
-
     return status;
 }