28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#import "ZooArchive.h"
#import "OFArc.h"
#import "OFSetItemAttributesFailedException.h"
static OFArc *app;
static void
setModificationDate(OFString *path, OFZooArchiveEntry *entry)
{
OFFileAttributes attributes = [OFDictionary
dictionaryWithObject: entry.modificationDate
forKey: OFFileModificationDate];
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#import "ZooArchive.h"
#import "OFArc.h"
#import "OFSetItemAttributesFailedException.h"
static OFArc *app;
static void
setPermissions(OFString *path, OFZooArchiveEntry *entry)
{
#ifdef OF_FILE_MANAGER_SUPPORTS_PERMISSIONS
OFNumber *POSIXPermissions = entry.POSIXPermissions;
if (POSIXPermissions == nil)
return;
POSIXPermissions = [OFNumber numberWithUnsignedShort:
POSIXPermissions.unsignedShortValue & 0777];
OFFileAttributes attributes = [OFDictionary
dictionaryWithObject: POSIXPermissions
forKey: OFFilePOSIXPermissions];
[[OFFileManager defaultManager] setAttributes: attributes
ofItemAtPath: path];
#endif
}
static void
setModificationDate(OFString *path, OFZooArchiveEntry *entry)
{
OFFileAttributes attributes = [OFDictionary
dictionaryWithObject: entry.modificationDate
forKey: OFFileModificationDate];
|
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
@"CRC16: %[crc16]",
@"crc16", CRC16)];
[OFStdOut writeString: @"\t"];
[OFStdOut writeLine: OF_LOCALIZED(
@"list_modification_date",
@"Modification date: %[date]",
@"date", modificationDate)];
[OFStdOut writeString: @"\t"];
[OFStdOut writeLine: OF_LOCALIZED(
@"list_deleted",
@"["
@" 'Deleted: ',"
@" ["
@" {'deleted == 0': 'No'},"
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
@"CRC16: %[crc16]",
@"crc16", CRC16)];
[OFStdOut writeString: @"\t"];
[OFStdOut writeLine: OF_LOCALIZED(
@"list_modification_date",
@"Modification date: %[date]",
@"date", modificationDate)];
if (entry.POSIXPermissions != nil) {
OFString *permissionsString = [OFString
stringWithFormat: @"%llo",
entry.POSIXPermissions
.unsignedLongLongValue];
[OFStdOut writeString: @"\t"];
[OFStdOut writeLine: OF_LOCALIZED(
@"list_posix_permissions",
@"POSIX permissions: %[perm]",
@"perm", permissionsString)];
}
[OFStdOut writeString: @"\t"];
[OFStdOut writeLine: OF_LOCALIZED(
@"list_deleted",
@"["
@" 'Deleted: ',"
@" ["
@" {'deleted == 0': 'No'},"
|
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
createParents: true];
if (![app shouldExtractFile: fileName outFileName: outFileName])
goto outer_loop_end;
stream = [_archive streamForReadingCurrentEntry];
output = [OFFile fileWithPath: outFileName mode: @"w"];
while (!stream.atEndOfStream) {
ssize_t length = [app copyBlockFromStream: stream
toStream: output
fileName: fileName];
if (length < 0) {
|
>
|
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
|
createParents: true];
if (![app shouldExtractFile: fileName outFileName: outFileName])
goto outer_loop_end;
stream = [_archive streamForReadingCurrentEntry];
output = [OFFile fileWithPath: outFileName mode: @"w"];
setPermissions(outFileName, entry);
while (!stream.atEndOfStream) {
ssize_t length = [app copyBlockFromStream: stream
toStream: output
fileName: fileName];
if (length < 0) {
|