ODBCINST.INI = Driver Infomration. ODBC.INI = DSN information.
Drivers have to be registered with the system, so will be under LOCAL_MACHINE.
Tested with both MySQL and Postgresql ODBC drivers which supply the ODBCINST.INI parameter when requesting driver information.
-- v3: odbccp32: SQLGet/WritePrivateProfileStringW support driver config
From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
--- dlls/odbccp32/odbccp32.c | 14 ++++++++------ dlls/odbccp32/tests/misc.c | 9 +++++++++ 2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/dlls/odbccp32/odbccp32.c b/dlls/odbccp32/odbccp32.c index 90a7517b957..fd02391a384 100644 --- a/dlls/odbccp32/odbccp32.c +++ b/dlls/odbccp32/odbccp32.c @@ -734,10 +734,11 @@ int WINAPI SQLGetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, if (!defvalue || !buff) return 0;
- if (config_mode == ODBC_USER_DSN) - sectionkey = get_privateprofile_sectionkey(HKEY_CURRENT_USER, section, filename); - else if (config_mode == ODBC_SYSTEM_DSN) + /* odbcinit.ini is only for drivers, so default to local Machine */ + if (!wcsicmp(filename, L"ODBCINST.INI") || config_mode == ODBC_SYSTEM_DSN) sectionkey = get_privateprofile_sectionkey(HKEY_LOCAL_MACHINE, section, filename); + else if (config_mode == ODBC_USER_DSN) + sectionkey = get_privateprofile_sectionkey(HKEY_CURRENT_USER, section, filename); else { sectionkey = get_privateprofile_sectionkey(HKEY_CURRENT_USER, section, filename); @@ -1812,10 +1813,11 @@ BOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR lpszSection, LPCWSTR lpszEntry return FALSE; }
- if (config_mode == ODBC_USER_DSN) - ret = RegCreateKeyW(HKEY_CURRENT_USER, L"Software\ODBC", &hkey); - else if (config_mode == ODBC_SYSTEM_DSN) + /* odbcinit.ini is only for drivers, so default to local Machine */ + if (!wcsicmp(lpszFilename, L"ODBCINST.INI") || config_mode == ODBC_SYSTEM_DSN) ret = RegCreateKeyW(HKEY_LOCAL_MACHINE, L"Software\ODBC", &hkey); + else if (config_mode == ODBC_USER_DSN) + ret = RegCreateKeyW(HKEY_CURRENT_USER, L"Software\ODBC", &hkey); else { ret = RegCreateKeyW(HKEY_CURRENT_USER, L"Software\ODBC", &hkey); diff --git a/dlls/odbccp32/tests/misc.c b/dlls/odbccp32/tests/misc.c index 81c66a44a24..ccd3caea977 100644 --- a/dlls/odbccp32/tests/misc.c +++ b/dlls/odbccp32/tests/misc.c @@ -459,6 +459,15 @@ static void test_SQLGetPrivateProfileStringW(void) ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL, L"", buffer, 256, L"ODBC.INI"); ok(ret, "SQLGetPrivateProfileStringW failed\n");
+ ret = SQLWritePrivateProfileStringW(L"wineodbc", L"testing" , L"value", L"ODBCINST.INI"); + ok(ret, "SQLWritePrivateProfileString failed\n"); + + ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL, L"", buffer, 256, L"ODBCINST.INI"); + ok(ret, "SQLGetPrivateProfileStringW failed\n"); + + reg_ret = RegDeleteKeyW(HKEY_LOCAL_MACHINE, L"Software\ODBC\ODBCINST.INI\wineodbc"); + ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed %ld\n", reg_ret); + ret = SQLSetConfigMode(ODBC_SYSTEM_DSN); ok(ret, "SQLSetConfigMode failed\n");
This merge request was approved by Hans Leidekker.