︙ | | | ︙ | |
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
}
- (OFURL *)currentDirectoryURL
{
void *pool = objc_autoreleasePoolPush();
OFURL *ret;
ret = [OFURL fileURLWithPath: [self currentDirectoryPath]];
[ret retain];
objc_autoreleasePoolPop(pool);
return [ret autorelease];
}
- (of_file_attributes_t)attributesOfItemAtURL: (OFURL *)URL
|
|
|
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
}
- (OFURL *)currentDirectoryURL
{
void *pool = objc_autoreleasePoolPush();
OFURL *ret;
ret = [OFURL fileURLWithPath: self.currentDirectoryPath];
[ret retain];
objc_autoreleasePoolPop(pool);
return [ret autorelease];
}
- (of_file_attributes_t)attributesOfItemAtURL: (OFURL *)URL
|
︙ | | | ︙ | |
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
|
* 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;
}
components = [[URL URLEncodedPath] componentsSeparatedByString: @"/"];
for (OFString *component in components) {
if (currentPath != nil)
currentPath = [currentPath
stringByAppendingFormat: @"/%@", component];
else
currentPath = component;
[URL setURLEncodedPath: currentPath];
if ([currentPath length] > 0 &&
![self directoryExistsAtURL: URL])
[self createDirectoryAtURL: URL];
}
objc_autoreleasePoolPop(pool);
}
|
|
|
|
|
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
|
* 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;
}
components = [URL.URLEncodedPath componentsSeparatedByString: @"/"];
for (OFString *component in components) {
if (currentPath != nil)
currentPath = [currentPath
stringByAppendingFormat: @"/%@", component];
else
currentPath = component;
URL.URLEncodedPath = currentPath;
if (currentPath.length > 0 &&
![self directoryExistsAtURL: URL])
[self createDirectoryAtURL: URL];
}
objc_autoreleasePoolPop(pool);
}
|
︙ | | | ︙ | |
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
|
- (void)changeCurrentDirectoryPath: (OFString *)path
{
if (path == nil)
@throw [OFInvalidArgumentException exception];
#if defined(OF_WINDOWS)
if (_wchdir([path UTF16String]) != 0)
@throw [OFChangeCurrentDirectoryPathFailedException
exceptionWithPath: path
errNo: errno];
#elif defined(OF_AMIGAOS)
BPTR lock, oldLock;
if ((lock = Lock([path cStringWithEncoding: [OFLocale encoding]],
|
|
|
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
|
- (void)changeCurrentDirectoryPath: (OFString *)path
{
if (path == nil)
@throw [OFInvalidArgumentException exception];
#if defined(OF_WINDOWS)
if (_wchdir(path.UTF16String) != 0)
@throw [OFChangeCurrentDirectoryPathFailedException
exceptionWithPath: path
errNo: errno];
#elif defined(OF_AMIGAOS)
BPTR lock, oldLock;
if ((lock = Lock([path cStringWithEncoding: [OFLocale encoding]],
|
︙ | | | ︙ | |
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
|
#endif
}
- (void)changeCurrentDirectoryURL: (OFURL *)URL
{
void *pool = objc_autoreleasePoolPush();
[self changeCurrentDirectoryPath: [URL fileSystemRepresentation]];
objc_autoreleasePoolPop(pool);
}
- (void)copyItemAtPath: (OFString *)source
toPath: (OFString *)destination
{
|
|
|
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
|
#endif
}
- (void)changeCurrentDirectoryURL: (OFURL *)URL
{
void *pool = objc_autoreleasePoolPush();
[self changeCurrentDirectoryPath: URL.fileSystemRepresentation];
objc_autoreleasePoolPop(pool);
}
- (void)copyItemAtPath: (OFString *)source
toPath: (OFString *)destination
{
|
︙ | | | ︙ | |
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
|
@try {
attributes = [self attributesOfItemAtURL: source];
} @catch (OFRetrieveItemAttributesFailedException *e) {
@throw [OFCopyItemFailedException
exceptionWithSourceURL: source
destinationURL: destination
errNo: [e errNo]];
}
type = [attributes fileType];
if ([type isEqual: of_file_type_directory]) {
OFArray *contents;
@try {
[self createDirectoryAtURL: destination];
|
|
|
|
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
|
@try {
attributes = [self attributesOfItemAtURL: source];
} @catch (OFRetrieveItemAttributesFailedException *e) {
@throw [OFCopyItemFailedException
exceptionWithSourceURL: source
destinationURL: destination
errNo: e.errNo];
}
type = attributes.fileType;
if ([type isEqual: of_file_type_directory]) {
OFArray *contents;
@try {
[self createDirectoryAtURL: destination];
|
︙ | | | ︙ | |
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
|
sourceStream = [[OFURLHandler handlerForURL: source]
openItemAtURL: source
mode: @"r"];
destinationStream = [[OFURLHandler handlerForURL:
destination] openItemAtURL: destination
mode: @"w"];
while (![sourceStream isAtEndOfStream]) {
size_t length;
length = [sourceStream
readIntoBuffer: buffer
length: pageSize];
[destinationStream writeBuffer: buffer
length: length];
|
|
|
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
|
sourceStream = [[OFURLHandler handlerForURL: source]
openItemAtURL: source
mode: @"r"];
destinationStream = [[OFURLHandler handlerForURL:
destination] openItemAtURL: destination
mode: @"w"];
while (!sourceStream.atEndOfStream) {
size_t length;
length = [sourceStream
readIntoBuffer: buffer
length: pageSize];
[destinationStream writeBuffer: buffer
length: length];
|
︙ | | | ︙ | |
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
|
[destinationStream close];
free(buffer);
}
#ifdef OF_FILE_MANAGER_SUPPORTS_SYMLINKS
} else if ([type isEqual: of_file_type_symbolic_link]) {
@try {
OFString *linkDestination =
[attributes fileSymbolicLinkDestination];
[self createSymbolicLinkAtURL: destination
withDestinationPath: linkDestination];
} @catch (id e) {
/*
* Only convert exceptions to OFCopyItemFailedException
* that have an errNo property. This covers all I/O
|
|
|
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
|
[destinationStream close];
free(buffer);
}
#ifdef OF_FILE_MANAGER_SUPPORTS_SYMLINKS
} else if ([type isEqual: of_file_type_symbolic_link]) {
@try {
OFString *linkDestination =
attributes.fileSymbolicLinkDestination;
[self createSymbolicLinkAtURL: destination
withDestinationPath: linkDestination];
} @catch (id e) {
/*
* Only convert exceptions to OFCopyItemFailedException
* that have an errNo property. This covers all I/O
|
︙ | | | ︙ | |
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
|
exceptionWithURL: source];
@try {
if ([URLHandler moveItemAtURL: source
toURL: destination])
return;
} @catch (OFMoveItemFailedException *e) {
if ([e errNo] != EXDEV)
@throw e;
}
if ([self fileExistsAtURL: destination])
@throw [OFMoveItemFailedException
exceptionWithSourceURL: source
destinationURL: destination
errNo: EEXIST];
@try {
[self copyItemAtURL: source
toURL: destination];
} @catch (OFCopyItemFailedException *e) {
[self removeItemAtURL: destination];
@throw [OFMoveItemFailedException
exceptionWithSourceURL: source
destinationURL: destination
errNo: [e errNo]];
}
@try {
[self removeItemAtURL: source];
} @catch (OFRemoveItemFailedException *e) {
@throw [OFMoveItemFailedException
exceptionWithSourceURL: source
destinationURL: destination
errNo: [e errNo]];
}
objc_autoreleasePoolPop(pool);
}
- (void)removeItemAtURL: (OFURL *)URL
{
|
|
|
|
|
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
|
exceptionWithURL: source];
@try {
if ([URLHandler moveItemAtURL: source
toURL: destination])
return;
} @catch (OFMoveItemFailedException *e) {
if (e.errNo != EXDEV)
@throw e;
}
if ([self fileExistsAtURL: destination])
@throw [OFMoveItemFailedException
exceptionWithSourceURL: source
destinationURL: destination
errNo: EEXIST];
@try {
[self copyItemAtURL: source
toURL: destination];
} @catch (OFCopyItemFailedException *e) {
[self removeItemAtURL: destination];
@throw [OFMoveItemFailedException
exceptionWithSourceURL: source
destinationURL: destination
errNo: e.errNo];
}
@try {
[self removeItemAtURL: source];
} @catch (OFRemoveItemFailedException *e) {
@throw [OFMoveItemFailedException
exceptionWithSourceURL: source
destinationURL: destination
errNo: e.errNo];
}
objc_autoreleasePoolPop(pool);
}
- (void)removeItemAtURL: (OFURL *)URL
{
|
︙ | | | ︙ | |
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
|
{
void *pool = objc_autoreleasePoolPush();
OFURLHandler *URLHandler;
if (source == nil || destination == nil)
@throw [OFInvalidArgumentException exception];
if (![[destination scheme] isEqual: [source scheme]])
@throw [OFInvalidArgumentException exception];
URLHandler = [OFURLHandler handlerForURL: source];
if (URLHandler == nil)
@throw [OFUnsupportedProtocolException
exceptionWithURL: source];
|
|
|
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
|
{
void *pool = objc_autoreleasePoolPush();
OFURLHandler *URLHandler;
if (source == nil || destination == nil)
@throw [OFInvalidArgumentException exception];
if (![destination.scheme isEqual: source.scheme])
@throw [OFInvalidArgumentException exception];
URLHandler = [OFURLHandler handlerForURL: source];
if (URLHandler == nil)
@throw [OFUnsupportedProtocolException
exceptionWithURL: source];
|
︙ | | | ︙ | |