Overview
Comment: | OFFileManager: Improved dir creation in sandbox |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
9d23c7e1f9aa5b93d2b1afc5915883b7 |
User & Date: | js on 2019-08-22 09:48:58 |
Other Links: | manifest | tags |
Context
2019-08-22
| ||
18:47 | .travis.yml: Remove to-be-decommissioned precise check-in: f17355cc63 user: js tags: trunk | |
09:48 | OFFileManager: Improved dir creation in sandbox check-in: 9d23c7e1f9 user: js tags: trunk | |
2019-08-18
| ||
22:22 | Optimize retain / release on AmigaOS check-in: fbe84dc674 user: js tags: trunk | |
Changes
Modified src/OFFileManager.m from [cce81bf147] to [5c4544e132].
︙ | ︙ | |||
339 340 341 342 343 344 345 | if ((URLHandler = [OFURLHandler handlerForURL: URL]) == nil) @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; [URLHandler createDirectoryAtURL: URL]; } | | | > > > | 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 | if ((URLHandler = [OFURLHandler handlerForURL: URL]) == nil) @throw [OFUnsupportedProtocolException exceptionWithURL: URL]; [URLHandler createDirectoryAtURL: URL]; } - (void)createDirectoryAtURL: (OFURL *)URL createParents: (bool)createParents { void *pool = objc_autoreleasePoolPush(); OFMutableURL *mutableURL; OFArray OF_GENERIC(OFString *) *components; OFMutableArray OF_GENERIC(OFURL *) *componentURLs; size_t componentURLsCount; ssize_t i; if (URL == nil) @throw [OFInvalidArgumentException exception]; if (!createParents) { [self createDirectoryAtURL: URL]; return; |
︙ | ︙ | |||
376 377 378 379 380 381 382 | * If we didn't fail because any of the parents is missing, * there is no point in trying to create the parents. */ if (e.errNo != ENOENT) @throw e; } | > > > > > > | | > > | | > > > > > > | > > > | > > > > > > > > > > > | 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 | * If we didn't fail because any of the parents is missing, * there is no point in trying to create the parents. */ if (e.errNo != ENOENT) @throw e; } /* * Because we might be sandboxed (and for remote URLs don't even know * anything at all), we generate the URL for every component. We then * iterate them in reverse order until we find the first existing * directory, and then create subdirectories from there. */ mutableURL = [[URL mutableCopy] autorelease]; mutableURL.URLEncodedPath = @"/"; components = URL.pathComponents; componentURLs = [OFMutableArray arrayWithCapacity: components.count]; for (OFString *component in components) { [mutableURL appendPathComponent: component]; if (![mutableURL.URLEncodedPath isEqual: @"/"]) [componentURLs addObject: [[mutableURL copy] autorelease]]; } componentURLsCount = componentURLs.count; for (i = componentURLsCount - 1; i > 0; i--) { if ([self directoryExistsAtURL: [componentURLs objectAtIndex: i]]) break; } if (++i == (ssize_t)componentURLsCount) { /* * The URL exists, even though before we made sure it did not. * That means it was created in the meantime by something else, * so we're done here. */ objc_autoreleasePoolPop(pool); return; } for (; i < (ssize_t)componentURLsCount; i++) [self createDirectoryAtURL: [componentURLs objectAtIndex: i]]; objc_autoreleasePoolPop(pool); } #ifdef OF_HAVE_FILES - (void)createDirectoryAtPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); |
︙ | ︙ |