James Hawkins : cabinet: Formalize the SESSION struct.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Aug 23 07:25:55 CDT 2007
Module: wine
Branch: master
Commit: 832e30694d02c8a34dedc8ccbbf9bf5a3590e6ce
URL: http://source.winehq.org/git/wine.git/?a=commit;h=832e30694d02c8a34dedc8ccbbf9bf5a3590e6ce
Author: James Hawkins <truiken at gmail.com>
Date: Wed Aug 22 17:35:53 2007 -0700
cabinet: Formalize the SESSION struct.
---
dlls/cabinet/cabinet.h | 34 ++++++++++-----------
dlls/cabinet/cabinet_main.c | 67 ++++++++++++++++++++++--------------------
2 files changed, 51 insertions(+), 50 deletions(-)
diff --git a/dlls/cabinet/cabinet.h b/dlls/cabinet/cabinet.h
index 4cd1f77..3b72ff8 100644
--- a/dlls/cabinet/cabinet.h
+++ b/dlls/cabinet/cabinet.h
@@ -631,29 +631,27 @@ static const cab_UWORD Zipmask[17] = {
0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff \
}
-/* EXTRACTdest flags */
+/* SESSION Operation */
#define EXTRACT_FILLFILELIST 0x00000001
#define EXTRACT_EXTRACTFILES 0x00000002
-struct ExtractFileList {
- LPSTR filename;
- struct ExtractFileList *next;
- BOOL flag;
-} ;
+struct FILELIST{
+ LPSTR FileName;
+ struct FILELIST *next;
+ BOOL Extracted;
+};
-/* the first parameter of the function extract */
typedef struct {
- long result1; /* 0x000 */
- long unknown1[3]; /* 0x004 */
- struct ExtractFileList *filelist; /* 0x010 */
- long filecount; /* 0x014 */
- DWORD flags; /* 0x018 */
- char directory[MAX_PATH]; /* 0x01c */
- char lastfile[MAX_PATH]; /* 0x120 */
- char unknown2[MAX_PATH]; /* 0x224 */
- struct ExtractFileList *filterlist; /* 0x328 */
-} EXTRACTdest;
-
+ INT FileSize;
+ ERF Error;
+ struct FILELIST *FileList;
+ INT FileCount;
+ INT Operation;
+ CHAR Destination[MAX_PATH];
+ CHAR CurrentFile[MAX_PATH];
+ CHAR Reserved[MAX_PATH];
+ struct FILELIST *FilterList;
+} SESSION;
/* from fdi.c */
void QTMupdatemodel(struct QTMmodel *model, int sym);
diff --git a/dlls/cabinet/cabinet_main.c b/dlls/cabinet/cabinet_main.c
index 6483a3f..8b3c621 100644
--- a/dlls/cabinet/cabinet_main.c
+++ b/dlls/cabinet/cabinet_main.c
@@ -154,20 +154,20 @@ static long fdi_seek(INT_PTR hf, long dist, int seektype)
return SetFilePointer(handle, dist, NULL, seektype);
}
-static void fill_file_node(struct ExtractFileList *pNode, LPCSTR szFilename)
+static void fill_file_node(struct FILELIST *pNode, LPCSTR szFilename)
{
pNode->next = NULL;
- pNode->flag = FALSE;
+ pNode->Extracted = FALSE;
- pNode->filename = HeapAlloc(GetProcessHeap(), 0, strlen(szFilename) + 1);
- lstrcpyA(pNode->filename, szFilename);
+ pNode->FileName = HeapAlloc(GetProcessHeap(), 0, strlen(szFilename) + 1);
+ lstrcpyA(pNode->FileName, szFilename);
}
-static BOOL file_in_list(const struct ExtractFileList *pNode, LPCSTR szFilename)
+static BOOL file_in_list(const struct FILELIST *pNode, LPCSTR szFilename)
{
while (pNode)
{
- if (!lstrcmpiA(pNode->filename, szFilename))
+ if (!lstrcmpiA(pNode->FileName, szFilename))
return TRUE;
pNode = pNode->next;
@@ -182,17 +182,17 @@ static INT_PTR fdi_notify_extract(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pf
{
case fdintCOPY_FILE:
{
- struct ExtractFileList **fileList;
- EXTRACTdest *pDestination = pfdin->pv;
+ struct FILELIST **fileList;
+ SESSION *pDestination = pfdin->pv;
LPSTR szFullPath, szDirectory;
HANDLE hFile = 0;
DWORD dwSize;
- dwSize = lstrlenA(pDestination->directory) +
+ dwSize = lstrlenA(pDestination->Destination) +
lstrlenA("\\") + lstrlenA(pfdin->psz1) + 1;
szFullPath = HeapAlloc(GetProcessHeap(), 0, dwSize);
- lstrcpyA(szFullPath, pDestination->directory);
+ lstrcpyA(szFullPath, pDestination->Destination);
lstrcatA(szFullPath, "\\");
lstrcatA(szFullPath, pfdin->psz1);
@@ -201,26 +201,26 @@ static INT_PTR fdi_notify_extract(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pf
szDirectory = HeapAlloc(GetProcessHeap(), 0, dwSize);
lstrcpynA(szDirectory, szFullPath, dwSize);
- if (pDestination->flags & EXTRACT_FILLFILELIST)
+ if (pDestination->Operation & EXTRACT_FILLFILELIST)
{
- fileList = &pDestination->filelist;
+ fileList = &pDestination->FileList;
while (*fileList)
fileList = &((*fileList)->next);
*fileList = HeapAlloc(GetProcessHeap(), 0,
- sizeof(struct ExtractFileList));
+ sizeof(struct FILELIST));
fill_file_node(*fileList, pfdin->psz1);
- lstrcpyA(pDestination->lastfile, szFullPath);
- pDestination->filecount++;
+ lstrcpyA(pDestination->CurrentFile, szFullPath);
+ pDestination->FileCount++;
}
- if ((pDestination->flags & EXTRACT_EXTRACTFILES) ||
- file_in_list(pDestination->filterlist, pfdin->psz1))
+ if ((pDestination->Operation & EXTRACT_EXTRACTFILES) ||
+ file_in_list(pDestination->FilterList, pfdin->psz1))
{
/* skip this file if it is not in the file list */
- if (!file_in_list(pDestination->filelist, pfdin->psz1))
+ if (!file_in_list(pDestination->FileList, pfdin->psz1))
return 0;
/* create the destination directory if it doesn't exist */
@@ -281,25 +281,28 @@ static INT_PTR fdi_notify_extract(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pf
* NOTES
* The following members of the dest struct control the operation
* of Extract:
- * filelist [I] A linked list of filenames. Extract only extracts
- * files from the cabinet that are in this list.
- * filecount [O] Contains the number of files in filelist on
- * completion.
- * flags [I] See Operation.
- * directory [I] The destination directory.
- * lastfile [O] The last file extracted.
+ * FileSize [O] The size of all files extracted up to CurrentFile.
+ * Error [O] The error in case the extract operation fails.
+ * FileList [I] A linked list of filenames. Extract only extracts
+ * files from the cabinet that are in this list.
+ * FileCount [O] Contains the number of files in FileList on
+ * completion.
+ * Operation [I] See Operation.
+ * Destination [I] The destination directory.
+ * CurrentFile [O] The last file extracted.
+ * FilterList [I] A linked list of files that should not be extracted.
*
* Operation
- * If flags contains EXTRACT_FILLFILELIST, then filelist will be
- * filled with all the files in the cabinet. If flags contains
- * EXTRACT_EXTRACTFILES, then only the files in the filelist will
+ * If Operation contains EXTRACT_FILLFILELIST, then FileList will be
+ * filled with all the files in the cabinet. If Operation contains
+ * EXTRACT_EXTRACTFILES, then only the files in the FileList will
* be extracted from the cabinet. EXTRACT_FILLFILELIST can be called
- * by itself, but EXTRACT_EXTRACTFILES must have a valid filelist
- * in order to succeed. If flags contains both EXTRACT_FILLFILELIST
+ * by itself, but EXTRACT_EXTRACTFILES must have a valid FileList
+ * in order to succeed. If Operation contains both EXTRACT_FILLFILELIST
* and EXTRACT_EXTRACTFILES, then all the files in the cabinet
* will be extracted.
*/
-HRESULT WINAPI Extract(EXTRACTdest *dest, LPCSTR szCabName)
+HRESULT WINAPI Extract(SESSION *dest, LPCSTR szCabName)
{
HRESULT res = S_OK;
HFDI hfdi;
@@ -321,7 +324,7 @@ HRESULT WINAPI Extract(EXTRACTdest *dest, LPCSTR szCabName)
if (!hfdi)
return E_FAIL;
- if (GetFileAttributesA(dest->directory) == INVALID_FILE_ATTRIBUTES)
+ if (GetFileAttributesA(dest->Destination) == INVALID_FILE_ATTRIBUTES)
return S_OK;
/* split the cabinet name into path + name */
More information about the wine-cvs
mailing list