Overview
Comment: | OFZIP: Set permissions - if entry has any |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
a7f9c9d4bc347a3d910a00ea37a61d4e |
User & Date: | js on 2014-05-26 20:08:11 |
Other Links: | manifest | tags |
Context
2014-05-29
| ||
21:13 | OFZIP: Better verbose output check-in: c095670543 user: js tags: trunk | |
2014-05-26
| ||
20:08 | OFZIP: Set permissions - if entry has any check-in: a7f9c9d4bc user: js tags: trunk | |
15:41 | OFZIPArchiveEntry: Make more properties public check-in: c1d665c395 user: js tags: trunk | |
Changes
Modified utils/OFZIP.m from [0a5ec525eb] to [abd59c7cd9].
︙ | |||
74 75 76 77 78 79 80 81 82 83 84 85 86 87 | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | + + + + + + + + + + + + + + + + + | static void mutuallyExclusiveError(of_unichar_t option1, of_unichar_t option2) { [of_stderr writeFormat: @"Error: -%C and -%C are mutually exclusive!\n", option1, option2]; [OFApplication terminateWithStatus: 1]; } static void setPermissions(OFString *path, OFZIPArchiveEntry *entry) { #ifdef OF_HAVE_CHMOD if (([entry versionMadeBy] >> 8) == OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_UNIX) { uint32_t mode = [entry versionSpecificAttributes] >> 16; /* Only allow modes that are safe */ mode &= (S_IRWXU | S_IRWXG | S_IRWXO); [OFFile changePermissionsOfItemAtPath: path permissions: mode]; } #endif } @implementation OFZIP - (void)applicationDidFinishLaunching { OFOptionsParser *optionsParser = [OFOptionsParser parserWithOptions: @"fhlnqvx"]; of_unichar_t option, mode = '\0'; |
︙ | |||
210 211 212 213 214 215 216 217 218 219 220 221 222 223 | 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 | + + + + + + + + + + | localDateStringWithFormat: @"%Y-%m-%d %H:%M:%S"]; [of_stdout writeFormat: @"%@: %" PRIu64 @" (%" PRIu64 @") bytes; %08X; %@; " @"%@", [entry fileName], [entry uncompressedSize], [entry compressedSize], [entry CRC32], date, [entry fileComment]]; if (_outputLevel >= 2) { if (([entry versionMadeBy] >> 8) == OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_UNIX) { uint32_t mode = [entry versionSpecificAttributes] >> 16; [of_stdout writeFormat: @"; %06o", mode]; } } if (_outputLevel >= 3) [of_stdout writeFormat: @"; %@", [entry extraField]]; [of_stdout writeString: @"\n"]; } else |
︙ | |||
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 | + + + | if (_outputLevel >= 0) [of_stdout writeFormat: @"Extracting %@...", fileName]; if ([fileName hasSuffix: @"/"]) { [OFFile createDirectoryAtPath: outFileName createParents: true]; setPermissions(outFileName, entry); if (_outputLevel >= 0) [of_stdout writeLine: @" done"]; continue; } directory = [outFileName stringByDeletingLastPathComponent]; if (![OFFile directoryExistsAtPath: directory]) [OFFile createDirectoryAtPath: directory createParents: true]; |
︙ | |||
328 329 330 331 332 333 334 335 336 337 338 339 340 341 | 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 | + | [of_stdout writeFormat: @"Extracting %@...", fileName]; } stream = [archive streamForReadingFile: fileName]; output = [OFFile fileWithPath: outFileName mode: @"wb"]; setPermissions(outFileName, entry); while (![stream isAtEndOfStream]) { size_t length = [stream readIntoBuffer: buffer length: BUFFER_SIZE]; [output writeBuffer: buffer length: length]; |
︙ |