diff options
| author | Yaroslav de la Peña Smirnov <yps@yaroslavps.com> | 2021-11-08 17:44:18 +0300 | 
|---|---|---|
| committer | Yaroslav de la Peña Smirnov <yps@yaroslavps.com> | 2021-11-08 17:44:18 +0300 | 
| commit | 6b35ae81a38573dcc42a944ebd8c2e6317cf5ad3 (patch) | |
| tree | d9118b0db831d878db8acd33f7a69a0dbbf96849 /src | |
| parent | dc6d7befaa0de08814d4aaf85838faaf3fec8671 (diff) | |
| download | parcini-6b35ae81a38573dcc42a944ebd8c2e6317cf5ad3.tar.gz parcini-6b35ae81a38573dcc42a944ebd8c2e6317cf5ad3.zip | |
on sections shorter than 3 chars.
Diffstat (limited to 'src')
| -rw-r--r-- | src/parcini.c | 15 | ||||
| -rw-r--r-- | src/tests/parcini.c | 38 | 
2 files changed, 38 insertions, 15 deletions
| diff --git a/src/parcini.c b/src/parcini.c index 8434685..89a9356 100644 --- a/src/parcini.c +++ b/src/parcini.c @@ -56,16 +56,13 @@ lskip(char **start)  static char *  slicecpy(char *start, char *end, char **dst, size_t *dstn)  { -	size_t srcn = end - start + 1; -	if (*dst == NULL) { -		*dst = malloc(srcn + 1); -	} -	if (*dstn < srcn) { -		char *newptr = realloc(*dst, srcn + 1); +	size_t srcn = end - start; +	if (*dstn < srcn + 1) { +		*dstn = srcn + 1; +		char *newptr = realloc(*dst, *dstn);  		if (newptr == NULL) {  			return NULL;  		} -		*dstn = srcn + 1;  		*dst = newptr;  	}  	for (size_t i = 0; i < srcn; i++) { @@ -132,7 +129,7 @@ parcini_parse_next_line(parcini_t *parser, struct parcini_line *parsed)  			if (cmnt && cmnt < end) {  				return PARCINI_SECTION_PARSE_ERROR;  			} -			if (!slicecpy(start + 1, end - 1, &parser->last_section, +			if (!slicecpy(start + 1, end, &parser->last_section,  						&parser->last_section_n)) {  				return PARCINI_MEMORY_ERROR;  			} @@ -231,7 +228,7 @@ parcini_init(FILE *stream)  	if (parser != NULL) {  		parser->stream = stream;  		parser->last_section = strdup(""); -		parser->last_section_n = 2; +		parser->last_section_n = 1;  	}  	return parser; diff --git a/src/tests/parcini.c b/src/tests/parcini.c index 90d5997..7511115 100644 --- a/src/tests/parcini.c +++ b/src/tests/parcini.c @@ -53,7 +53,7 @@ test_parcini_parse_file(void)  	res = parcini_parse_next_line(parser, &line);  	asserteq(res, PARCINI_SECTION);  	asserteq(line.lineno, 6); -	asserteq(strcmp(line.section, "asection"), 0); +	asserteq(strcmp(line.section, "s"), 0);  	asserteq(line.key, NULL);  	asserteq(line.value.type, PARCINI_VALUE_NONE); @@ -61,7 +61,7 @@ test_parcini_parse_file(void)  	res = parcini_parse_next_line(parser, &line);  	asserteq(res, PARCINI_KEYVALUE);  	asserteq(line.lineno, 7); -	asserteq(strcmp(line.section, "asection"), 0); +	asserteq(strcmp(line.section, "s"), 0);  	asserteq(strcmp(line.key, "skey"), 0);  	asserteq(line.value.type, PARCINI_VALUE_STRING);  	asserteq(strcmp(line.value.value.string, "ur 2 slow"), 0); @@ -90,7 +90,7 @@ test_parcini_parse_file(void)  	res = parcini_parse_next_line(parser, &line);  	asserteq(res, PARCINI_KEYVALUE);  	asserteq(line.lineno, 12); -	asserteq(strcmp(line.section, "asection"), 0); +	asserteq(strcmp(line.section, "s"), 0);  	asserteq(strcmp(line.key, "bool2"), 0);  	asserteq(line.value.type, PARCINI_VALUE_BOOLEAN);  	asserteq(line.value.value.boolean, true); @@ -99,7 +99,7 @@ test_parcini_parse_file(void)  	res = parcini_parse_next_line(parser, &line);  	asserteq(res, PARCINI_KEYVALUE);  	asserteq(line.lineno, 13); -	asserteq(strcmp(line.section, "asection"), 0); +	asserteq(strcmp(line.section, "s"), 0);  	asserteq(strcmp(line.key, "bool3"), 0);  	asserteq(line.value.type, PARCINI_VALUE_BOOLEAN);  	asserteq(line.value.value.boolean, false); @@ -108,7 +108,7 @@ test_parcini_parse_file(void)  	res = parcini_parse_next_line(parser, &line);  	asserteq(res, PARCINI_KEYVALUE);  	asserteq(line.lineno, 14); -	asserteq(strcmp(line.section, "asection"), 0); +	asserteq(strcmp(line.section, "s"), 0);  	asserteq(strcmp(line.key, "bool3"), 0);  	asserteq(line.value.type, PARCINI_VALUE_BOOLEAN);  	asserteq(line.value.value.boolean, true); @@ -125,8 +125,34 @@ test_parcini_parse_file(void)  	/* line 17 */  	res = parcini_parse_next_line(parser, &line); -	asserteq(res, PARCINI_SECTION_PARSE_ERROR); +	asserteq(res, PARCINI_SECTION);  	asserteq(line.lineno, 17); +	asserteq(strcmp(line.section, "se"), 0); +	asserteq(line.key, NULL); +	asserteq(line.value.type, PARCINI_VALUE_NONE); + +	/* line 18 */ +	res = parcini_parse_next_line(parser, &line); +	asserteq(res, PARCINI_EMPTY_LINE); +	asserteq(line.lineno, 18); + +	/* line 19 */ +	res = parcini_parse_next_line(parser, &line); +	asserteq(res, PARCINI_SECTION_PARSE_ERROR); +	asserteq(line.lineno, 19); + +	/* line 20 */ +	res = parcini_parse_next_line(parser, &line); +	asserteq(res, PARCINI_EMPTY_LINE); +	asserteq(line.lineno, 20); + +	/* line 21 */ +	res = parcini_parse_next_line(parser, &line); +	asserteq(res, PARCINI_SECTION); +	asserteq(line.lineno, 21); +	asserteq(strcmp(line.section, "section"), 0); +	asserteq(line.key, NULL); +	asserteq(line.value.type, PARCINI_VALUE_NONE);  	/* EOF */  	res = parcini_parse_next_line(parser, &line); | 
