Mike McCormack : cabinet: Split the cabinet path for FDICopy.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Aug 7 07:13:08 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 968a4457250e61cdbe5537c375b1d48ad5ce9fd9
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=968a4457250e61cdbe5537c375b1d48ad5ce9fd9

Author: Mike McCormack <mike at codeweavers.com>
Date:   Mon Aug  7 13:39:06 2006 +0900

cabinet: Split the cabinet path for FDICopy.

---

 dlls/cabinet/cabinet_main.c |   26 ++++++++++++++++++++++++--
 1 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/dlls/cabinet/cabinet_main.c b/dlls/cabinet/cabinet_main.c
index fa8f1b4..3c69bf9 100644
--- a/dlls/cabinet/cabinet_main.c
+++ b/dlls/cabinet/cabinet_main.c
@@ -303,7 +303,7 @@ HRESULT WINAPI Extract(EXTRACTdest *dest
     HRESULT res = S_OK;
     HFDI hfdi;
     ERF erf;
-    static CHAR empty[] = "";
+    char *str, *path, *name;
 
     TRACE("(%p, %s)\n", dest, szCabName);
 
@@ -323,10 +323,32 @@ HRESULT WINAPI Extract(EXTRACTdest *dest
     if (GetFileAttributesA(dest->directory) == INVALID_FILE_ATTRIBUTES)
         return S_OK;
 
-    if (!FDICopy(hfdi, (LPSTR)szCabName, empty, 0,
+    /* split the cabinet name into path + name */
+    str = HeapAlloc(GetProcessHeap(), 0, lstrlenA(szCabName)+1);
+    if (!str)
+    {
+        res = E_OUTOFMEMORY;
+        goto end;
+    }
+    lstrcpyA(str, szCabName);
+
+    path = str;
+    name = strrchr(path, '\\');
+    if (name)
+        *name++ = 0;
+    else
+    {
+        name = path;
+        path = NULL;
+    }
+
+    if (!FDICopy(hfdi, name, path, 0,
          fdi_notify_extract, NULL, dest))
         res = E_FAIL;
 
+    HeapFree(GetProcessHeap(), 0, str);
+end:
+
     FDIDestroy(hfdi);
 
     return res;




More information about the wine-cvs mailing list