LIBBB: parse_config()

Denys Vlasenko vda.linux at googlemail.com
Tue Jul 8 03:47:53 UTC 2008


[CC: busybox at busybox.net]

On Monday 07 July 2008 21:31, dronnikov at gmail.com wrote:
> Please, comment and consider applying.

+static void FAST_FUNC replace(char *s, char what, char with)

You do not need FAST_FUNCs on static functions. gcc does it itself.
At least I try to believe gcc will pick the most optimal ABI
for them without help...

+char FAST_FUNC **parse_config(
+	const char *filename,	// name of config file to parse
+	int ntokens,		// required amount of tokens, remainder to be returned verbatim
+				// just set to big number
...
+	char **tokens = xzalloc(128 * sizeof(char *) *
+		(ntokens /* required tokens */ + 1 /* end-of-tokens-on-this-line marker*/));

Guess what "big number" users will put there? INT_MAX.

+		line = strtok(s, "\n"); // N.B. s != NULL only the first time
+		if (!line)
+			break;

strtok uses static storage. I want to get rid of it eventually.
Maybe strsep?


+		replace(line, '#', '\0');

*strchrnul(line, '#') = '\0'. replace will do useless work
after first '#'.

+		// skip comments and empty lines
+		line = skip_whitespace(line);
+		if (!line)
+			continue;

I think it had to be if (!*line).

+			// pin token
+			// FIXME: realloc!!!
+			*token++ = s;

realloc indeed. I find this to be a useful idiom:
        if (!(idx & 0xfff)) {
                vector = xrealloc(vector, sizeof(vector[0]) * (idx + 0x1001));
Another libbb candidate?


+		token++; // xzmalloc guarantees NULL

it's "xzalloc" :)
--
vda



More information about the busybox mailing list