Am Dienstag, 6. Januar 2004 19:10 schrieb Mike Hearn:
> On Tue, 2004-01-06 at 17:59, Stefan Leichter wrote:
>
> No, I didn't, please do it :)
>
Hi Mike
does the patch work for you, or does it break your installer again?
Bye Stefan
diff -urw ../wine/dlls/cabinet/cabextract.c dlls/cabinet/cabextract.c
--- ../wine/dlls/cabinet/cabextract.c 2003-12-31 09:45:41.000000000 +0100
+++ dlls/cabinet/cabextract.c 2004-01-06 22:14:42.000000000 +0100
@@ -2564,6 +2564,7 @@
{
struct cabinet *basecab, *cab, *cab1, *cab2;
struct cab_file *filelist, *fi;
+ struct ExtractFileList *destlistptr = dest->filelist;
/* The first result of a search will be returned, and
* the remaining results will be chained to it via the cab->next structure
@@ -2632,6 +2633,15 @@
strlen(dest->directory) ? dest->directory : "",
strlen(dest->directory) ? "\\": "",
fi->filename);
+ destlistptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(struct ExtractFileList));
+ if(destlistptr) {
+ destlistptr->unknown = TRUE; /* FIXME: were do we get the value? */
+ destlistptr->filename = HeapAlloc(GetProcessHeap(), 0, (
+ strlen(fi->filename)+1));
+ if(destlistptr->filename)
+ lstrcpyA(destlistptr->filename, fi->filename);
+ }
}
}
diff -urw ../wine/dlls/cabinet/cabinet.h dlls/cabinet/cabinet.h
--- ../wine/dlls/cabinet/cabinet.h 2003-12-31 09:45:41.000000000 +0100
+++ dlls/cabinet/cabinet.h 2004-01-06 22:06:47.000000000 +0100
@@ -553,11 +553,17 @@
0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff \
}
+struct ExtractFileList {
+ LPSTR filename;
+ struct ExtractFileList *next;
+ BOOL unknown; /* always 1L */
+} ;
+
/* the first parameter of the function extract */
typedef struct {
long result1; /* 0x000 */
long unknown1[3]; /* 0x004 */
- long result2; /* 0x010 */
+ struct ExtractFileList *filelist; /* 0x010 */
long filecount; /* 0x014 */
long unknown2; /* 0x018 */
char directory[0x104]; /* 0x01c */
diff -urw ../wine/dlls/cabinet/cabinet_main.c dlls/cabinet/cabinet_main.c
--- ../wine/dlls/cabinet/cabinet_main.c 2004-01-06 20:54:00.000000000 +0100
+++ dlls/cabinet/cabinet_main.c 2004-01-06 21:51:47.000000000 +0100
@@ -114,6 +114,7 @@
if (!dir) return E_OUTOFMEMORY;
lstrcpyA(dir, dest->directory);
dest->filecount=0;
+ dest->filelist = NULL;
TRACE("extracting to dir: %s\n", debugstr_a(dir));
@@ -121,15 +122,6 @@
if (!process_cabinet(what, dir, FALSE, FALSE, dest))
return E_OUTOFMEMORY;
- /* the magic 13 is returned by all cab files tested so far:
- * DXDDEX.CAB, DXMINI.CAB, SWFLASH.CAB on win2k
- * but it crashes the ie5.5 installer :-( . The native dll does not return
- * the four zeros. The value depends on the combination of the cab file and
- * the destination path. It appears to be a pointer to an optional return struct.
- * The IE6 installer derefs this value + 4. Contents currently unknown.
- */
- dest->result2 = 0;
-
LocalFree(dir);
TRACE("filecount %08lx,lastfile %s\n",