James Hawkins : cabinet: Revert "cabinet: Fix for FDICopy with an empty cabinet file.".

Alexandre Julliard julliard at winehq.org
Mon Apr 28 08:00:55 CDT 2008


Module: wine
Branch: master
Commit: fe8c3f9059ee56f39ccfd63544016819ec6d13ee
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=fe8c3f9059ee56f39ccfd63544016819ec6d13ee

Author: James Hawkins <jhawkins at codeweavers.com>
Date:   Fri Apr 25 22:49:59 2008 -0500

cabinet: Revert "cabinet: Fix for FDICopy with an empty cabinet file.".

This reverts commit 33e561f53cc510c6b5be3b4f1f3d2fbf8aa7486c.
Fixed the test that fails on all platforms.

---

 dlls/cabinet/fdi.c       |   25 +++++++++----------------
 dlls/cabinet/tests/fdi.c |   11 +++++++++--
 2 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/dlls/cabinet/fdi.c b/dlls/cabinet/fdi.c
index 7e5edcd..468a68d 100644
--- a/dlls/cabinet/fdi.c
+++ b/dlls/cabinet/fdi.c
@@ -562,14 +562,9 @@ static BOOL FDI_read_entries(
 
   /* get the number of folders */
   num_folders = EndGetI16(buf+cfhead_NumFolders);
-  /* if num_folders is 0, it's correct cab, but empty */
-  /* if num_folders is 1, there is no folders in this cab */
-
-  /* get the number of files */
-  num_files = EndGetI16(buf+cfhead_NumFiles);
-  if (num_files && !num_folders) {
-    /* If there at least one file in the cabinet. num_folders is always >= 1 */
-    WARN("weird cabinet detect failure: cabinet is not empty, but num_folders = 0\n");
+  if (num_folders == 0) {
+    /* PONDERME: is this really invalid? */
+    WARN("weird cabinet detect failure: no folders in cabinet\n");
     if (pmii) {
       PFDI_INT(hfdi)->perf->erfOper = FDIERROR_NOT_A_CABINET;
       PFDI_INT(hfdi)->perf->erfType = 0;
@@ -577,9 +572,12 @@ static BOOL FDI_read_entries(
     }
     return FALSE;
   }
-  if (!num_files && num_folders) {
-  /* If cabinet consist of 0 files, num_folders must be 0 */
-    WARN("weird cabinet detect failure: no files in cabinet, but there are folders\n");
+
+  /* get the number of files */
+  num_files = EndGetI16(buf+cfhead_NumFiles);
+  if (num_files == 0) {
+    /* PONDERME: is this really invalid? */
+    WARN("weird cabinet detect failure: no files in cabinet\n");
     if (pmii) {
       PFDI_INT(hfdi)->perf->erfOper = FDIERROR_NOT_A_CABINET;
       PFDI_INT(hfdi)->perf->erfType = 0;
@@ -2836,11 +2834,6 @@ BOOL __cdecl FDICopy(
   }
 
   /* free decompression temps */
-  if (!fol) {
-    /* Empty cabinet */
-    PFDI_CLOSE(hfdi, cabhf);
-    return TRUE; /* empty, but correct */
-  }
   switch (fol->comp_type & cffoldCOMPTYPE_MASK) {
   case cffoldCOMPTYPE_LZX:
     if (LZX(window)) {
diff --git a/dlls/cabinet/tests/fdi.c b/dlls/cabinet/tests/fdi.c
index fc36c78..f90b6f0 100644
--- a/dlls/cabinet/tests/fdi.c
+++ b/dlls/cabinet/tests/fdi.c
@@ -626,8 +626,15 @@ static void test_FDICopy(void)
                      fdi_write, fdi_close, fdi_seek,
                      cpuUNKNOWN, &erf);
 
-    ret=FDICopy(hfdi, name, path, 0, CopyProgress, NULL, 0);
-    ok(ret, "Expected FDICopy to succeed\n");
+    /* cabinet with no files or folders */
+    SetLastError(0xdeadbeef);
+    ret = FDICopy(hfdi, name, path, 0, CopyProgress, NULL, 0);
+    ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
+    todo_wine
+    {
+        ok(GetLastError() == ERROR_INVALID_HANDLE,
+           "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
+    }
 
     FDIDestroy(hfdi);
     DeleteFileA(name);




More information about the wine-cvs mailing list