cab_F_00-r1 codename "whee-r1"
Gregory M. Turner
gmturner007 at ameritech.net
Tue Jul 29 17:00:49 CDT 2003
OK, here's a version without the ERR changes... I think Dimi has convinced
me this is what I want.
License: LGPL
ChangeLog:
* dlls/cabinet: cabinet.h, fdi.c:
Greg Turner <gmturner007 at ameritech.net>
- ERR("WARNING") just doesn't look right ;)
- treat zero file handle as invalid if the callback returns it
- provide the same args as Windows to the Open callback.
--
diff -ur --minimal --exclude-from=/home/greg/bin/winetreediff_excl ../wine.vanilla/dlls/cabinet/cabinet.h ./dlls/cabinet/cabinet.h
--- ../wine.vanilla/dlls/cabinet/cabinet.h 2003-07-19 05:16:03.000000000 -0500
+++ ./dlls/cabinet/cabinet.h 2003-07-29 15:00:00.000000000 -0500
@@ -24,6 +24,10 @@
#include "fdi.h"
#include "fci.h"
+/* from msvcrt/sys/stat.h */
+#define _S_IWRITE 0x0080
+#define _S_IREAD 0x0100
+
#define CAB_SPLITMAX (10)
#define CAB_SEARCH_SIZE (32*1024)
diff -ur --minimal --exclude-from=/home/greg/bin/winetreediff_excl ../wine.vanilla/dlls/cabinet/fdi.c ./dlls/cabinet/fdi.c
--- ../wine.vanilla/dlls/cabinet/fdi.c 2003-07-19 05:16:03.000000000 -0500
+++ ./dlls/cabinet/fdi.c 2003-07-29 15:01:47.000000000 -0500
@@ -39,7 +39,6 @@
#include "winbase.h"
#include "winerror.h"
#include "fdi.h"
-#include "msvcrt/fcntl.h" /* _O_.* */
#include "cabinet.h"
#include "wine/debug.h"
@@ -1825,7 +1824,7 @@
TRACE("full cab path/file name: %s\n", debugstr_a(fullpath));
/* try to get a handle to the cabfile */
- cabhf = PFDI_OPEN(CAB(hfdi), fullpath, _O_BINARY | _O_RDONLY | _O_SEQUENTIAL, 0);
+ cabhf = PFDI_OPEN(CAB(hfdi), fullpath, 32768, _S_IREAD | _S_IWRITE);
if (cabhf == -1) {
/* no file. allow the user to try again */
fdin.fdie = FDIERROR_CABINET_NOT_FOUND;
@@ -1833,6 +1832,13 @@
continue;
}
+ if (cabhf == 0) {
+ ERR("PFDI_OPEN returned zero for %s.\n", fullpath);
+ fdin.fdie = FDIERROR_CABINET_NOT_FOUND;
+ if (((*pfnfdin)(fdintNEXT_CABINET, &fdin))) return DECR_USERABORT;
+ continue;
+ }
+
/* check if it's really a cabfile. Note that this doesn't implement the bug */
if (!FDI_read_entries(CAB(hfdi), cabhf, &fdici, &(cab->next->mii))) {
WARN("FDIIsCabinet failed.\n");
@@ -2020,7 +2026,7 @@
TRACE("full cab path/file name: %s\n", debugstr_a(fullpath));
/* get a handle to the cabfile */
- cabhf = PFDI_OPEN(hfdi, fullpath, _O_BINARY | _O_RDONLY | _O_SEQUENTIAL, 0);
+ cabhf = PFDI_OPEN(hfdi, fullpath, 32768, _S_IREAD | _S_IWRITE);
if (cabhf == -1) {
PFDI_INT(hfdi)->perf->erfOper = FDIERROR_CABINET_NOT_FOUND;
PFDI_INT(hfdi)->perf->erfType = ERROR_FILE_NOT_FOUND;
@@ -2029,6 +2035,15 @@
return FALSE;
}
+ if (cabhf == 0) {
+ ERR("PFDI_OPEN returned zero for %s.\n", fullpath);
+ PFDI_INT(hfdi)->perf->erfOper = FDIERROR_CABINET_NOT_FOUND;
+ PFDI_INT(hfdi)->perf->erfType = ERROR_FILE_NOT_FOUND;
+ PFDI_INT(hfdi)->perf->fError = TRUE;
+ SetLastError(ERROR_FILE_NOT_FOUND);
+ return FALSE;
+ }
+
/* check if it's really a cabfile. Note that this doesn't implement the bug */
if (!FDI_read_entries(hfdi, cabhf, &fdici, &(CAB(mii)))) {
ERR("FDIIsCabinet failed.\n");
--
gmt
#define SHOCK_TRACE(...) \
do {\
WINE_TRACE("\n\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" \
"X#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#X\n" \
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" \
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" \
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" \
"X#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#X\n" \
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n\n"); \
WINE_TRACE(__VA_ARGS__); \
WINE_TRACE("\n\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" \
"X#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#X\n" \
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" \
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" \
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" \
"X#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#X\n" \
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n\n"); \
} while (0)
More information about the wine-patches
mailing list