aboutsummaryrefslogtreecommitdiff
path: root/libbb/parse_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbb/parse_config.c')
-rw-r--r--libbb/parse_config.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/libbb/parse_config.c b/libbb/parse_config.c
index 3174a649e..5109066d8 100644
--- a/libbb/parse_config.c
+++ b/libbb/parse_config.c
@@ -59,11 +59,11 @@ Typical usage:
59 59
60*/ 60*/
61 61
62parser_t* FAST_FUNC config_open(const char *filename) 62parser_t* FAST_FUNC config_open2(const char *filename, FILE* FAST_FUNC (*fopen_func)(const char *path))
63{ 63{
64 parser_t *parser = xzalloc(sizeof(parser_t)); 64 parser_t *parser = xzalloc(sizeof(parser_t));
65 /* empty file configures nothing */ 65 /* empty file configures nothing */
66 parser->fp = fopen_or_warn_stdin(filename); 66 parser->fp = fopen_func(filename);
67 if (parser->fp) 67 if (parser->fp)
68 return parser; 68 return parser;
69 if (ENABLE_FEATURE_CLEAN_UP) 69 if (ENABLE_FEATURE_CLEAN_UP)
@@ -71,6 +71,11 @@ parser_t* FAST_FUNC config_open(const char *filename)
71 return NULL; 71 return NULL;
72} 72}
73 73
74parser_t* FAST_FUNC config_open(const char *filename)
75{
76 return config_open2(filename, fopen_or_warn_stdin);
77}
78
74static void config_free_data(parser_t *const parser) 79static void config_free_data(parser_t *const parser)
75{ 80{
76 free(parser->line); 81 free(parser->line);
@@ -114,6 +119,7 @@ int FAST_FUNC config_read(parser_t *parser, char **tokens, unsigned flags, const
114 int ntokens = flags & 0xFF; 119 int ntokens = flags & 0xFF;
115 int mintokens = (flags & 0xFF00) >> 8; 120 int mintokens = (flags & 0xFF00) >> 8;
116 121
122 again:
117 // N.B. this could only be used in read-in-one-go version, or when tokens use xstrdup(). TODO 123 // N.B. this could only be used in read-in-one-go version, or when tokens use xstrdup(). TODO
118 //if (!parser->lineno || !(flags & PARSE_DONT_NULL)) 124 //if (!parser->lineno || !(flags & PARSE_DONT_NULL))
119 memset(tokens, 0, sizeof(tokens[0]) * ntokens); 125 memset(tokens, 0, sizeof(tokens[0]) * ntokens);
@@ -211,9 +217,13 @@ int FAST_FUNC config_read(parser_t *parser, char **tokens, unsigned flags, const
211 //bb_info_msg("A[%s]", line); 217 //bb_info_msg("A[%s]", line);
212 } 218 }
213 219
214 if (ii < mintokens) 220 if (ii < mintokens) {
215 bb_error_msg_and_die("bad line %u: %d tokens found, %d needed", 221 bb_error_msg("bad line %u: %d tokens found, %d needed",
216 parser->lineno, ii, mintokens); 222 parser->lineno, ii, mintokens);
223 if (flags & PARSE_MIN_DIE)
224 xfunc_die();
225 goto again;
226 }
217 227
218 return ii; 228 return ii;
219} 229}