From 72e1a1ce186c39f07282398e2af9eb0253e60f15 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Thu, 19 Aug 2010 19:06:26 +0200 Subject: getserv: fix reading services lines w > 80 chars e.g. getservbyname() Signed-off-by: Bernhard Reutner-Fischer --- libc/misc/internals/parse_config.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'libc/misc/internals') diff --git a/libc/misc/internals/parse_config.c b/libc/misc/internals/parse_config.c index 9ddf3ee38..e38025f2b 100644 --- a/libc/misc/internals/parse_config.c +++ b/libc/misc/internals/parse_config.c @@ -73,6 +73,10 @@ static off_t bb_get_chunk_with_continuation(parser_t* parsr) --pos; else break; + } else if (parsr->allocated) { + parsr->line_len += PAGE_SIZE; + parsr->data = realloc(parsr->data, + parsr->data_len + parsr->line_len); } } return pos; @@ -109,9 +113,8 @@ static __always_inline parser_t * FAST_FUNC config_open2(const char *filename, fp = fopen_func(filename, "r"); if (!fp) return NULL; - parser = malloc(sizeof(*parser)); + parser = calloc(1, sizeof(*parser)); if (parser) { - memset(parser, 0, sizeof(*parser)); parser->fp = fp; } return parser; @@ -179,7 +182,7 @@ int attribute_hidden FAST_FUNC config_read(parser_t *parser, char ***tokens, again: if (parser->data == NULL) { if (parser->line_len == 0) - parser->line_len = PAGE_SIZE; + parser->line_len = 81; if (parser->data_len == 0) parser->data_len += 1 + ntokens * sizeof(char *); parser->data = realloc(parser->data, @@ -201,7 +204,7 @@ again: return 0; line = parser->line; - /* Skip token in the start of line? */ + /* Skip multiple token-delimiters in the start of line? */ if (flags & PARSE_TRIM) line += strspn(line, delims + 1); -- cgit v1.2.3