Module: wine Branch: master Commit: fe8c3f9059ee56f39ccfd63544016819ec6d13ee URL: http://source.winehq.org/git/wine.git/?a=commit;h=fe8c3f9059ee56f39ccfd63544...
Author: James Hawkins jhawkins@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);