Overview
Comment: | Add +[OFFile moveItemAtPath:toPath:].
This replaces +[OFFile renameItemAtPath:toPath:] and supports moving |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
260391fc1c3035233c4270f267ad273e |
User & Date: | js on 2013-12-11 23:53:07 |
Other Links: | manifest | tags |
Context
2013-12-14
| ||
02:21 | Don't enter src/runtime/lookup-asm twice. check-in: f9693f45f3 user: js tags: trunk | |
2013-12-11
| ||
23:53 | Add +[OFFile moveItemAtPath:toPath:]. check-in: 260391fc1c user: js tags: trunk | |
22:26 | +[{copy,rename}ItemAtPath...]: Require full path. check-in: 242fd56445 user: js tags: trunk | |
Changes
Modified src/OFFile.h from [78bb0798b0] to [00385e02ec].
︙ | ︙ | |||
190 191 192 193 194 195 196 | * @param source The file, directory or symlink to copy * @param destination The destination path */ + (void)copyItemAtPath: (OFString*)source toPath: (OFString*)destination; /*! | | > > > > | | | 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | * @param source The file, directory or symlink to copy * @param destination The destination path */ + (void)copyItemAtPath: (OFString*)source toPath: (OFString*)destination; /*! * @brief Moves an item. * * The destination path must be a full path, which means it must include the * name of the item. * * If the destination is on a different logical device, the source will be * copied to the destination using @ref copyItemAtPath:toPath: and the source * removed using @ref removeItemAtPath:. * * @param source The item to rename * @param destination The new name for the item */ + (void)moveItemAtPath: (OFString*)source toPath: (OFString*)destination; /*! * @brief Removes the item at the specified path. * * If the item at the specified path is a directory, it is removed recursively. * * @param path The path to the item which should be removed |
︙ | ︙ |
Modified src/OFFile.m from [726f0b6ba9] to [95c6f11fb5].
︙ | ︙ | |||
63 64 65 66 67 68 69 70 71 72 73 | #import "OFCopyItemFailedException.h" #import "OFCreateDirectoryFailedException.h" #import "OFCreateSymbolicLinkFailedException.h" #import "OFInitializationFailedException.h" #import "OFInvalidArgumentException.h" #import "OFLinkFailedException.h" #import "OFLockFailedException.h" #import "OFOpenFileFailedException.h" #import "OFOutOfMemoryException.h" #import "OFReadFailedException.h" #import "OFRemoveItemFailedException.h" | > < | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #import "OFCopyItemFailedException.h" #import "OFCreateDirectoryFailedException.h" #import "OFCreateSymbolicLinkFailedException.h" #import "OFInitializationFailedException.h" #import "OFInvalidArgumentException.h" #import "OFLinkFailedException.h" #import "OFLockFailedException.h" #import "OFMoveItemFailedException.h" #import "OFOpenFileFailedException.h" #import "OFOutOfMemoryException.h" #import "OFReadFailedException.h" #import "OFRemoveItemFailedException.h" #import "OFSeekFailedException.h" #import "OFUnlockFailedException.h" #import "OFWriteFailedException.h" #import "autorelease.h" #import "macros.h" |
︙ | ︙ | |||
661 662 663 664 665 666 667 | @throw [OFCopyItemFailedException exceptionWithSourcePath: source destinationPath: destination]; objc_autoreleasePoolPop(pool); } | | | > > > > > > > > > > > > > > > > > | | > | | | > > > > > > > > > > > > > > > > > > > | 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 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 729 730 | @throw [OFCopyItemFailedException exceptionWithSourcePath: source destinationPath: destination]; objc_autoreleasePoolPop(pool); } + (void)moveItemAtPath: (OFString*)source toPath: (OFString*)destination { void *pool; #ifndef _WIN32 struct stat s; #else struct _stat s; #endif if (source == nil || destination == nil) @throw [OFInvalidArgumentException exception]; pool = objc_autoreleasePoolPush(); #ifndef _WIN32 if (lstat([destination cStringWithEncoding: OF_STRING_ENCODING_NATIVE], &s) == 0) { #else if (_wstat([destination UTF16String], &s) == 0) { #endif errno = EEXIST; @throw [OFCopyItemFailedException exceptionWithSourcePath: source destinationPath: destination]; } #ifndef _WIN32 if (rename([source cStringWithEncoding: OF_STRING_ENCODING_NATIVE], [destination cStringWithEncoding: OF_STRING_ENCODING_NATIVE])) { #else if (_wrename([source UTF16String], [destination UTF16String])) { #endif if (errno != EXDEV) @throw [OFMoveItemFailedException exceptionWithSourcePath: source destinationPath: destination]; @try { [OFFile copyItemAtPath: source toPath: destination]; } @catch (OFCopyItemFailedException *e) { [OFFile removeItemAtPath: destination]; @throw [OFMoveItemFailedException exceptionWithSourcePath: source destinationPath: destination]; } @try { [OFFile removeItemAtPath: source]; } @catch (OFRemoveItemFailedException *e) { @throw [OFMoveItemFailedException exceptionWithSourcePath: source destinationPath: destination]; } } objc_autoreleasePoolPop(pool); } + (void)removeItemAtPath: (OFString*)path { void *pool; |
︙ | ︙ |
Modified src/exceptions/Makefile from [8ebf1a51cc] to [7d7ccc279a].
︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 | OFInvalidFormatException.m \ OFInvalidJSONException.m \ OFInvalidServerReplyException.m \ OFLinkFailedException.m \ OFLockFailedException.m \ OFMalformedXMLException.m \ OFMemoryNotPartOfObjectException.m \ OFNotImplementedException.m \ OFOpenFileFailedException.m \ OFOutOfMemoryException.m \ OFOutOfRangeException.m \ OFReadFailedException.m \ OFReadOrWriteFailedException.m \ OFRemoveItemFailedException.m \ | > < | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | OFInvalidFormatException.m \ OFInvalidJSONException.m \ OFInvalidServerReplyException.m \ OFLinkFailedException.m \ OFLockFailedException.m \ OFMalformedXMLException.m \ OFMemoryNotPartOfObjectException.m \ OFMoveItemFailedException.m \ OFNotImplementedException.m \ OFOpenFileFailedException.m \ OFOutOfMemoryException.m \ OFOutOfRangeException.m \ OFReadFailedException.m \ OFReadOrWriteFailedException.m \ OFRemoveItemFailedException.m \ OFSeekFailedException.m \ OFSetOptionFailedException.m \ OFStillLockedException.m \ OFTruncatedDataException.m \ OFUnboundNamespaceException.m \ OFUnboundPrefixException.m \ OFUnlockFailedException.m \ |
︙ | ︙ |
Added src/exceptions/OFMoveItemFailedException.h version [a4f8b8376a].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 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 63 64 65 66 67 68 69 70 71 72 73 74 75 | /* * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include <errno.h> #import "OFException.h" /*! * @brief An exception indicating that moving an item failed. */ @interface OFMoveItemFailedException: OFException { OFString *_sourcePath, *_destinationPath; int _errNo; } #ifdef OF_HAVE_PROPERTIES @property (readonly, copy) OFString *sourcePath, *destinationPath; @property (readonly) int errNo; #endif /*! * @brief Creates a new, autoreleased move item failed exception. * * @param sourcePath The original path * @param destinationPath The new path * @return A new, autoreleased move item failed exception */ + (instancetype)exceptionWithSourcePath: (OFString*)sourcePath destinationPath: (OFString*)destinationPath; /*! * @brief Initializes an already allocated move item failed exception. * * @param sourcePath The original path * @param destinationPath The new path * @return An initialized move item failed exception */ - initWithSourcePath: (OFString*)sourcePath destinationPath: (OFString*)destinationPath; /*! * @brief Returns the original path. * * @return The original path */ - (OFString*)sourcePath; /*! * @brief Returns the new path. * * @return The new path */ - (OFString*)destinationPath; /*! * @brief Returns the errno from when the exception was created. * * @return The errno from when the exception was created */ - (int)errNo; @end |
Added src/exceptions/OFMoveItemFailedException.m version [e630c0adf7].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | /* * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #import "OFMoveItemFailedException.h" #import "OFString.h" #import "common.h" #import "macros.h" @implementation OFMoveItemFailedException + (instancetype)exceptionWithSourcePath: (OFString*)sourcePath destinationPath: (OFString*)destinationPath { return [[[self alloc] initWithSourcePath: sourcePath destinationPath: destinationPath] autorelease]; } - init { OF_INVALID_INIT_METHOD } - initWithSourcePath: (OFString*)sourcePath destinationPath: (OFString*)destinationPath { self = [super init]; @try { _sourcePath = [sourcePath copy]; _destinationPath = [destinationPath copy]; _errNo = GET_ERRNO; } @catch (id e) { [self release]; @throw e; } return self; } - (void)dealloc { [_sourcePath release]; [_destinationPath release]; [super dealloc]; } - (OFString*)description { return [OFString stringWithFormat: @"Failed to move item at path %@ to %@! " ERRFMT, _sourcePath, _destinationPath, ERRPARAM]; } - (OFString*)sourcePath { OF_GETTER(_sourcePath, true) } - (OFString*)destinationPath { OF_GETTER(_destinationPath, true) } - (int)errNo { return _errNo; } @end |
Deleted src/exceptions/OFRenameItemFailedException.h version [c4ff526794].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted src/exceptions/OFRenameItemFailedException.m version [3a8ee84e77].
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |