Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions cpp/INIReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ INIReader::INIReader(const string& filename)

INIReader::INIReader(const char *buffer, size_t buffer_size)
{
string content(buffer, buffer_size);
_error = ini_parse_string(content.c_str(), ValueHandler, this);
_error = ini_parse_string_length(buffer, buffer_size, ValueHandler, this);
}

int INIReader::ParseError() const
Expand Down
8 changes: 7 additions & 1 deletion ini.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,10 +313,16 @@ static char* ini_reader_string(char* str, int num, void* stream) {

/* See documentation in header file. */
int ini_parse_string(const char* string, ini_handler handler, void* user) {
return ini_parse_string_length(string, strlen(string), handler, user);
}

/* See documentation in header file. */
int ini_parse_string_length(const char* string, size_t length,
ini_handler handler, void* user) {
ini_parse_string_ctx ctx;

ctx.ptr = string;
ctx.num_left = strlen(string);
ctx.num_left = length;
return ini_parse_stream((ini_reader)ini_reader_string, &ctx, handler,
user);
}
9 changes: 7 additions & 2 deletions ini.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,15 @@ INI_API int ini_parse_stream(ini_reader reader, void* stream, ini_handler handle
void* user);

/* Same as ini_parse(), but takes a zero-terminated string with the INI data
instead of a file. Useful for parsing INI data from a network socket or
already in memory. */
instead of a file. Useful for parsing INI data from a network socket or
which is already in memory. */
INI_API int ini_parse_string(const char* string, ini_handler handler, void* user);

/* Same as ini_parse_string(), but takes a string and its length, avoiding
strlen(). Useful for parsing INI data from a network socket or which is
already in memory, or interfacing with C++ std::string_view. */
INI_API int ini_parse_string_length(const char* string, size_t length, ini_handler handler, void* user);

/* Nonzero to allow multi-line value parsing, in the style of Python's
configparser. If allowed, ini_parse() will call the handler with the same
name for each subsequent line parsed. */
Expand Down
Loading