Minor fix for cases of malformed .ini file (zero-terminating text file like it was before previous commit).
diff --git a/imgui.cpp b/imgui.cpp
index 13b5c86..c086968 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -317,7 +317,7 @@
// Helpers: Data
static ImU32 ImCrc32(const void* data, size_t data_size, ImU32 seed);
-static bool ImLoadFileToMemory(const char* filename, const char* file_open_mode, void** out_file_data, size_t* out_file_size);
+static bool ImLoadFileToMemory(const char* filename, const char* file_open_mode, void** out_file_data, size_t* out_file_size, size_t padding_bytes = 0);
// Helpers: Color Conversion
static ImU32 ImConvertColorFloat4ToU32(const ImVec4& in);
@@ -632,9 +632,10 @@
// Load file content into memory
// Memory allocated with ImGui::MemAlloc(), must be freed by user using ImGui::MemFree()
-static bool ImLoadFileToMemory(const char* filename, const char* file_open_mode, void** out_file_data, size_t* out_file_size)
+static bool ImLoadFileToMemory(const char* filename, const char* file_open_mode, void** out_file_data, size_t* out_file_size, size_t padding_bytes)
{
IM_ASSERT(filename && file_open_mode && out_file_data && out_file_size);
+ IM_ASSERT(padding_bytes >= 0);
*out_file_data = NULL;
*out_file_size = 0;
@@ -650,7 +651,7 @@
}
size_t file_size = (size_t)file_size_signed;
- void* file_data = ImGui::MemAlloc(file_size);
+ void* file_data = ImGui::MemAlloc(file_size + padding_bytes);
if (file_data == NULL)
{
fclose(f);
@@ -662,6 +663,8 @@
ImGui::MemFree(file_data);
return false;
}
+ if (padding_bytes > 0)
+ memset((void *)(((char*)file_data) + file_size), 0, padding_bytes);
fclose(f);
*out_file_data = file_data;
@@ -1347,7 +1350,7 @@
char* file_data;
size_t file_size;
- if (!ImLoadFileToMemory(filename, "rb", (void**)&file_data, &file_size))
+ if (!ImLoadFileToMemory(filename, "rb", (void**)&file_data, &file_size, 1))
return;
ImGuiIniData* settings = NULL;