aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-07-19 22:57:00 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-07-19 22:57:00 +0000
commitdcb3fcb042612bfbb311a488379c65024bafd52b (patch)
treece29b24ad433b8d8a4e0b450ca458bcde69a9a88
parentc29684afd61b841c93517f378aaa1fd7750b038d (diff)
downloadbusybox-w32-dcb3fcb042612bfbb311a488379c65024bafd52b.tar.gz
busybox-w32-dcb3fcb042612bfbb311a488379c65024bafd52b.tar.bz2
busybox-w32-dcb3fcb042612bfbb311a488379c65024bafd52b.zip
libbb: config_read() update
-rw-r--r--Config.in4
-rw-r--r--include/libbb.h14
-rw-r--r--libbb/parse_config.c8
-rw-r--r--miscutils/crond.c8
4 files changed, 16 insertions, 18 deletions
diff --git a/Config.in b/Config.in
index 8de667804..8e55edb57 100644
--- a/Config.in
+++ b/Config.in
@@ -482,10 +482,6 @@ config INCLUDE_SUSv2
482config PARSE 482config PARSE
483 bool "Uniform config file parser debugging applet: parse" 483 bool "Uniform config file parser debugging applet: parse"
484 484
485config FEATURE_PARSE_COPY
486 bool "Keep a copy of current line"
487 depends on PARSE
488
489endmenu 485endmenu
490 486
491menu 'Installation Options' 487menu 'Installation Options'
diff --git a/include/libbb.h b/include/libbb.h
index af6c1385d..4e4e37911 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -990,14 +990,18 @@ int bb_parse_mode(const char* s, mode_t* theMode) FAST_FUNC;
990/* 990/*
991 * Config file parser 991 * Config file parser
992 */ 992 */
993#define PARSE_DONT_REDUCE 0x00010000 // do not treat consecutive delimiters as one 993enum {
994#define PARSE_DONT_TRIM 0x00020000 // do not trim line of leading and trailing delimiters 994 PARSE_DONT_REDUCE = 0x00010000, // do not treat consecutive delimiters as one
995#define PARSE_LAST_IS_GREEDY 0x00040000 // last token takes whole remainder of the line 995 PARSE_DONT_TRIM = 0x00020000, // do not trim line of leading and trailing delimiters
996//#define PARSE_DONT_NULL 0x00080000 // do not set tokens[] to NULL 996 PARSE_LAST_IS_GREEDY = 0x00040000, // last token takes whole remainder of the line
997// PARSE_DONT_NULL = 0x00080000, // do not set tokens[] to NULL
998 // keep a copy of current line
999 PARSE_KEEP_COPY = 0x00200000 * ENABLE_DEBUG_CROND_OPTION,
1000};
997typedef struct parser_t { 1001typedef struct parser_t {
998 FILE *fp; 1002 FILE *fp;
999 char *line; 1003 char *line;
1000 USE_FEATURE_PARSE_COPY(char *data;) 1004 char *data;
1001 int lineno; 1005 int lineno;
1002} parser_t; 1006} parser_t;
1003parser_t* config_open(const char *filename) FAST_FUNC; 1007parser_t* config_open(const char *filename) FAST_FUNC;
diff --git a/libbb/parse_config.c b/libbb/parse_config.c
index 3945501ad..8d7c97eb1 100644
--- a/libbb/parse_config.c
+++ b/libbb/parse_config.c
@@ -75,10 +75,10 @@ static void config_free_data(parser_t *const parser)
75{ 75{
76 free(parser->line); 76 free(parser->line);
77 parser->line = NULL; 77 parser->line = NULL;
78 USE_FEATURE_PARSE_COPY( 78 if (PARSE_KEEP_COPY) { /* compile-time constant */
79 free(parser->data); 79 free(parser->data);
80 parser->data = NULL; 80 parser->data = NULL;
81 ) 81 }
82} 82}
83 83
84void FAST_FUNC config_close(parser_t *parser) 84void FAST_FUNC config_close(parser_t *parser)
@@ -179,9 +179,9 @@ int FAST_FUNC config_read(parser_t *parser, char **tokens, unsigned flags, const
179 179
180 // store line 180 // store line
181 parser->line = line = xrealloc(line, ii + 1); 181 parser->line = line = xrealloc(line, ii + 1);
182 USE_FEATURE_PARSE_COPY( 182 if (flags & PARSE_KEEP_COPY) {
183 parser->data = xstrdup(line); 183 parser->data = xstrdup(line);
184 ) 184 }
185 185
186 /* now split line to tokens */ 186 /* now split line to tokens */
187 ntokens--; // now it's max allowed token no 187 ntokens--; // now it's max allowed token no
diff --git a/miscutils/crond.c b/miscutils/crond.c
index 154243c78..c7ee793a5 100644
--- a/miscutils/crond.c
+++ b/miscutils/crond.c
@@ -470,14 +470,12 @@ static void SynchronizeFile(const char *fileName)
470 pline = &file->cf_LineBase; 470 pline = &file->cf_LineBase;
471 471
472 while (--maxLines 472 while (--maxLines
473 && (n = config_read(parser, tokens, 6, 1, "# \t", PARSE_LAST_IS_GREEDY)) 473 && (n = config_read(parser, tokens, 6, 1, "# \t", PARSE_LAST_IS_GREEDY|PARSE_KEEP_COPY))
474 ) { 474 ) {
475 CronLine *line; 475 CronLine *line;
476 476
477 USE_FEATURE_PARSE_COPY( 477 if (DebugOpt)
478 if (DebugOpt) 478 crondlog(LVL5 "user:%s entry:%s", fileName, parser->data);
479 crondlog(LVL5 "user:%s entry:%s", fileName, parser->data);
480 )
481 479
482 /* check if line is setting MAILTO= */ 480 /* check if line is setting MAILTO= */
483 if (0 == strncmp(tokens[0], "MAILTO=", 7)) { 481 if (0 == strncmp(tokens[0], "MAILTO=", 7)) {