diff options
Diffstat (limited to 'lib/inih/ini.c')
-rw-r--r-- | lib/inih/ini.c | 72 |
1 files changed, 4 insertions, 68 deletions
diff --git a/lib/inih/ini.c b/lib/inih/ini.c index 81df6a037f..0393625b71 100644 --- a/lib/inih/ini.c +++ b/lib/inih/ini.c @@ -24,12 +24,6 @@ https://github.com/benhoyt/inih #define MAX_SECTION 50 #define MAX_NAME 50 -/* Used by ini_parse_string() to keep track of string parsing state. */ -typedef struct { - const char* ptr; - size_t num_left; -} ini_parse_string_ctx; - /* Strip whitespace chars off end of given string, in place. Return s. */ static char* rstrip(char* s) { @@ -76,8 +70,7 @@ static char* strncpy0(char* dest, const char* src, size_t size) } /* See documentation in header file. */ -int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, - void* user) +int ini_parse_file(FILE* file, ini_handler handler, void* user) { /* Uses a fair bit of stack (use heap instead if you need to) */ #if INI_USE_STACK @@ -94,7 +87,6 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, char section[MAX_SECTION] = ""; char prev_name[MAX_NAME] = ""; - char* start; char* end; char* name; char* value; @@ -115,7 +107,8 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, #endif /* Scan through stream line by line */ - while (reader(line, max_line, stream) != NULL) { + while (fgets(line, max_line, file) != NULL) { + char* start; #if INI_ALLOW_REALLOC && !INI_USE_STACK offset = strlen(line); while (offset == max_line - 1 && line[offset - 1] != '\n') { @@ -128,7 +121,7 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, return -2; } line = new_line; - if (reader(line + offset, max_line - offset, stream) == NULL) + if (fgets(line + offset, max_line - offset, file) == NULL) break; if (max_line >= INI_MAX_LINE) break; @@ -210,60 +203,3 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, return error; } - -/* See documentation in header file. */ -int ini_parse_file(FILE* file, ini_handler handler, void* user) -{ - return ini_parse_stream((ini_reader)fgets, file, handler, user); -} - -/* See documentation in header file. */ -int ini_parse(const char* filename, ini_handler handler, void* user) -{ - FILE* file; - int error; - - file = fopen(filename, "r"); - if (!file) - return -1; - error = ini_parse_file(file, handler, user); - fclose(file); - return error; -} - -/* An ini_reader function to read the next line from a string buffer. This - is the fgets() equivalent used by ini_parse_string(). */ -static char* ini_reader_string(char* str, int num, void* stream) { - ini_parse_string_ctx* ctx = (ini_parse_string_ctx*)stream; - const char* ctx_ptr = ctx->ptr; - size_t ctx_num_left = ctx->num_left; - char* strp = str; - char c; - - if (ctx_num_left == 0 || num < 2) - return NULL; - - while (num > 1 && ctx_num_left != 0) { - c = *ctx_ptr++; - ctx_num_left--; - *strp++ = c; - if (c == '\n') - break; - num--; - } - - *strp = '\0'; - ctx->ptr = ctx_ptr; - ctx->num_left = ctx_num_left; - return str; -} - -/* See documentation in header file. */ -int ini_parse_string(const char* string, ini_handler handler, void* user) { - ini_parse_string_ctx ctx; - - ctx.ptr = string; - ctx.num_left = strlen(string); - return ini_parse_stream((ini_reader)ini_reader_string, &ctx, handler, - user); -} |