Module Name: src Committed By: sjg Date: Wed Feb 12 01:35:56 UTC 2014
Modified Files: src/usr.bin/make: str.c Log Message: Reduce the calls to realloc from brk_string by basing initial argmax guess on length of input. Reviewed by: christos To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/usr.bin/make/str.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/str.c diff -u src/usr.bin/make/str.c:1.34 src/usr.bin/make/str.c:1.35 --- src/usr.bin/make/str.c:1.34 Sat Mar 3 23:16:47 2012 +++ src/usr.bin/make/str.c Wed Feb 12 01:35:56 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: str.c,v 1.34 2012/03/03 23:16:47 dholland Exp $ */ +/* $NetBSD: str.c,v 1.35 2014/02/12 01:35:56 sjg Exp $ */ /*- * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: str.c,v 1.34 2012/03/03 23:16:47 dholland Exp $"; +static char rcsid[] = "$NetBSD: str.c,v 1.35 2014/02/12 01:35:56 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)str.c 5.8 (Berkeley) 6/1/90"; #else -__RCSID("$NetBSD: str.c,v 1.34 2012/03/03 23:16:47 dholland Exp $"); +__RCSID("$NetBSD: str.c,v 1.35 2014/02/12 01:35:56 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -145,7 +145,7 @@ brk_string(const char *str, int *store_a const char *p; int len; int argmax = 50, curlen = 0; - char **argv = bmake_malloc((argmax + 1) * sizeof(char *)); + char **argv; /* skip leading space chars. */ for (; *str == ' ' || *str == '\t'; ++str) @@ -156,6 +156,12 @@ brk_string(const char *str, int *store_a *buffer = bmake_malloc(curlen = len); /* + * initial argmax based on len + */ + argmax = MAX((len / 5), 50); + argv = bmake_malloc((argmax + 1) * sizeof(char *)); + + /* * copy the string; at the same time, parse backslashes, * quotes and build the argument list. */