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 |