Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Fixed joystick name detection - merged from revision 3226 on SDL 1.2 …
Browse files Browse the repository at this point in the history
…branch
  • Loading branch information
slouken committed Jul 12, 2007
1 parent 07bc05b commit 941c5de
Showing 1 changed file with 47 additions and 44 deletions.
91 changes: 47 additions & 44 deletions src/joystick/win32/SDL_mmjoystick.c
Expand Up @@ -78,59 +78,62 @@ GetJoystickName(int index, const char *szRegKey)
index (1-16) listed in the registry
*/
char *name = NULL;
HKEY hTopKey;
HKEY hKey;
DWORD regsize;
LONG regresult;
unsigned char regkey[256];
unsigned char regvalue[256];
unsigned char regname[256];
char regkey[256];
char regvalue[256];
char regname[256];

SDL_snprintf((char *) regkey, SDL_arraysize(regkey), "%s\\%s\\%s",
SDL_snprintf(regkey, SDL_arraysize(regkey), "%s\\%s\\%s",
REGSTR_PATH_JOYCONFIG, szRegKey, REGSTR_KEY_JOYCURR);
regresult = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
(LPTSTR) & regkey, 0, KEY_READ, &hKey);
hTopKey = HKEY_LOCAL_MACHINE;
regresult = RegOpenKeyExA(hTopKey, regkey, 0, KEY_READ, &hKey);
if (regresult != ERROR_SUCCESS) {
hTopKey = HKEY_CURRENT_USER;
regresult = RegOpenKeyExA(hTopKey, regkey, 0, KEY_READ, &hKey);
}
if (regresult != ERROR_SUCCESS) {
return NULL;
}

/* find the registry key name for the joystick's properties */
regsize = sizeof(regname);
SDL_snprintf(regvalue, SDL_arraysize(regvalue), "Joystick%d%s", index + 1,
REGSTR_VAL_JOYOEMNAME);
regresult =
RegQueryValueExA(hKey, regvalue, 0, 0, (LPBYTE) regname, &regsize);
RegCloseKey(hKey);

if (regresult != ERROR_SUCCESS) {
return NULL;
}

/* open that registry key */
SDL_snprintf(regkey, SDL_arraysize(regkey), "%s\\%s", REGSTR_PATH_JOYOEM,
regname);
regresult = RegOpenKeyExA(hTopKey, regkey, 0, KEY_READ, &hKey);
if (regresult != ERROR_SUCCESS) {
return NULL;
}

/* find the size for the OEM name text */
regsize = sizeof(regvalue);
regresult =
RegQueryValueExA(hKey, REGSTR_VAL_JOYOEMNAME, 0, 0, NULL, &regsize);
if (regresult == ERROR_SUCCESS) {
/*
find the registry key name for the
joystick's properties
*/
regsize = sizeof(regname);
SDL_snprintf((char *) regvalue, SDL_arraysize(regvalue),
"Joystick%d%s", index + 1, REGSTR_VAL_JOYOEMNAME);
regresult = RegQueryValueExA(hKey,
(char *) regvalue, 0, 0,
(LPBYTE) & regname, (LPDWORD) & regsize);
RegCloseKey(hKey);
if (regresult == ERROR_SUCCESS) {
/* open that registry key */
SDL_snprintf((char *) regkey, SDL_arraysize(regkey),
"%s\\%s", REGSTR_PATH_JOYOEM, regname);
regresult =
RegOpenKeyExA(HKEY_LOCAL_MACHINE, (char *) regkey, 0,
KEY_READ, &hKey);
if (regresult == ERROR_SUCCESS) {
/* find the size for the OEM name text */
regsize = sizeof(regvalue);
regresult =
RegQueryValueExA(hKey,
REGSTR_VAL_JOYOEMNAME,
0, 0, NULL, (LPDWORD) & regsize);
if (regresult == ERROR_SUCCESS) {
/*
allocate enough memory
for the OEM name text ...
*/
name = (char *) SDL_malloc(regsize);
/* ... and read it from the registry */
regresult =
RegQueryValueExA(hKey,
/* allocate enough memory for the OEM name text ... */
name = (char *) SDL_malloc(regsize);
if (name) {
/* ... and read it from the registry */
regresult = RegQueryValueExA(hKey,
REGSTR_VAL_JOYOEMNAME, 0, 0,
(LPBYTE) name, (LPDWORD) & regsize);
RegCloseKey(hKey);
}
}
(LPBYTE) name, &regsize);
}
}
RegCloseKey(hKey);

return (name);
}

Expand Down

0 comments on commit 941c5de

Please sign in to comment.