Zebediah Figura : odbccp32: Avoid using RegQueryInfoKey() in SQLGetInstalledDrivers().

Alexandre Julliard julliard at winehq.org
Wed May 23 15:52:04 CDT 2018


Module: wine
Branch: master
Commit: 5eb8894e93499638edb46b3b43557bd6f44adfe1
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5eb8894e93499638edb46b3b43557bd6f44adfe1

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Tue May 22 16:27:57 2018 -0500

odbccp32: Avoid using RegQueryInfoKey() in SQLGetInstalledDrivers().

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/odbccp32/odbccp32.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/dlls/odbccp32/odbccp32.c b/dlls/odbccp32/odbccp32.c
index 8788330..862237c 100644
--- a/dlls/odbccp32/odbccp32.c
+++ b/dlls/odbccp32/odbccp32.c
@@ -510,15 +510,20 @@ BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout)
         return FALSE;
     }
 
-    RegQueryInfoKeyW(drivers, 0, 0, 0, 0, 0, 0, 0, &valuelen, 0, 0, 0);
-    value = heap_alloc(++valuelen * sizeof(WCHAR));
+    valuelen = 256;
+    value = heap_alloc(valuelen * sizeof(WCHAR));
 
     size--;
 
     while (1)
     {
         len = valuelen;
-        res = RegEnumValueW(drivers, index++, value, &len, NULL, NULL, NULL, NULL);
+        res = RegEnumValueW(drivers, index, value, &len, NULL, NULL, NULL, NULL);
+        while (res == ERROR_MORE_DATA)
+        {
+            value = heap_realloc(value, ++len * sizeof(WCHAR));
+            res = RegEnumValueW(drivers, index, value, &len, NULL, NULL, NULL, NULL);
+        }
         if (res == ERROR_SUCCESS)
         {
             lstrcpynW(buf + written, value, size - written);
@@ -532,6 +537,7 @@ BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout)
             ret = FALSE;
             break;
         }
+        index++;
     }
 
     buf[written++] = 0;




More information about the wine-cvs mailing list