diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49ea3a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +FTPKit.xcodeproj/project.xcworkspace/xcuserdata/*.xcuserdatad +FTPKit.xcodeproj/xcuserdata/*.xcuserdatad/ \ No newline at end of file diff --git a/Changelog b/Changelog deleted file mode 100644 index d0b6bf5..0000000 --- a/Changelog +++ /dev/null @@ -1,11 +0,0 @@ -Weid, Nov 12 2014 -- v1.3.1 -======================================== -Fixed -+ Server error messages are now being captured and returned, rather than -guessing what the error is. - -Sun, May 25 2014 -- v1.3.0 -======================================== -New -+ It is no longer necessary to URL encode paths before making calls to library; -as all paths are now URL encoded internally. diff --git a/FTPKit Tests/FTPKit Tests-Info.plist b/FTPKit Tests/FTPKit Tests-Info.plist index 53c8404..169b6f7 100644 --- a/FTPKit Tests/FTPKit Tests-Info.plist +++ b/FTPKit Tests/FTPKit Tests-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.upstart-illustration-llc.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType diff --git a/FTPKit.podspec b/FTPKit.podspec new file mode 100644 index 0000000..aef50dd --- /dev/null +++ b/FTPKit.podspec @@ -0,0 +1,16 @@ +Pod::Spec.new do |s| + + s.name = 'FTPKit' + s.version = '1.3.6' + s.license = 'MIT' + s.summary = 'FTP Transfer Library' + s.homepage = 'https://github.com/omniprojects/FTPKit' + s.author = { 'Omni Projects Inc.' => 'dev@beomni.com' } + + s.source = { :git => 'https://github.com/omniprojects/FTPKit.git', :tag => '1.3.6' } + s.description = 'FTP Transfer Library' + + s.source_files = 'FTPKit/**/*.{h,m,pch}', 'Libraries/**/ftplib.{c,h}' + s.frameworks = 'Foundation' + +end diff --git a/FTPKit.xcodeproj/project.pbxproj b/FTPKit.xcodeproj/project.pbxproj index a6ddf87..7a0cc67 100644 --- a/FTPKit.xcodeproj/project.pbxproj +++ b/FTPKit.xcodeproj/project.pbxproj @@ -69,10 +69,11 @@ 07F23C5218CA4C43002BDF93 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 07F23C5418CA4C43002BDF93 /* FTPKit_Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FTPKit_Tests.m; sourceTree = ""; }; 07F23C5618CA4C43002BDF93 /* FTPKit Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FTPKit Tests-Prefix.pch"; sourceTree = ""; }; + C9FA3ECA1D91E0D5004ACB9B /* FTPKit.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FTPKit.podspec; sourceTree = ""; }; F27BA1CE1802FE7E00584A9E /* libFTPKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libFTPKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; F27BA1D11802FE7E00584A9E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; F27BA1D51802FE7E00584A9E /* FTPKit-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FTPKit-Prefix.pch"; sourceTree = ""; }; - F27BA1D61802FE7E00584A9E /* FTPKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FTPKit.h; sourceTree = ""; }; + F27BA1D61802FE7E00584A9E /* FTPKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FTPKit.h; path = FTPKit/FTPKit.h; sourceTree = SOURCE_ROOT; }; F27BA1F71802FF1800584A9E /* FTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FTPClient.h; sourceTree = ""; }; F27BA1F81802FF1800584A9E /* FTPClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FTPClient.m; sourceTree = ""; }; F27BA1FB1802FF1800584A9E /* FTPHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FTPHandle.h; sourceTree = ""; }; @@ -162,6 +163,7 @@ F27BA1C51802FE7E00584A9E = { isa = PBXGroup; children = ( + C9FA3ECA1D91E0D5004ACB9B /* FTPKit.podspec */, F27BA1D31802FE7E00584A9E /* FTPKit */, 07F23C4E18CA4C43002BDF93 /* FTPKit Tests */, F27BA1D01802FE7E00584A9E /* Frameworks */, @@ -258,7 +260,7 @@ F27BA1C61802FE7E00584A9E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0510; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Upstart Illustration LLC"; TargetAttributes = { 07F23C4718CA4C43002BDF93 = { @@ -355,6 +357,7 @@ "$(inherited)", ); INFOPLIST_FILE = "FTPKit Tests/FTPKit Tests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.upstart-illustration-llc.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = xctest; }; @@ -372,11 +375,109 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "FTPKit Tests/FTPKit Tests-Prefix.pch"; INFOPLIST_FILE = "FTPKit Tests/FTPKit Tests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.upstart-illustration-llc.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = xctest; }; name = Release; }; + 42B96CA21C751C57008405E1 /* Develop */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = NO; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "-ObjC", + "-all_load", + ); + SDKROOT = iphoneos; + }; + name = Develop; + }; + 42B96CA31C751C57008405E1 /* Develop */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = NO; + CLANG_ENABLE_OBJC_ARC = YES; + CURRENT_PROJECT_VERSION = 1.0.0; + DEAD_CODE_STRIPPING = YES; + DSTROOT = /tmp/FTPKit.dst; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "FTPKit/FTPKit-Prefix.pch"; + INSTALL_PATH = /usr/local/lib; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + LINK_WITH_STANDARD_LIBRARIES = YES; + MACH_O_TYPE = staticlib; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include; + PRODUCT_NAME = FTPKit; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include; + SEPARATE_STRIP = YES; + SKIP_INSTALL = YES; + STRIP_STYLE = debugging; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = ""; + }; + name = Develop; + }; + 42B96CA41C751C57008405E1 /* Develop */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "FTPKit Tests/FTPKit Tests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "FTPKit Tests/FTPKit Tests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "com.upstart-illustration-llc.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = xctest; + }; + name = Develop; + }; F27BA1EF1802FE7E00584A9E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -390,12 +491,18 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -408,7 +515,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "-ObjC", @@ -431,19 +538,24 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_LDFLAGS = ( "-ObjC", "-all_load", @@ -517,6 +629,7 @@ isa = XCConfigurationList; buildConfigurations = ( 07F23C5918CA4C43002BDF93 /* Debug */, + 42B96CA41C751C57008405E1 /* Develop */, 07F23C5A18CA4C43002BDF93 /* Release */, ); defaultConfigurationIsVisible = 0; @@ -526,6 +639,7 @@ isa = XCConfigurationList; buildConfigurations = ( F27BA1EF1802FE7E00584A9E /* Debug */, + 42B96CA21C751C57008405E1 /* Develop */, F27BA1F01802FE7E00584A9E /* Release */, ); defaultConfigurationIsVisible = 0; @@ -535,6 +649,7 @@ isa = XCConfigurationList; buildConfigurations = ( F27BA1F21802FE7E00584A9E /* Debug */, + 42B96CA31C751C57008405E1 /* Develop */, F27BA1F31802FE7E00584A9E /* Release */, ); defaultConfigurationIsVisible = 0; diff --git a/FTPKit.xcodeproj/xcuserdata/johnb.xcuserdatad/xcschemes/FTPKit.xcscheme b/FTPKit.xcodeproj/xcuserdata/johnb.xcuserdatad/xcschemes/FTPKit.xcscheme new file mode 100644 index 0000000..0ad026b --- /dev/null +++ b/FTPKit.xcodeproj/xcuserdata/johnb.xcuserdatad/xcschemes/FTPKit.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FTPKit.xcodeproj/xcuserdata/johnb.xcuserdatad/xcschemes/xcschememanagement.plist b/FTPKit.xcodeproj/xcuserdata/johnb.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..54feec4 --- /dev/null +++ b/FTPKit.xcodeproj/xcuserdata/johnb.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + FTPKit.xcscheme + + orderHint + 14 + + + SuppressBuildableAutocreation + + 07F23C4718CA4C43002BDF93 + + primary + + + F27BA1CD1802FE7E00584A9E + + primary + + + + + diff --git a/FTPKit/FTPClient.m b/FTPKit/FTPClient.m index ea0eb21..2269623 100644 --- a/FTPKit/FTPClient.m +++ b/FTPKit/FTPClient.m @@ -8,7 +8,7 @@ @interface FTPClient () @property (nonatomic, strong) FTPCredentials* credentials; /** Queue used to enforce requests to process in synchronous order. */ -@property (nonatomic, strong) dispatch_queue_t queue; +@property (nonatomic) dispatch_queue_t queue; /** The last error encountered. */ @property (nonatomic, strong) NSError *lastError; diff --git a/FTPKit/FTPCredentials.h b/FTPKit/FTPCredentials.h index 4194e45..e7bf9e4 100644 --- a/FTPKit/FTPCredentials.h +++ b/FTPKit/FTPCredentials.h @@ -1,3 +1,4 @@ +#import @interface FTPCredentials : NSObject @@ -37,4 +38,4 @@ */ - (NSURL *)urlForPath:(NSString *)path; -@end \ No newline at end of file +@end diff --git a/FTPKit/FTPHandle.h b/FTPKit/FTPHandle.h index 09a022c..f916734 100644 --- a/FTPKit/FTPHandle.h +++ b/FTPKit/FTPHandle.h @@ -1,3 +1,5 @@ +#import + typedef enum { FTPHandleTypeUnknown = 0, FTPHandleTypeFIFO = 1, diff --git a/Libraries/include/ftplib/src/ftplib.c b/Libraries/include/ftplib/src/ftplib.c index de617c1..6c7c0a9 100644 --- a/Libraries/include/ftplib/src/ftplib.c +++ b/Libraries/include/ftplib/src/ftplib.c @@ -97,9 +97,6 @@ struct NetBuf { char response[RESPONSE_BUFSIZ]; }; -static char *version = - "ftplib Release 4.0 07-Jun-2013, copyright 1996-2003, 2013 Thomas Pfau"; - GLOBALDEF int ftplib_debug = 3; #if defined(NEED_STRDUP) @@ -388,7 +385,7 @@ static int readline(char *buf, int max, netbuf *ctl) x = (max >= ctl->cavail) ? ctl->cavail : max-1; end = memccpy(bp,ctl->cget,'\n',x); if (end != NULL) - x = end - bp; + x = (int)(end - bp); retval += x; bp += x; *bp = '\0'; @@ -1436,7 +1433,7 @@ static int FtpXfer(const char *localfile, const char *path, dbuf = malloc(FTPLIB_BUFSIZ); if (typ == FTPLIB_FILE_WRITE) { - while ((l = fread(dbuf, 1, FTPLIB_BUFSIZ, local)) > 0) + while ((l = (int)fread(dbuf, 1, FTPLIB_BUFSIZ, local)) > 0) { if ((c = FtpWrite(dbuf, l, nData)) < l) { diff --git a/Libraries/include/ftplib/src/ftplib.h b/Libraries/include/ftplib/src/ftplib.h index 7f9616a..ce89fbf 100644 --- a/Libraries/include/ftplib/src/ftplib.h +++ b/Libraries/include/ftplib/src/ftplib.h @@ -33,7 +33,79 @@ #endif #include -#include +#if defined(_MSC_VER) && _MSC_VER < 1900 +/* MSVC headers define int32_t as int, but PRIx32 as "lx" instead of "x". + * This triggers format warnings, so fix it up here. */ +#undef PRId32 +#undef PRIdLEAST32 +#undef PRIdFAST32 +#undef PRIi32 +#undef PRIiLEAST32 +#undef PRIiFAST32 +#undef PRIo32 +#undef PRIoLEAST32 +#undef PRIoFAST32 +#undef PRIu32 +#undef PRIuLEAST32 +#undef PRIuFAST32 +#undef PRIx32 +#undef PRIxLEAST32 +#undef PRIxFAST32 +#undef PRIX32 +#undef PRIXLEAST32 +#undef PRIXFAST32 + +#undef SCNd32 +#undef SCNdLEAST32 +#undef SCNdFAST32 +#undef SCNi32 +#undef SCNiLEAST32 +#undef SCNiFAST32 +#undef SCNo32 +#undef SCNoLEAST32 +#undef SCNoFAST32 +#undef SCNu32 +#undef SCNuLEAST32 +#undef SCNuFAST32 +#undef SCNx32 +#undef SCNxLEAST32 +#undef SCNxFAST32 + +#define PRId32 "d" +#define PRIdLEAST32 "d" +#define PRIdFAST32 "d" +#define PRIi32 "i" +#define PRIiLEAST32 "i" +#define PRIiFAST32 "i" +#define PRIo32 "o" +#define PRIoLEAST32 "o" +#define PRIoFAST32 "o" +#define PRIu32 "u" +#define PRIuLEAST32 "u" +#define PRIuFAST32 "u" +#define PRIx32 "x" +#define PRIxLEAST32 "x" +#define PRIxFAST32 "x" +#define PRIX32 "X" +#define PRIXLEAST32 "X" +#define PRIXFAST32 "X" + +#define SCNd32 "d" +#define SCNdLEAST32 "d" +#define SCNdFAST32 "d" +#define SCNi32 "i" +#define SCNiLEAST32 "i" +#define SCNiFAST32 "i" +#define SCNo32 "o" +#define SCNoLEAST32 "o" +#define SCNoFAST32 "o" +#define SCNu32 "u" +#define SCNuLEAST32 "u" +#define SCNuFAST32 "u" +#define SCNx32 "x" +#define SCNxLEAST32 "x" +#define SCNxFAST32 "x" +#endif /* FtpAccess() type codes */ #define FTPLIB_DIR 1