| OLD | NEW |
| (Empty) |
| 1 /* 7zItem.c */ | |
| 2 | |
| 3 #include "7zItem.h" | |
| 4 #include "7zAlloc.h" | |
| 5 | |
| 6 void SzCoderInfoInit(CCoderInfo *coder) | |
| 7 { | |
| 8 SzByteBufferInit(&coder->Properties); | |
| 9 } | |
| 10 | |
| 11 void SzCoderInfoFree(CCoderInfo *coder, void (*freeFunc)(void *p)) | |
| 12 { | |
| 13 SzByteBufferFree(&coder->Properties, freeFunc); | |
| 14 SzCoderInfoInit(coder); | |
| 15 } | |
| 16 | |
| 17 void SzFolderInit(CFolder *folder) | |
| 18 { | |
| 19 folder->NumCoders = 0; | |
| 20 folder->Coders = 0; | |
| 21 folder->NumBindPairs = 0; | |
| 22 folder->BindPairs = 0; | |
| 23 folder->NumPackStreams = 0; | |
| 24 folder->PackStreams = 0; | |
| 25 folder->UnPackSizes = 0; | |
| 26 folder->UnPackCRCDefined = 0; | |
| 27 folder->UnPackCRC = 0; | |
| 28 folder->NumUnPackStreams = 0; | |
| 29 } | |
| 30 | |
| 31 void SzFolderFree(CFolder *folder, void (*freeFunc)(void *p)) | |
| 32 { | |
| 33 UInt32 i; | |
| 34 for (i = 0; i < folder->NumCoders; i++) | |
| 35 SzCoderInfoFree(&folder->Coders[i], freeFunc); | |
| 36 freeFunc(folder->Coders); | |
| 37 freeFunc(folder->BindPairs); | |
| 38 freeFunc(folder->PackStreams); | |
| 39 freeFunc(folder->UnPackSizes); | |
| 40 SzFolderInit(folder); | |
| 41 } | |
| 42 | |
| 43 UInt32 SzFolderGetNumOutStreams(CFolder *folder) | |
| 44 { | |
| 45 UInt32 result = 0; | |
| 46 UInt32 i; | |
| 47 for (i = 0; i < folder->NumCoders; i++) | |
| 48 result += folder->Coders[i].NumOutStreams; | |
| 49 return result; | |
| 50 } | |
| 51 | |
| 52 int SzFolderFindBindPairForInStream(CFolder *folder, UInt32 inStreamIndex) | |
| 53 { | |
| 54 UInt32 i; | |
| 55 for(i = 0; i < folder->NumBindPairs; i++) | |
| 56 if (folder->BindPairs[i].InIndex == inStreamIndex) | |
| 57 return i; | |
| 58 return -1; | |
| 59 } | |
| 60 | |
| 61 | |
| 62 int SzFolderFindBindPairForOutStream(CFolder *folder, UInt32 outStreamIndex) | |
| 63 { | |
| 64 UInt32 i; | |
| 65 for(i = 0; i < folder->NumBindPairs; i++) | |
| 66 if (folder->BindPairs[i].OutIndex == outStreamIndex) | |
| 67 return i; | |
| 68 return -1; | |
| 69 } | |
| 70 | |
| 71 CFileSize SzFolderGetUnPackSize(CFolder *folder) | |
| 72 { | |
| 73 int i = (int)SzFolderGetNumOutStreams(folder); | |
| 74 if (i == 0) | |
| 75 return 0; | |
| 76 for (i--; i >= 0; i--) | |
| 77 if (SzFolderFindBindPairForOutStream(folder, i) < 0) | |
| 78 return folder->UnPackSizes[i]; | |
| 79 /* throw 1; */ | |
| 80 return 0; | |
| 81 } | |
| 82 | |
| 83 /* | |
| 84 int FindPackStreamArrayIndex(int inStreamIndex) const | |
| 85 { | |
| 86 for(int i = 0; i < PackStreams.Size(); i++) | |
| 87 if (PackStreams[i] == inStreamIndex) | |
| 88 return i; | |
| 89 return -1; | |
| 90 } | |
| 91 */ | |
| 92 | |
| 93 void SzFileInit(CFileItem *fileItem) | |
| 94 { | |
| 95 fileItem->IsFileCRCDefined = 0; | |
| 96 fileItem->HasStream = 1; | |
| 97 fileItem->IsDirectory = 0; | |
| 98 fileItem->IsAnti = 0; | |
| 99 fileItem->IsLastWriteTimeDefined = 0; | |
| 100 fileItem->Name = 0; | |
| 101 } | |
| 102 | |
| 103 void SzFileFree(CFileItem *fileItem, void (*freeFunc)(void *p)) | |
| 104 { | |
| 105 freeFunc(fileItem->Name); | |
| 106 SzFileInit(fileItem); | |
| 107 } | |
| 108 | |
| 109 void SzArchiveDatabaseInit(CArchiveDatabase *db) | |
| 110 { | |
| 111 db->NumPackStreams = 0; | |
| 112 db->PackSizes = 0; | |
| 113 db->PackCRCsDefined = 0; | |
| 114 db->PackCRCs = 0; | |
| 115 db->NumFolders = 0; | |
| 116 db->Folders = 0; | |
| 117 db->NumFiles = 0; | |
| 118 db->Files = 0; | |
| 119 } | |
| 120 | |
| 121 void SzArchiveDatabaseFree(CArchiveDatabase *db, void (*freeFunc)(void *)) | |
| 122 { | |
| 123 UInt32 i; | |
| 124 for (i = 0; i < db->NumFolders; i++) | |
| 125 SzFolderFree(&db->Folders[i], freeFunc); | |
| 126 for (i = 0; i < db->NumFiles; i++) | |
| 127 SzFileFree(&db->Files[i], freeFunc); | |
| 128 freeFunc(db->PackSizes); | |
| 129 freeFunc(db->PackCRCsDefined); | |
| 130 freeFunc(db->PackCRCs); | |
| 131 freeFunc(db->Folders); | |
| 132 freeFunc(db->Files); | |
| 133 SzArchiveDatabaseInit(db); | |
| 134 } | |
| OLD | NEW |