From 669242c2c8009b2a257131ba1a3cf497b9472cc4 Mon Sep 17 00:00:00 2001 From: Paulo Zanoni Date: Fri, 9 Sep 2011 14:14:48 -0300 Subject: [PATCH] test: fix append_argv() When I ran "CAIRO_TESTS=a1-bug make test", no test executed because of a bug in append_argv(). The "olen" variable was assuming that we always only append a single argument to argv and the resulting argc was also wrong. Signed-off-by: Paulo Zanoni Signed-off-by: Chris Wilson --- test/cairo-test-runner.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/test/cairo-test-runner.c b/test/cairo-test-runner.c index 87c6db0ab..4afcafcf6 100644 --- a/test/cairo-test-runner.c +++ b/test/cairo-test-runner.c @@ -280,6 +280,7 @@ append_argv (int *argc, char ***argv, const char *str) int olen; int len; int i; + int args_to_add = 0; if (str == NULL) return; @@ -290,9 +291,9 @@ append_argv (int *argc, char ***argv, const char *str) doit = FALSE; do { if (doit) - *argv = xmalloc (sizeof (char *) * (1 + *argc) + olen); + *argv = xmalloc (olen); - olen = sizeof (char *) * (1 + *argc); + olen = sizeof (char *) * (args_to_add + *argc); for (i = 0; i < old_argc; i++) { len = strlen (old_argv[i]) + 1; if (doit) { @@ -310,7 +311,10 @@ append_argv (int *argc, char ***argv, const char *str) (*argv)[i] = (char *) *argv + olen; memcpy ((*argv)[i], s, len); (*argv)[i][len] = '\0'; + } else { + olen += sizeof (char *); } + args_to_add++; olen += len + 1; i++; } @@ -321,13 +325,15 @@ append_argv (int *argc, char ***argv, const char *str) if (doit) { (*argv)[i] = (char *) *argv + olen; memcpy ((*argv)[i], s, len); + } else { + olen += sizeof (char *); } + args_to_add++; olen += len; i++; } } while (doit++ == FALSE); - (*argv)[i] = NULL; - *argc += i; + *argc = i; } static void