summaryrefslogtreecommitdiff
path: root/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx')
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
index dc7960e62..f28802ba0 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
@@ -827,10 +827,13 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
{
# define FLPREFS_RESOURCE "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
# define FLPREFS_RESOURCEW L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
- static char filename[ FL_PATH_MAX ];
+ static char *filename = 0L;
+ // make enough room for a UTF16 pathname
+ if (!filename) filename = (char*)::malloc(2*FL_PATH_MAX);
filename[0] = 0;
+ filename[1] = 0;
size_t appDataLen = strlen(vendor) + strlen(application) + 8;
- DWORD type, nn;
+ DWORD nn;
LONG err;
HKEY key;
@@ -839,9 +842,9 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
err = RegOpenKeyW( HKEY_LOCAL_MACHINE, FLPREFS_RESOURCEW, &key );
if (err == ERROR_SUCCESS) {
nn = (DWORD) (FL_PATH_MAX - appDataLen);
- err = RegQueryValueExW( key, L"Common AppData", 0L, &type,
+ err = RegQueryValueExW( key, L"Common AppData", 0L, 0L,
(BYTE*)filename, &nn );
- if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) {
+ if ( err != ERROR_SUCCESS ) {
filename[0] = 0;
filename[1] = 0;
}
@@ -852,9 +855,9 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
err = RegOpenKeyW( HKEY_CURRENT_USER, FLPREFS_RESOURCEW, &key );
if (err == ERROR_SUCCESS) {
nn = (DWORD) (FL_PATH_MAX - appDataLen);
- err = RegQueryValueExW( key, L"AppData", 0L, &type,
+ err = RegQueryValueExW( key, L"AppData", 0L,0L,
(BYTE*)filename, &nn );
- if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) {
+ if ( err != ERROR_SUCCESS ) {
filename[0] = 0;
filename[1] = 0;
}
@@ -863,7 +866,9 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
break;
}
if (!filename[1] && !filename[0]) {
- strcpy(filename, "C:\\FLTK");
+ // Don't write data into some arbitrary directory! Just return NULL.
+ //strcpy(filename, "C:\\FLTK");
+ return 0L;
} else {
#if 0
wchar_t *b = (wchar_t*)_wcsdup((wchar_t *)filename);
@@ -879,6 +884,13 @@ char *Fl_WinAPI_System_Driver::preference_rootnode(Fl_Preferences *prefs, Fl_Pre
filename[len] = 0;
free(b);
}
+
+ // Make sure that the parameters are not NULL
+ if ( (vendor==0L) || (vendor[0]==0) )
+ vendor = "unknown";
+ if ( (application==0L) || (application[0]==0) )
+ application = "unknown";
+
snprintf(filename + strlen(filename), sizeof(filename) - strlen(filename),
"/%s/%s.prefs", vendor, application);
for (char *s = filename; *s; s++) if (*s == '\\') *s = '/';