mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 22:47:19 +00:00
odbccp32: Map system DSN requests to user DSN requests in SQLConfigDataSource.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50116 Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
abd0cddc5f
commit
c8eae716b6
|
@ -338,10 +338,40 @@ fail:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static WORD map_request(WORD request)
|
||||||
|
{
|
||||||
|
switch (request)
|
||||||
|
{
|
||||||
|
case ODBC_ADD_DSN:
|
||||||
|
case ODBC_ADD_SYS_DSN:
|
||||||
|
return ODBC_ADD_DSN;
|
||||||
|
|
||||||
|
case ODBC_CONFIG_DSN:
|
||||||
|
case ODBC_CONFIG_SYS_DSN:
|
||||||
|
return ODBC_CONFIG_DSN;
|
||||||
|
|
||||||
|
case ODBC_REMOVE_DSN:
|
||||||
|
case ODBC_REMOVE_SYS_DSN:
|
||||||
|
return ODBC_REMOVE_DSN;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FIXME("unhandled request %u\n", request);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static UWORD get_config_mode(WORD request)
|
||||||
|
{
|
||||||
|
if (request == ODBC_ADD_DSN || request == ODBC_CONFIG_DSN || request == ODBC_REMOVE_DSN) return ODBC_USER_DSN;
|
||||||
|
return ODBC_SYSTEM_DSN;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL WINAPI SQLConfigDataSourceW(HWND hwnd, WORD request, LPCWSTR driver, LPCWSTR attributes)
|
BOOL WINAPI SQLConfigDataSourceW(HWND hwnd, WORD request, LPCWSTR driver, LPCWSTR attributes)
|
||||||
{
|
{
|
||||||
HMODULE mod;
|
HMODULE mod;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
|
UWORD config_mode_prev = config_mode;
|
||||||
|
WORD mapped_request;
|
||||||
|
|
||||||
TRACE("%p, %d, %s, %s\n", hwnd, request, debugstr_w(driver), debugstr_w(attributes));
|
TRACE("%p, %d, %s, %s\n", hwnd, request, debugstr_w(driver), debugstr_w(attributes));
|
||||||
if (TRACE_ON(odbc))
|
if (TRACE_ON(odbc))
|
||||||
|
@ -353,16 +383,24 @@ BOOL WINAPI SQLConfigDataSourceW(HWND hwnd, WORD request, LPCWSTR driver, LPCWST
|
||||||
|
|
||||||
clear_errors();
|
clear_errors();
|
||||||
|
|
||||||
|
mapped_request = map_request(request);
|
||||||
|
if (!mapped_request)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
mod = load_config_driver(driver);
|
mod = load_config_driver(driver);
|
||||||
if (!mod)
|
if (!mod)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
config_mode = get_config_mode(request);
|
||||||
|
|
||||||
pConfigDSNW = (void*)GetProcAddress(mod, "ConfigDSNW");
|
pConfigDSNW = (void*)GetProcAddress(mod, "ConfigDSNW");
|
||||||
if(pConfigDSNW)
|
if(pConfigDSNW)
|
||||||
ret = pConfigDSNW(hwnd, request, driver, attributes);
|
ret = pConfigDSNW(hwnd, mapped_request, driver, attributes);
|
||||||
else
|
else
|
||||||
ERR("Failed to find ConfigDSNW\n");
|
ERR("Failed to find ConfigDSNW\n");
|
||||||
|
|
||||||
|
config_mode = config_mode_prev;
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
push_error(ODBC_ERROR_REQUEST_FAILED, odbc_error_request_failed);
|
push_error(ODBC_ERROR_REQUEST_FAILED, odbc_error_request_failed);
|
||||||
|
|
||||||
|
@ -376,6 +414,8 @@ BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR a
|
||||||
HMODULE mod;
|
HMODULE mod;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
WCHAR *driverW;
|
WCHAR *driverW;
|
||||||
|
UWORD config_mode_prev = config_mode;
|
||||||
|
WORD mapped_request;
|
||||||
|
|
||||||
TRACE("%p, %d, %s, %s\n", hwnd, request, debugstr_a(driver), debugstr_a(attributes));
|
TRACE("%p, %d, %s, %s\n", hwnd, request, debugstr_a(driver), debugstr_a(attributes));
|
||||||
|
|
||||||
|
@ -388,6 +428,10 @@ BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR a
|
||||||
|
|
||||||
clear_errors();
|
clear_errors();
|
||||||
|
|
||||||
|
mapped_request = map_request(request);
|
||||||
|
if (!mapped_request)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
driverW = heap_strdupAtoW(driver);
|
driverW = heap_strdupAtoW(driver);
|
||||||
if (!driverW)
|
if (!driverW)
|
||||||
{
|
{
|
||||||
|
@ -402,11 +446,13 @@ BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR a
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config_mode = get_config_mode(request);
|
||||||
|
|
||||||
pConfigDSN = (void*)GetProcAddress(mod, "ConfigDSN");
|
pConfigDSN = (void*)GetProcAddress(mod, "ConfigDSN");
|
||||||
if (pConfigDSN)
|
if (pConfigDSN)
|
||||||
{
|
{
|
||||||
TRACE("Calling ConfigDSN\n");
|
TRACE("Calling ConfigDSN\n");
|
||||||
ret = pConfigDSN(hwnd, request, driver, attributes);
|
ret = pConfigDSN(hwnd, mapped_request, driver, attributes);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -418,11 +464,13 @@ BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR a
|
||||||
|
|
||||||
attr = SQLInstall_strdup_multi(attributes);
|
attr = SQLInstall_strdup_multi(attributes);
|
||||||
if(attr)
|
if(attr)
|
||||||
ret = pConfigDSNW(hwnd, request, driverW, attr);
|
ret = pConfigDSNW(hwnd, mapped_request, driverW, attr);
|
||||||
heap_free(attr);
|
heap_free(attr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config_mode = config_mode_prev;
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
push_error(ODBC_ERROR_REQUEST_FAILED, odbc_error_request_failed);
|
push_error(ODBC_ERROR_REQUEST_FAILED, odbc_error_request_failed);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue