Author: cwittich
Date: Mon Apr 20 10:23:46 2009
New Revision: 40603

URL: http://svn.reactos.org/svn/reactos?rev=40603&view=rev
Log:
sync SetupGetTargetPathW with wine
fixes all setupapi query winetests

Modified:
    trunk/reactos/dll/win32/setupapi/query.c

Modified: trunk/reactos/dll/win32/setupapi/query.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/setupapi/query.c?rev=40603&r1=40602&r2=40603&view=diff
==============================================================================
--- trunk/reactos/dll/win32/setupapi/query.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/setupapi/query.c [iso-8859-1] Mon Apr 20 10:23:46 
2009
@@ -563,19 +563,25 @@
         {'D','e','f','a','u','l','t','D','e','s','t','D','i','r',0};
 
     INFCONTEXT ctx;
-    WCHAR *dir;
-    INT size;
+    WCHAR *dir, systemdir[MAX_PATH];
+    unsigned int size;
+    BOOL ret = FALSE;
 
     TRACE("%p, %p, %s, %p, 0x%08x, %p\n", hinf, context, debugstr_w(section), 
buffer,
           buffer_size, required_size);
 
-    if (context && !SetupFindFirstLineW( hinf, destination_dirs, NULL, context 
)) return FALSE;
-    else if (section && !SetupFindFirstLineW( hinf, section, NULL, &ctx )) 
return FALSE;
-    else if (!SetupFindFirstLineW( hinf, destination_dirs, default_dest_dir, 
&ctx )) return FALSE;
-
-    if (!(dir = PARSER_get_dest_dir( context ? context : &ctx ))) return FALSE;
-
-    size = lstrlenW( dir ) + 1;
+    if (context) ret = SetupFindFirstLineW( hinf, destination_dirs, NULL, 
context );
+    else if (section)
+    {
+        if (!(ret = SetupFindFirstLineW( hinf, destination_dirs, section, &ctx 
)))
+            ret = SetupFindFirstLineW( hinf, destination_dirs, 
default_dest_dir, &ctx );
+    }
+    if (!ret || !(dir = PARSER_get_dest_dir( context ? context : &ctx )))
+    {
+        GetSystemDirectoryW( systemdir, MAX_PATH );
+        dir = systemdir;
+    }
+    size = strlenW( dir ) + 1;
     if (required_size) *required_size = size;
 
     if (buffer)
@@ -589,7 +595,7 @@
             return FALSE;
         }
     }
-    HeapFree( GetProcessHeap(), 0, dir );
+    if (dir != systemdir) HeapFree( GetProcessHeap(), 0, dir );
     return TRUE;
 }
 

Reply via email to