[PATCH v2 1/2] odbccp32: Implement SQLRemoveDSNFromIni/w
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Wed Dec 2 03:36:20 CST 2020
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
dlls/odbccp32/odbccp32.c | 39 +++++++++++++++++++++++++++++++++------
1 file changed, 33 insertions(+), 6 deletions(-)
diff --git a/dlls/odbccp32/odbccp32.c b/dlls/odbccp32/odbccp32.c
index 0e4a12534c8..420f206b700 100644
--- a/dlls/odbccp32/odbccp32.c
+++ b/dlls/odbccp32/odbccp32.c
@@ -1523,18 +1523,45 @@ BOOL WINAPI SQLRemoveDriverManager(LPDWORD pdwUsageCount)
BOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR lpszDSN)
{
+ HKEY hkey;
+
+ TRACE("%s\n", debugstr_w(lpszDSN));
+
clear_errors();
- FIXME("%s\n", debugstr_w(lpszDSN));
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+
+ if (RegOpenKeyW(HKEY_LOCAL_MACHINE, L"Software\\ODBC\\ODBC.INI\\ODBC Data Sources", &hkey) == ERROR_SUCCESS)
+ {
+ RegDeleteValueW(hkey, lpszDSN);
+ RegCloseKey(hkey);
+ }
+
+ if (RegOpenKeyW(HKEY_LOCAL_MACHINE, L"Software\\ODBC\\ODBC.INI", &hkey) == ERROR_SUCCESS)
+ {
+ RegDeleteTreeW(hkey, lpszDSN);
+ RegCloseKey(hkey);
+ }
+
+ return TRUE;
}
BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR lpszDSN)
{
+ BOOL ret = FALSE;
+ WCHAR *dsn;
+
+ TRACE("%s\n", debugstr_a(lpszDSN));
+
clear_errors();
- FIXME("%s\n", debugstr_a(lpszDSN));
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+
+ dsn = SQLInstall_strdup(lpszDSN);
+ if (dsn)
+ ret = SQLRemoveDSNFromIniW(dsn);
+ else
+ push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
+
+ heap_free(dsn);
+
+ return ret;
}
BOOL WINAPI SQLRemoveTranslatorW(const WCHAR *translator, DWORD *usage_count)
--
2.29.2
More information about the wine-devel
mailing list