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
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user