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