Cool! But we need to not just process continuations and comments but also to parse the line into some (possibly variable) amount of whitespaces-delimited tokens.
And, as I mentioned earlier, we need to use the collected tokens in unobtrusive way in the applets. Can you go on and code these features? -- Vladimir 2008/7/8, Tito <[EMAIL PROTECTED]>: > On Monday 07 July 2008 22:29:38 Vladimir Dronnikov wrote: >> Sure :) >> But some help is needed. I am trying to convert inotifyd. mdev is >> "saint animal". Natanael mentioned ifup/down. There is crond that uses >> plain config. There gotta be savings en gros if we cope this together. >> >> -- >> Vladimir >> >> >> 2008/7/7, Bernhard Fischer <[EMAIL PROTECTED]>: >> > On Mon, Jul 07, 2008 at 12:31:29PM -0700, [EMAIL PROTECTED] wrote: >> >>A helper function for parsing vanilla config files is added. >> >>I see mdev, crond and others can use it to uniformly process their >> >> configs. >> > >> > It would be better if you would convert a few users to this new >> > parse_config() and show the size-savings. The more you save, the more we >> > all will like it :) >> > >> > Please don't forget to check that you don't accidentally introduce bugs >> > in the course. >> > >> > cheers, >> > > > Hi, > just for fun I've done my own version of parse_config(), > it returns a linked list of all the options found. > The list is then evaluated and freed by the caller. > At the moment there is just an indipendent executable > to compile in test.c and a config file i used for testing. > Usage is: ./test PATH_TO_CONFIG_FILE > and all the options should be printed to the screen: > > ./test config.cfg > option=1 > option=2 > option=corner-case1 > option=corner-case3 > option=corner-case2 > option=after_new_lines > option 3 > option 3 3 3 3 > option abracadabra > option=multiline-option > > Just my 0,2 cents....in the hope it could be somehow useful.... :-) > > Ciao, > Tito > > /* Lines starting with "#" are ignored. Note that end-of-line > * comments are supported. > * Blank lines are ignored. > * Lines may be indented freely. > * A "\" character at the very end of the line indicates the next line > * should be treated as a continuation of the current one. > */ > > llist_t *parse_config(const char *filename) > { > char *line; > char *next_line; > char *p; > char *t; > llist_t *option_list = NULL; > FILE *file = fopen(filename, "r"); > > if (file) { > while ((line = xmalloc_fgetline(file))) { > while ((p = last_char_is(line, '\\'))){ > /* Multi-line object */ > *p = '\0'; /* Remove '\' */ > next_line = xmalloc_fgetline(file); > line = xasprintf("%s%s", line, > (next_line) ? next_line : ""); > free(next_line); > } > p = skip_whitespace(line); /* Remove leading whitespace > */ > if (*p && *p != '#') { /* Not a comment or indented > comment */ > if ((t = strchr(p, '#'))) /* End of line > comment - cut it */ > *t = '\0'; > /* What remains is an option so add it to the > linked list */ > llist_add_to_end(&option_list, xstrdup(p)); > continue; > } /* else empty line */ > free(line); > } /*EOF */ > fclose(file); > } /* else cannot read - return NULL */ > return option_list; > } > > _______________________________________________ busybox mailing list busybox@busybox.net http://busybox.net/cgi-bin/mailman/listinfo/busybox