[PATCH 1/2] odbccp32: Implement SQLRemoveDSNFromIni/w

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Tue Dec 1 03:37:17 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