Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v3] ext-toolchain-wrapper.c: Handle an arbitrary amount of arguments
@ 2011-06-21 19:54 Daniel Nyström
  2011-06-21 21:05 ` Mike Frysinger
  2011-06-21 22:21 ` Peter Korsgaard
  0 siblings, 2 replies; 4+ messages in thread
From: Daniel Nyström @ 2011-06-21 19:54 UTC (permalink / raw)
  To: buildroot

Even though MAXARGS 1000 seems large, it wasn't enought for at least
QtWebKit package. This new version does not have any predefined limits.

Closes #3907

Many thanks to Thomas for tracing the source of the build error.

Signed-off-by: Daniel Nystr?m <daniel.nystrom@timeterminal.se>
Reported-by: Thomas Bj?rk <thomas.bjork@home.se>
---

New in v3:
 * Really add the changes mentioned in v2; 
   - Removed unused variable 'i'
 * Add __FILE__ to perror() for easy tracking failures (even though
   it's unlikely to happen)


 .../toolchain-external/ext-toolchain-wrapper.c     |   31 +++++++++++++-------
 1 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/toolchain/toolchain-external/ext-toolchain-wrapper.c b/toolchain/toolchain-external/ext-toolchain-wrapper.c
index a485e74..d6876e5 100644
--- a/toolchain/toolchain-external/ext-toolchain-wrapper.c
+++ b/toolchain/toolchain-external/ext-toolchain-wrapper.c
@@ -4,6 +4,7 @@
  * to ensure the external toolchain uses the correct configuration.
  *
  * (C) 2011 Peter Korsgaard <jacmet@sunsite.dk>
+ * (C) 2011 Daniel Nystr?m <daniel.nystrom@timeterminal.se>
  *
  * This file is licensed under the terms of the GNU General Public License
  * version 2.  This program is licensed "as is" without any warranty of any
@@ -14,12 +15,11 @@
 #include <string.h>
 #include <limits.h>
 #include <unistd.h>
-
-#define MAXARGS 1000
+#include <stdlib.h>
 
 static char path[PATH_MAX] = BR_CROSS_PATH;
 
-static char *args[MAXARGS] = {
+static char *predef_args[] = {
 	path,
 	"--sysroot", BR_SYSROOT,
 #ifdef BR_ARCH
@@ -54,22 +54,31 @@ static const char *get_basename(const char *name)
 
 int main(int argc, char **argv)
 {
-	int i;
-
-	for (i=0; args[i]; i++);
+	char **args, **cur;
 
-	if ((argc+i) >= MAXARGS) {
-		fputs("Too many arguments\n", stderr);
-		return 1;
+	cur = args = malloc(sizeof(predef_args) + (sizeof(char *) * argc));
+	if (args == NULL) {
+		perror(__FILE__ ": malloc");
+		abort();
 	}
 
-	/* forward args */
-	memcpy(&args[i], &argv[1], sizeof(argv[0]) * (argc - 1));
+	/* start with predefined args */
+	memcpy(cur, predef_args, sizeof(predef_args));
+	cur += sizeof(predef_args) / sizeof(predef_args[0]);
+
+	/* append forward args */
+	memcpy(cur, &argv[1], sizeof(char *) * (argc - 1));
+	cur += argc - 1;
+
+	/* finish with NULL termination */
+	*cur = NULL;
 
 	strcat(path, get_basename(argv[0]));
 
 	if (execv(path, args))
 		perror(path);
 
+	free(args);
+
 	return 2;
 }
-- 
1.7.4.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH v3] ext-toolchain-wrapper.c: Handle an arbitrary amount of arguments
  2011-06-21 19:54 [Buildroot] [PATCH v3] ext-toolchain-wrapper.c: Handle an arbitrary amount of arguments Daniel Nyström
@ 2011-06-21 21:05 ` Mike Frysinger
  2011-06-21 21:20   ` Daniel Nyström
  2011-06-21 22:21 ` Peter Korsgaard
  1 sibling, 1 reply; 4+ messages in thread
From: Mike Frysinger @ 2011-06-21 21:05 UTC (permalink / raw)
  To: buildroot

2011/6/21 Daniel Nystr?m:
> Even though MAXARGS 1000 seems large, it wasn't enought for at least

enought -> enough

> + ? ? ? cur += sizeof(predef_args) / sizeof(predef_args[0]);

looks like you should add an ARRAY_SIZE define to the top of the file

> + ? ? ? memcpy(cur, &argv[1], sizeof(char *) * (argc - 1));

in practice there's probably no difference, but this should be sizeof(argv[0])
-mike

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH v3] ext-toolchain-wrapper.c: Handle an arbitrary amount of arguments
  2011-06-21 21:05 ` Mike Frysinger
@ 2011-06-21 21:20   ` Daniel Nyström
  0 siblings, 0 replies; 4+ messages in thread
From: Daniel Nyström @ 2011-06-21 21:20 UTC (permalink / raw)
  To: buildroot

Thanks for your comments, Mike!

2011/6/21 Mike Frysinger <vapier@gentoo.org>:
> 2011/6/21 Daniel Nystr?m:
>> Even though MAXARGS 1000 seems large, it wasn't enought for at least
>
> enought -> enough

Thanks. I'm sure Peter will fix the spelling when committing.

>> + ? ? ? cur += sizeof(predef_args) / sizeof(predef_args[0]);
>
> looks like you should add an ARRAY_SIZE define to the top of the file
>
>> + ? ? ? memcpy(cur, &argv[1], sizeof(char *) * (argc - 1));
>
> in practice there's probably no difference, but this should be sizeof(argv[0])

I actually had both of these in mind, but ended up with this since I
think it looks most "clean". But I guess it's a matter of taste.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH v3] ext-toolchain-wrapper.c: Handle an arbitrary amount of arguments
  2011-06-21 19:54 [Buildroot] [PATCH v3] ext-toolchain-wrapper.c: Handle an arbitrary amount of arguments Daniel Nyström
  2011-06-21 21:05 ` Mike Frysinger
@ 2011-06-21 22:21 ` Peter Korsgaard
  1 sibling, 0 replies; 4+ messages in thread
From: Peter Korsgaard @ 2011-06-21 22:21 UTC (permalink / raw)
  To: buildroot

>>>>> "Daniel" == Daniel Nystr?m <daniel.nystrom@timeterminal.se> writes:

 Daniel> Even though MAXARGS 1000 seems large, it wasn't enought for at least
 Daniel> QtWebKit package. This new version does not have any predefined limits.

 Daniel> Closes #3907

 Daniel> Many thanks to Thomas for tracing the source of the build error.

 Daniel> Signed-off-by: Daniel Nystr?m <daniel.nystrom@timeterminal.se>
 Daniel> Reported-by: Thomas Bj?rk <thomas.bjork@home.se>

Committed, thanks!

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-06-21 22:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-21 19:54 [Buildroot] [PATCH v3] ext-toolchain-wrapper.c: Handle an arbitrary amount of arguments Daniel Nyström
2011-06-21 21:05 ` Mike Frysinger
2011-06-21 21:20   ` Daniel Nyström
2011-06-21 22:21 ` Peter Korsgaard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox