]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Add more typecasts for Windows`
authorDirk Hohndel <dirk@hohndel.org>
Sat, 26 Nov 2011 04:09:01 +0000 (20:09 -0800)
committerDirk Hohndel <dirk@hohndel.org>
Sat, 26 Nov 2011 04:19:58 +0000 (20:19 -0800)
This is based on an older patch by Lubomir I. Ivanov <neolit123@gmail.com>
which no longer applies due to the refactoring of the registry setting
code.

It takes care of all of the casts between actual C types and the Windows
specific types that the Windows API functions expect. It also adds some
comments to the overloading of "value" in our subsurface_set_conf function.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
windows.c

index b8eafb6de9338ea7228bae4e99b400a940676319..e4c811984a942c70b254d17322381c3c13bd606f 100644 (file)
--- a/windows.c
+++ b/windows.c
@@ -11,8 +11,8 @@ static int get_from_registry(HKEY hkey, const char *key)
        DWORD len = 4;
        LONG success;
 
-       success = RegQueryValueEx(hkey, TEXT(key), NULL, NULL,
-                               (LPBYTE) &value, &len );
+       success = RegQueryValueEx(hkey, (LPCTSTR)TEXT(key), NULL, NULL,
+                               (LPBYTE) &value, (LPDWORD)&len );
        if (success != ERROR_SUCCESS)
                return FALSE; /* that's what happens the first time we start */
        return value;
@@ -22,7 +22,7 @@ void subsurface_open_conf(void)
 {
        LONG success;
 
-       success = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\subsurface"),
+       success = RegCreateKeyEx(HKEY_CURRENT_USER, (LPCTSTR)TEXT("Software\\subsurface"),
                                0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
                                NULL, &hkey, NULL);
        if (success != ERROR_SUCCESS)
@@ -31,13 +31,19 @@ void subsurface_open_conf(void)
 
 void subsurface_set_conf(char *name, pref_type_t type, const void *value)
 {
+       /* since we are using the pointer 'value' as both an actual
+        * pointer to the string setting and as a way to pass the
+        * numbers 0 and 1 to this function for booleans, one of the
+        * calls to RegSetValueEx needs to pass &value (when we want
+        * to pass the boolean value), the other one passes value (the
+        * address of the string. */
        switch (type) {
        case PREF_BOOL:
                /* we simply store the value as DWORD */
-               RegSetValueEx(hkey, TEXT(name), 0, REG_DWORD, &value, 4);
+               RegSetValueEx(hkey, (LPCTSTR)TEXT(name), 0, REG_DWORD, (const BYTE *)&value, 4);
                break;
        case PREF_STRING:
-               RegSetValueEx(hkey, TEXT(name), 0, REG_SZ, value, strlen(value));
+               RegSetValueEx(hkey, (LPCTSTR)TEXT(name), 0, REG_SZ, (const BYTE *)value, strlen(value));
        }
 }
 
@@ -53,7 +59,7 @@ const void *subsurface_get_conf(char *name, pref_type_t type)
        case PREF_STRING:
                string = malloc(80);
                len = 80;
-               success = RegQueryValueEx(hkey, TEXT(name), NULL, NULL,
+               success = RegQueryValueEx(hkey, (LPCTSTR)TEXT(name), NULL, NULL,
                                        (LPBYTE) string, (LPDWORD)&len );
                if (success != ERROR_SUCCESS) {
                        /* that's what happens the first time we start - just return NULL */