about summary refs log tree commit diff
path: root/posix/tst-spawn.c
diff options
context:
space:
mode:
Diffstat (limited to 'posix/tst-spawn.c')
-rw-r--r--posix/tst-spawn.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/posix/tst-spawn.c b/posix/tst-spawn.c
index 718602eb3c..66fd26bba8 100644
--- a/posix/tst-spawn.c
+++ b/posix/tst-spawn.c
@@ -169,12 +169,13 @@ do_test (int argc, char *argv[])
   char fd3name[18];
   char fd4name[18];
   char *spargv[12];
+  int i;
 
   /* We must have
-     - four parameters left of called initially
-       + path for ld.so
-       + "--library-path"
-       + the library path
+     - one or four parameters left if called initially
+       + path for ld.so		optional
+       + "--library-path"	optional
+       + the library path	optional
        + the application name
      - five parameters left if called through re-execution
        + file descriptor number which is supposed to be closed
@@ -183,7 +184,7 @@ do_test (int argc, char *argv[])
        + thhe duped second descriptor
        + the name of the closed descriptor
   */
-  if (argc != (restart ? 6 : 5))
+  if (argc != (restart ? 6 : 2) && argc != (restart ? 6 : 5))
     error (EXIT_FAILURE, 0, "wrong number of arguments (%d)", argc);
 
   if (restart)
@@ -235,18 +236,16 @@ do_test (int argc, char *argv[])
    snprintf (fd3name, sizeof fd3name, "%d", fd3);
    snprintf (fd4name, sizeof fd4name, "%d", fd4);
 
-   spargv[0] = argv[1];
-   spargv[1] = argv[2];
-   spargv[2] = argv[3];
-   spargv[3] = argv[4];
-   spargv[4] = (char *) "--direct";
-   spargv[5] = (char *) "--restart";
-   spargv[6] = fd1name;
-   spargv[7] = fd2name;
-   spargv[8] = fd3name;
-   spargv[9] = fd4name;
-   spargv[10] = name1;
-   spargv[11] = NULL;
+   for (i = 0; i < (argc == (restart ? 6 : 5) ? 4 : 1); i++)
+     spargv[i] = argv[i + 1];
+   spargv[i++] = (char *) "--direct";
+   spargv[i++] = (char *) "--restart";
+   spargv[i++] = fd1name;
+   spargv[i++] = fd2name;
+   spargv[i++] = fd3name;
+   spargv[i++] = fd4name;
+   spargv[i++] = name1;
+   spargv[i] = NULL;
 
    if (posix_spawn (&pid, argv[1], &actions, NULL, spargv, environ) != 0)
      error (EXIT_FAILURE, errno, "posix_spawn");