OLD | NEW |
| (Empty) |
1 /* 7zItem.c -- 7z Items | |
2 2008-10-04 : Igor Pavlov : Public domain */ | |
3 | |
4 #include "7zItem.h" | |
5 | |
6 void SzCoderInfo_Init(CSzCoderInfo *p) | |
7 { | |
8 Buf_Init(&p->Props); | |
9 } | |
10 | |
11 void SzCoderInfo_Free(CSzCoderInfo *p, ISzAlloc *alloc) | |
12 { | |
13 Buf_Free(&p->Props, alloc); | |
14 SzCoderInfo_Init(p); | |
15 } | |
16 | |
17 void SzFolder_Init(CSzFolder *p) | |
18 { | |
19 p->Coders = 0; | |
20 p->BindPairs = 0; | |
21 p->PackStreams = 0; | |
22 p->UnpackSizes = 0; | |
23 p->NumCoders = 0; | |
24 p->NumBindPairs = 0; | |
25 p->NumPackStreams = 0; | |
26 p->UnpackCRCDefined = 0; | |
27 p->UnpackCRC = 0; | |
28 p->NumUnpackStreams = 0; | |
29 } | |
30 | |
31 void SzFolder_Free(CSzFolder *p, ISzAlloc *alloc) | |
32 { | |
33 UInt32 i; | |
34 if (p->Coders) | |
35 for (i = 0; i < p->NumCoders; i++) | |
36 SzCoderInfo_Free(&p->Coders[i], alloc); | |
37 IAlloc_Free(alloc, p->Coders); | |
38 IAlloc_Free(alloc, p->BindPairs); | |
39 IAlloc_Free(alloc, p->PackStreams); | |
40 IAlloc_Free(alloc, p->UnpackSizes); | |
41 SzFolder_Init(p); | |
42 } | |
43 | |
44 UInt32 SzFolder_GetNumOutStreams(CSzFolder *p) | |
45 { | |
46 UInt32 result = 0; | |
47 UInt32 i; | |
48 for (i = 0; i < p->NumCoders; i++) | |
49 result += p->Coders[i].NumOutStreams; | |
50 return result; | |
51 } | |
52 | |
53 int SzFolder_FindBindPairForInStream(CSzFolder *p, UInt32 inStreamIndex) | |
54 { | |
55 UInt32 i; | |
56 for (i = 0; i < p->NumBindPairs; i++) | |
57 if (p->BindPairs[i].InIndex == inStreamIndex) | |
58 return i; | |
59 return -1; | |
60 } | |
61 | |
62 | |
63 int SzFolder_FindBindPairForOutStream(CSzFolder *p, UInt32 outStreamIndex) | |
64 { | |
65 UInt32 i; | |
66 for (i = 0; i < p->NumBindPairs; i++) | |
67 if (p->BindPairs[i].OutIndex == outStreamIndex) | |
68 return i; | |
69 return -1; | |
70 } | |
71 | |
72 UInt64 SzFolder_GetUnpackSize(CSzFolder *p) | |
73 { | |
74 int i = (int)SzFolder_GetNumOutStreams(p); | |
75 if (i == 0) | |
76 return 0; | |
77 for (i--; i >= 0; i--) | |
78 if (SzFolder_FindBindPairForOutStream(p, i) < 0) | |
79 return p->UnpackSizes[i]; | |
80 /* throw 1; */ | |
81 return 0; | |
82 } | |
83 | |
84 void SzFile_Init(CSzFileItem *p) | |
85 { | |
86 p->HasStream = 1; | |
87 p->IsDir = 0; | |
88 p->IsAnti = 0; | |
89 p->FileCRCDefined = 0; | |
90 p->MTimeDefined = 0; | |
91 p->Name = 0; | |
92 } | |
93 | |
94 static void SzFile_Free(CSzFileItem *p, ISzAlloc *alloc) | |
95 { | |
96 IAlloc_Free(alloc, p->Name); | |
97 SzFile_Init(p); | |
98 } | |
99 | |
100 void SzAr_Init(CSzAr *p) | |
101 { | |
102 p->PackSizes = 0; | |
103 p->PackCRCsDefined = 0; | |
104 p->PackCRCs = 0; | |
105 p->Folders = 0; | |
106 p->Files = 0; | |
107 p->NumPackStreams = 0; | |
108 p->NumFolders = 0; | |
109 p->NumFiles = 0; | |
110 } | |
111 | |
112 void SzAr_Free(CSzAr *p, ISzAlloc *alloc) | |
113 { | |
114 UInt32 i; | |
115 if (p->Folders) | |
116 for (i = 0; i < p->NumFolders; i++) | |
117 SzFolder_Free(&p->Folders[i], alloc); | |
118 if (p->Files) | |
119 for (i = 0; i < p->NumFiles; i++) | |
120 SzFile_Free(&p->Files[i], alloc); | |
121 IAlloc_Free(alloc, p->PackSizes); | |
122 IAlloc_Free(alloc, p->PackCRCsDefined); | |
123 IAlloc_Free(alloc, p->PackCRCs); | |
124 IAlloc_Free(alloc, p->Folders); | |
125 IAlloc_Free(alloc, p->Files); | |
126 SzAr_Init(p); | |
127 } | |
OLD | NEW |