diff options
author | Denis Vlasenko | 2008-07-21 23:05:26 +0000 |
---|---|---|
committer | Denis Vlasenko | 2008-07-21 23:05:26 +0000 |
commit | 5415c856eaccd1bc5d064022770a288f43b2e94f (patch) | |
tree | 5973db4e6f81b5e311e8944700ded5db1083d440 /libbb/parse_config.c | |
parent | b74a2dba571d1c5a6127c683fb50923336d9c59f (diff) | |
download | busybox-5415c856eaccd1bc5d064022770a288f43b2e94f.zip busybox-5415c856eaccd1bc5d064022770a288f43b2e94f.tar.gz |
libbb: [x]fopen_for_{read,write} introduced and used.
(by Valdimir)
function old new delta
config_open2 - 41 +41
config_read 507 542 +35
find_pair 169 187 +18
fopen_for_write - 14 +14
fopen_for_read - 14 +14
find_main 406 418 +12
xfopen_for_write - 10 +10
xfopen_for_read - 10 +10
popstring 134 140 +6
parse_inittab 396 401 +5
next_token 923 928 +5
pack_gzip 1659 1661 +2
bb__parsespent 117 119 +2
fallbackSort 1719 1717 -2
evalvar 1376 1374 -2
qrealloc 36 33 -3
...
...
...
...
singlemount 4579 4569 -10
process_stdin 443 433 -10
patch_main 1111 1101 -10
ifupdown_main 2175 2165 -10
file_action_grep 90 80 -10
uuidcache_init 649 637 -12
hush_main 797 785 -12
read_config 230 217 -13
dpkg_main 3835 3820 -15
read_line_input 3134 3110 -24
sysctl_main 232 203 -29
config_open 40 10 -30
WARN_BAD_LINE 44 - -44
login_main 1714 1575 -139
------------------------------------------------------------------------------
(add/remove: 5/1 grow/shrink: 8/74 up/down: 174/-737) Total: -563 bytes
Diffstat (limited to 'libbb/parse_config.c')
-rw-r--r-- | libbb/parse_config.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/libbb/parse_config.c b/libbb/parse_config.c index 3174a64..5109066 100644 --- a/libbb/parse_config.c +++ b/libbb/parse_config.c @@ -59,11 +59,11 @@ Typical usage: */ -parser_t* FAST_FUNC config_open(const char *filename) +parser_t* FAST_FUNC config_open2(const char *filename, FILE* FAST_FUNC (*fopen_func)(const char *path)) { parser_t *parser = xzalloc(sizeof(parser_t)); /* empty file configures nothing */ - parser->fp = fopen_or_warn_stdin(filename); + parser->fp = fopen_func(filename); if (parser->fp) return parser; if (ENABLE_FEATURE_CLEAN_UP) @@ -71,6 +71,11 @@ parser_t* FAST_FUNC config_open(const char *filename) return NULL; } +parser_t* FAST_FUNC config_open(const char *filename) +{ + return config_open2(filename, fopen_or_warn_stdin); +} + static void config_free_data(parser_t *const parser) { free(parser->line); @@ -114,6 +119,7 @@ int FAST_FUNC config_read(parser_t *parser, char **tokens, unsigned flags, const int ntokens = flags & 0xFF; int mintokens = (flags & 0xFF00) >> 8; + again: // N.B. this could only be used in read-in-one-go version, or when tokens use xstrdup(). TODO //if (!parser->lineno || !(flags & PARSE_DONT_NULL)) memset(tokens, 0, sizeof(tokens[0]) * ntokens); @@ -211,9 +217,13 @@ int FAST_FUNC config_read(parser_t *parser, char **tokens, unsigned flags, const //bb_info_msg("A[%s]", line); } - if (ii < mintokens) - bb_error_msg_and_die("bad line %u: %d tokens found, %d needed", - parser->lineno, ii, mintokens); + if (ii < mintokens) { + bb_error_msg("bad line %u: %d tokens found, %d needed", + parser->lineno, ii, mintokens); + if (flags & PARSE_MIN_DIE) + xfunc_die(); + goto again; + } return ii; } |