sync cabinet to wine 1.1.12
authorChristoph von Wittich <christoph_vw@reactos.org>
Sat, 10 Jan 2009 15:17:40 +0000 (15:17 +0000)
committerChristoph von Wittich <christoph_vw@reactos.org>
Sat, 10 Jan 2009 15:17:40 +0000 (15:17 +0000)
svn path=/trunk/; revision=38680

reactos/dll/win32/cabinet/cabinet.h
reactos/dll/win32/cabinet/cabinet_main.c
reactos/dll/win32/cabinet/fci.c
reactos/dll/win32/cabinet/fdi.c

index e786c1f..8b38f9b 100644 (file)
@@ -656,6 +656,5 @@ typedef struct {
 /* from fdi.c */
 void QTMupdatemodel(struct QTMmodel *model, int sym);
 int make_decode_table(cab_ULONG nsyms, cab_ULONG nbits, const cab_UBYTE *length, cab_UWORD *table);
-cab_ULONG checksum(const cab_UBYTE *data, cab_UWORD bytes, cab_ULONG csum);
 
 #endif /* __WINE_CABINET_H */
index 35810e3..4748a99 100644 (file)
@@ -237,7 +237,18 @@ static INT_PTR fdi_notify_extract(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pf
 
                 /* create the destination directory if it doesn't exist */
                 if (GetFileAttributesA(szDirectory) == INVALID_FILE_ATTRIBUTES)
+                {
+                    char *ptr;
+
+                    for(ptr = szDirectory + strlen(pDestination->Destination)+1; *ptr; ptr++) {
+                        if(*ptr == '\\') {
+                            *ptr = 0;
+                            CreateDirectoryA(szDirectory, NULL);
+                            *ptr = '\\';
+                        }
+                    }
                     CreateDirectoryA(szDirectory, NULL);
+                }
 
                 hFile = CreateFileA(szFullPath, GENERIC_READ | GENERIC_WRITE, 0, NULL,
                                     CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
index ed413f8..81175dc 100644 (file)
@@ -382,7 +382,7 @@ static BOOL fci_flush_data_block (HFCI hfci, int* err,
   /* inefficient, but it's harder to forget about freeing the buffer :-). */
   /* Reserved areas are used seldom besides that... */
   if (cbReserveCFData!=0) {
-    if(!(reserved = (char*)PFCI_ALLOC(hfci, cbReserveCFData))) {
+    if(!(reserved = PFCI_ALLOC(hfci, cbReserveCFData))) {
       fci_set_error( FCIERR_ALLOC_FAIL, ERROR_NOT_ENOUGH_MEMORY, TRUE );
       return FALSE;
     }
@@ -852,7 +852,7 @@ static BOOL fci_flushfolder_copy_cffolder(HFCI hfci, int* err, UINT cbReserveCFF
 
   /* add optional reserved area */
   if (cbReserveCFFolder!=0) {
-    if(!(reserved = (char*)PFCI_ALLOC(hfci, cbReserveCFFolder))) {
+    if(!(reserved = PFCI_ALLOC(hfci, cbReserveCFFolder))) {
       fci_set_error( FCIERR_ALLOC_FAIL, ERROR_NOT_ENOUGH_MEMORY, TRUE );
       return FALSE;
     }
@@ -1419,7 +1419,7 @@ static BOOL fci_flush_folder(
   /* save size of file CFDATA2 - required for the folder's offset to data */
   sizeFileCFDATA2old = p_fci_internal->sizeFileCFDATA2;
 
-  if(!(reserved = (char*)PFCI_ALLOC(hfci, cbReserveCFData+sizeof(CFDATA)))) {
+  if(!(reserved = PFCI_ALLOC(hfci, cbReserveCFData+sizeof(CFDATA)))) {
     fci_set_error( FCIERR_ALLOC_FAIL, ERROR_NOT_ENOUGH_MEMORY, TRUE );
     PFCI_CLOSE(hfci,handleCFDATA1new,&err,p_fci_internal->pv);
     /* TODO error handling of err */
@@ -1753,7 +1753,7 @@ static BOOL fci_flush_cabinet(
 
   /* add optional reserved area */
   if (cbReserveCFHeader!=0) {
-    if(!(reserved = (char*)PFCI_ALLOC(hfci, cbReserveCFHeader))) {
+    if(!(reserved = PFCI_ALLOC(hfci, cbReserveCFHeader))) {
       fci_set_error( FCIERR_ALLOC_FAIL, ERROR_NOT_ENOUGH_MEMORY, TRUE );
       return FALSE;
     }
@@ -2397,7 +2397,7 @@ BOOL __cdecl FCIAddFile(
       fci_set_error( FCIERR_NONE, ERROR_GEN_FAILURE, TRUE );
       return FALSE;
     }
-    if(!(p_fci_internal->data_in = (char*)PFCI_ALLOC(hfci,CB_MAX_CHUNK))) {
+    if(!(p_fci_internal->data_in = PFCI_ALLOC(hfci,CB_MAX_CHUNK))) {
       fci_set_error( FCIERR_ALLOC_FAIL, ERROR_NOT_ENOUGH_MEMORY, TRUE );
       return FALSE;
     }
index 4923404..e36066d 100644 (file)
@@ -293,7 +293,7 @@ int make_decode_table(cab_ULONG nsyms, cab_ULONG nbits, const cab_UBYTE *length,
 /*************************************************************************
  * checksum (internal)
  */
-cab_ULONG checksum(const cab_UBYTE *data, cab_UWORD bytes, cab_ULONG csum) {
+static cab_ULONG checksum(const cab_UBYTE *data, cab_UWORD bytes, cab_ULONG csum) {
   int len;
   cab_ULONG ul = 0;
 
@@ -1054,7 +1054,7 @@ struct Ziphuft **t, cab_LONG *m, fdi_decomp_state *decomp_state)
         l[h] = j;               /* set table size in stack */
 
         /* allocate and link in new table */
-        if (!(q = (struct Ziphuft *) PFDI_ALLOC(CAB(hfdi), (z + 1)*sizeof(struct Ziphuft))))
+        if (!(q = PFDI_ALLOC(CAB(hfdi), (z + 1)*sizeof(struct Ziphuft))))
         {
           if(h)
             fdi_Ziphuft_free(CAB(hfdi), ZIP(u)[0]);
@@ -2180,8 +2180,8 @@ static int fdi_decomp(const struct fdi_file *fi, int savemode, fdi_decomp_state
 
             if (cab->mii.folder_resv > 0)
               PFDI_SEEK(CAB(hfdi), cab->cabhf, cab->mii.folder_resv, SEEK_CUR);
-        
-            fol = (struct fdi_folder *) PFDI_ALLOC(CAB(hfdi), sizeof(struct fdi_folder));
+
+            fol = PFDI_ALLOC(CAB(hfdi), sizeof(struct fdi_folder));
             if (!fol) {
               ERR("out of memory!\n");
               return DECR_NOMEMORY;
@@ -2202,8 +2202,8 @@ static int fdi_decomp(const struct fdi_file *fi, int savemode, fdi_decomp_state
           for (i = 0; i < fdici.cFiles; i++) {
             if (PFDI_READ(CAB(hfdi), cab->cabhf, buf2, cffile_SIZEOF) != cffile_SIZEOF)
               return DECR_INPUT;
-              
-            file = (struct fdi_file *) PFDI_ALLOC(CAB(hfdi), sizeof(struct fdi_file));
+
+            file = PFDI_ALLOC(CAB(hfdi), sizeof(struct fdi_file));
             if (!file) {
               ERR("out of memory!\n"); 
               return DECR_NOMEMORY;
@@ -2592,7 +2592,7 @@ BOOL __cdecl FDICopy(
     if (CAB(mii).folder_resv > 0)
       PFDI_SEEK(hfdi, cabhf, CAB(mii).folder_resv, SEEK_CUR);
 
-    fol = (struct fdi_folder *) PFDI_ALLOC(hfdi, sizeof(struct fdi_folder));
+    fol = PFDI_ALLOC(hfdi, sizeof(struct fdi_folder));
     if (!fol) {
       ERR("out of memory!\n");
       PFDI_INT(hfdi)->perf->erfOper = FDIERROR_ALLOC_FAIL;
@@ -2622,7 +2622,7 @@ BOOL __cdecl FDICopy(
       goto bail_and_fail;
     }
 
-    file = (struct fdi_file *) PFDI_ALLOC(hfdi, sizeof(struct fdi_file));
+    file = PFDI_ALLOC(hfdi, sizeof(struct fdi_file));
     if (!file) { 
       ERR("out of memory!\n"); 
       PFDI_INT(hfdi)->perf->erfOper = FDIERROR_ALLOC_FAIL;