Stefan Dösinger : winecfg: Support color profiles larger than MAX_PATH chars.
Alexandre Julliard
julliard at winehq.org
Tue Jun 28 15:54:15 CDT 2022
Module: wine
Branch: master
Commit: 021eefdee03ce3efc111039085789a6bbc59707f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=021eefdee03ce3efc111039085789a6bbc59707f
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Tue Jun 28 13:55:00 2022 +0300
winecfg: Support color profiles larger than MAX_PATH chars.
Signed-off-by: Stefan Dösinger <stefan at codeweavers.com>
---
programs/winecfg/theme.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/programs/winecfg/theme.c b/programs/winecfg/theme.c
index 9c8737caf64..78bbf71dbfa 100644
--- a/programs/winecfg/theme.c
+++ b/programs/winecfg/theme.c
@@ -22,6 +22,7 @@
*
*/
+#include <assert.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
@@ -554,15 +555,25 @@ static void set_color_from_theme(const WCHAR *keyName, COLORREF color)
static void do_parse_theme(WCHAR *file)
{
- WCHAR keyName[MAX_PATH], keyNameValue[MAX_PATH];
+ WCHAR *keyName, keyNameValue[MAX_PATH];
+ DWORD len, allocLen = 512;
WCHAR *keyNamePtr = NULL;
int red = 0, green = 0, blue = 0;
COLORREF color;
WINE_TRACE("%s\n", wine_dbgstr_w(file));
+ keyName = malloc(sizeof(*keyName) * allocLen);
+ for (;;)
+ {
+ assert(keyName);
+ len = GetPrivateProfileStringW(L"Control Panel\\Colors", NULL, NULL, keyName,
+ allocLen, file);
+ if (len < allocLen - 2)
+ break;
- GetPrivateProfileStringW(L"Control Panel\\Colors", NULL, NULL, keyName,
- MAX_PATH, file);
+ allocLen *= 2;
+ keyName = realloc(keyName, sizeof(*keyName) * allocLen);
+ }
keyNamePtr = keyName;
while (*keyNamePtr!=0) {
@@ -580,6 +591,7 @@ static void do_parse_theme(WCHAR *file)
keyNamePtr+=lstrlenW(keyNamePtr);
keyNamePtr++;
}
+ free(keyName);
}
static void on_theme_install(HWND dialog)
More information about the wine-cvs
mailing list