|
From: <set...@us...> - 2009-05-29 15:40:33
|
Revision: 1801
http://frontierkernel.svn.sourceforge.net/frontierkernel/?rev=1801&view=rev
Author: sethdill
Date: 2009-05-29 15:40:26 +0000 (Fri, 29 May 2009)
Log Message:
-----------
Added FSCopyObject from trunk to the Conversant branch. Still vainly trying to sync up.
Added Paths:
-----------
Frontier/branches/Conversant/Common/FSCopyObject/
Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.mcp
Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.pbproj/
Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.pbproj/project.pbxproj
Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcode/
Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcode/project.pbxproj
Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcodeproj/
Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcodeproj/project.pbxproj
Frontier/branches/Conversant/Common/FSCopyObject/ReadMe.txt
Frontier/branches/Conversant/Common/FSCopyObject/Sources/
Frontier/branches/Conversant/Common/FSCopyObject/Sources/ConsoleSIOUX.plc
Frontier/branches/Conversant/Common/FSCopyObject/Sources/FSCopyObject.c
Frontier/branches/Conversant/Common/FSCopyObject/Sources/FSCopyObject.h
Frontier/branches/Conversant/Common/FSCopyObject/Sources/GenLinkedList.c
Frontier/branches/Conversant/Common/FSCopyObject/Sources/GenLinkedList.h
Frontier/branches/Conversant/Common/FSCopyObject/Sources/HelloWorld.c
Frontier/branches/Conversant/Common/FSCopyObject/Sources/HelloWorldTool.c
Frontier/branches/Conversant/Common/FSCopyObject/Sources/carb.r
Added: Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.mcp
===================================================================
(Binary files differ)
Property changes on: Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.mcp
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.pbproj/project.pbxproj
===================================================================
--- Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.pbproj/project.pbxproj (rev 0)
+++ Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.pbproj/project.pbxproj 2009-05-29 15:40:26 UTC (rev 1801)
@@ -0,0 +1,284 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 38;
+ objects = {
+ 014CEA4C0018CE3E11CA2923 = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ OPTIMIZATION_CFLAGS = "-O0";
+ };
+ isa = PBXBuildStyle;
+ name = Development;
+ };
+//010
+//011
+//012
+//013
+//014
+//030
+//031
+//032
+//033
+//034
+ 034768E4FF38A6EB11DB9C8B = {
+ isa = PBXExecutableFileReference;
+ path = FSCopyObject_PB_D;
+ refType = 3;
+ };
+//030
+//031
+//032
+//033
+//034
+//080
+//081
+//082
+//083
+//084
+ 08FB7793FE84155DC02AAC07 = {
+ buildStyles = (
+ 014CEA4C0018CE3E11CA2923,
+ );
+ hasScannedForEncodings = 1;
+ isa = PBXProject;
+ mainGroup = 08FB7794FE84155DC02AAC07;
+ projectDirPath = "";
+ targets = (
+ 08FB779FFE84155DC02AAC07,
+ );
+ };
+ 08FB7794FE84155DC02AAC07 = {
+ children = (
+ 08FB7795FE84155DC02AAC07,
+ 08FB779DFE84155DC02AAC07,
+ 1A8B4A8EFE9D542A11CA2CBB,
+ );
+ isa = PBXGroup;
+ name = FSCopyObject;
+ refType = 4;
+ };
+ 08FB7795FE84155DC02AAC07 = {
+ children = (
+ FBA28BC503EF74A90DC9188A,
+ FB5C175F03EF56350DC9188A,
+ FB5C176103EF56390DC9188A,
+ F5D86944046F9D9601E12ADD,
+ F5D86946046F9D9C01E12ADD,
+ );
+ isa = PBXGroup;
+ name = Source;
+ refType = 4;
+ };
+ 08FB779DFE84155DC02AAC07 = {
+ children = (
+ FB5C185003EF56860DC9188A,
+ );
+ isa = PBXGroup;
+ name = "External Frameworks and Libraries";
+ refType = 4;
+ };
+ 08FB779FFE84155DC02AAC07 = {
+ buildPhases = (
+ 08FB77A0FE84155DC02AAC07,
+ 08FB77A1FE84155DC02AAC07,
+ 08FB77A3FE84155DC02AAC07,
+ 08FB77A5FE84155DC02AAC07,
+ C6859E9E029092A704C91782,
+ );
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = "";
+ HEADER_SEARCH_PATHS = "";
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = FSCopyObject_PB_D;
+ REZ_EXECUTABLE = YES;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ };
+ dependencies = (
+ );
+ isa = PBXToolTarget;
+ name = FSCopyObject;
+ productInstallPath = "$(HOME)/bin";
+ productName = FSCopyObject;
+ productReference = 034768E4FF38A6EB11DB9C8B;
+ };
+ 08FB77A0FE84155DC02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ FB5C176203EF56390DC9188A,
+ F5D86947046F9D9C01E12ADD,
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08FB77A1FE84155DC02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ FB5C176003EF56350DC9188A,
+ FBA28BC603EF74A90DC9188A,
+ F5D86945046F9D9601E12ADD,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08FB77A3FE84155DC02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ FB5C191E03EF56860DC9188A,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08FB77A5FE84155DC02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+//080
+//081
+//082
+//083
+//084
+//1A0
+//1A1
+//1A2
+//1A3
+//1A4
+ 1A8B4A8EFE9D542A11CA2CBB = {
+ children = (
+ 034768E4FF38A6EB11DB9C8B,
+ );
+ isa = PBXGroup;
+ name = Products;
+ refType = 4;
+ };
+//1A0
+//1A1
+//1A2
+//1A3
+//1A4
+//C60
+//C61
+//C62
+//C63
+//C64
+ C6859E9E029092A704C91782 = {
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ isa = PBXCopyFilesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+//C60
+//C61
+//C62
+//C63
+//C64
+//F50
+//F51
+//F52
+//F53
+//F54
+ F5D86944046F9D9601E12ADD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = GenLinkedList.c;
+ path = Sources/GenLinkedList.c;
+ refType = 4;
+ };
+ F5D86945046F9D9601E12ADD = {
+ fileRef = F5D86944046F9D9601E12ADD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F5D86946046F9D9C01E12ADD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = GenLinkedList.h;
+ path = Sources/GenLinkedList.h;
+ refType = 4;
+ };
+ F5D86947046F9D9C01E12ADD = {
+ fileRef = F5D86946046F9D9C01E12ADD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+//F50
+//F51
+//F52
+//F53
+//F54
+//FB0
+//FB1
+//FB2
+//FB3
+//FB4
+ FB5C175F03EF56350DC9188A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = FSCopyObject.c;
+ path = Sources/FSCopyObject.c;
+ refType = 4;
+ };
+ FB5C176003EF56350DC9188A = {
+ fileRef = FB5C175F03EF56350DC9188A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ FB5C176103EF56390DC9188A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = FSCopyObject.h;
+ path = Sources/FSCopyObject.h;
+ refType = 4;
+ };
+ FB5C176203EF56390DC9188A = {
+ fileRef = FB5C176103EF56390DC9188A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ FB5C185003EF56860DC9188A = {
+ isa = PBXFrameworkReference;
+ name = CoreServices.framework;
+ path = /System/Library/Frameworks/CoreServices.framework;
+ refType = 0;
+ };
+ FB5C191E03EF56860DC9188A = {
+ fileRef = FB5C185003EF56860DC9188A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ FBA28BC503EF74A90DC9188A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = HelloWorldTool.c;
+ path = Sources/HelloWorldTool.c;
+ refType = 4;
+ };
+ FBA28BC603EF74A90DC9188A = {
+ fileRef = FBA28BC503EF74A90DC9188A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ };
+ rootObject = 08FB7793FE84155DC02AAC07;
+}
Property changes on: Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.pbproj/project.pbxproj
___________________________________________________________________
Added: svn:executable
+ *
Added: Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcode/project.pbxproj
===================================================================
--- Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcode/project.pbxproj (rev 0)
+++ Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcode/project.pbxproj 2009-05-29 15:40:26 UTC (rev 1801)
@@ -0,0 +1,321 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 39;
+ objects = {
+ 014CEA4C0018CE3E11CA2923 = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ DEBUGGING_SYMBOLS = YES;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ OPTIMIZATION_CFLAGS = "-O0";
+ };
+ isa = PBXBuildStyle;
+ name = Development;
+ };
+ 014CEA4D0018CE3E11CA2923 = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ };
+ isa = PBXBuildStyle;
+ name = Deployment;
+ };
+//010
+//011
+//012
+//013
+//014
+//080
+//081
+//082
+//083
+//084
+ 08FB7793FE84155DC02AAC07 = {
+ buildSettings = {
+ };
+ buildStyles = (
+ 014CEA4C0018CE3E11CA2923,
+ 014CEA4D0018CE3E11CA2923,
+ );
+ hasScannedForEncodings = 1;
+ isa = PBXProject;
+ mainGroup = 08FB7794FE84155DC02AAC07;
+ projectDirPath = "";
+ targets = (
+ 8DD76F840486A9BA00D96B5E,
+ );
+ };
+ 08FB7794FE84155DC02AAC07 = {
+ children = (
+ 08FB7795FE84155DC02AAC07,
+ 08FB779DFE84155DC02AAC07,
+ 1A8B4A8EFE9D542A11CA2CBB,
+ );
+ isa = PBXGroup;
+ name = FSCopyObject_X_D;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 = {
+ children = (
+ D453246005B3E83B007EC99B,
+ D453246105B3E83B007EC99B,
+ D453246205B3E83B007EC99B,
+ D453246305B3E83B007EC99B,
+ D453246405B3E83B007EC99B,
+ );
+ isa = PBXGroup;
+ name = Source;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ 08FB779DFE84155DC02AAC07 = {
+ children = (
+ 097DBE83FE8419DDC02AAC07,
+ );
+ isa = PBXGroup;
+ name = "External Frameworks and Libraries";
+ refType = 4;
+ sourceTree = "<group>";
+ };
+//080
+//081
+//082
+//083
+//084
+//090
+//091
+//092
+//093
+//094
+ 097DBE83FE8419DDC02AAC07 = {
+ fallbackIsa = PBXFileReference;
+ isa = PBXFrameworkReference;
+ lastKnownFileType = wrapper.framework;
+ name = CoreServices.framework;
+ path = /System/Library/Frameworks/CoreServices.framework;
+ refType = 0;
+ sourceTree = "<absolute>";
+ };
+//090
+//091
+//092
+//093
+//094
+//1A0
+//1A1
+//1A2
+//1A3
+//1A4
+ 1A8B4A8EFE9D542A11CA2CBB = {
+ children = (
+ 8DD76F8E0486A9BA00D96B5E,
+ );
+ isa = PBXGroup;
+ name = Products;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+//1A0
+//1A1
+//1A2
+//1A3
+//1A4
+//8D0
+//8D1
+//8D2
+//8D3
+//8D4
+ 8DD76F840486A9BA00D96B5E = {
+ buildPhases = (
+ 8DD76F850486A9BA00D96B5E,
+ 8DD76F860486A9BA00D96B5E,
+ 8DD76F880486A9BA00D96B5E,
+ 8DD76F8A0486A9BA00D96B5E,
+ 8DD76F8B0486A9BA00D96B5E,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = NO;
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ HEADER_SEARCH_PATHS = "";
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = FSCopyObject_X_D;
+ REZ_EXECUTABLE = YES;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ };
+ dependencies = (
+ );
+ isa = PBXNativeTarget;
+ name = FSCopyObject;
+ productInstallPath = "$(HOME)/bin";
+ productName = FSCopyObject_X_D;
+ productReference = 8DD76F8E0486A9BA00D96B5E;
+ productType = "com.apple.product-type.tool";
+ };
+ 8DD76F850486A9BA00D96B5E = {
+ buildActionMask = 2147483647;
+ files = (
+ D453246605B3E83B007EC99B,
+ D453246805B3E83B007EC99B,
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8DD76F860486A9BA00D96B5E = {
+ buildActionMask = 2147483647;
+ files = (
+ D453246505B3E83B007EC99B,
+ D453246705B3E83B007EC99B,
+ D453246905B3E83B007EC99B,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8DD76F880486A9BA00D96B5E = {
+ buildActionMask = 2147483647;
+ files = (
+ 8DD76F890486A9BA00D96B5E,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8DD76F890486A9BA00D96B5E = {
+ fileRef = 097DBE83FE8419DDC02AAC07;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8DD76F8A0486A9BA00D96B5E = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8DD76F8B0486A9BA00D96B5E = {
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ isa = PBXCopyFilesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 8DD76F8E0486A9BA00D96B5E = {
+ explicitFileType = "compiled.mach-o.executable";
+ includeInIndex = 0;
+ isa = PBXFileReference;
+ path = FSCopyObject_X_D;
+ refType = 3;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+//8D0
+//8D1
+//8D2
+//8D3
+//8D4
+//D40
+//D41
+//D42
+//D43
+//D44
+ D453246005B3E83B007EC99B = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.c;
+ name = FSCopyObject.c;
+ path = Sources/FSCopyObject.c;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ D453246105B3E83B007EC99B = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = FSCopyObject.h;
+ path = Sources/FSCopyObject.h;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ D453246205B3E83B007EC99B = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.c;
+ name = GenLinkedList.c;
+ path = Sources/GenLinkedList.c;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ D453246305B3E83B007EC99B = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = GenLinkedList.h;
+ path = Sources/GenLinkedList.h;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ D453246405B3E83B007EC99B = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.c;
+ name = HelloWorldTool.c;
+ path = Sources/HelloWorldTool.c;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ D453246505B3E83B007EC99B = {
+ fileRef = D453246005B3E83B007EC99B;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ D453246605B3E83B007EC99B = {
+ fileRef = D453246105B3E83B007EC99B;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ D453246705B3E83B007EC99B = {
+ fileRef = D453246205B3E83B007EC99B;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ D453246805B3E83B007EC99B = {
+ fileRef = D453246305B3E83B007EC99B;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ D453246905B3E83B007EC99B = {
+ fileRef = D453246405B3E83B007EC99B;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ };
+ rootObject = 08FB7793FE84155DC02AAC07;
+}
Property changes on: Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcode/project.pbxproj
___________________________________________________________________
Added: svn:executable
+ *
Added: Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcodeproj/project.pbxproj
===================================================================
--- Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcodeproj/project.pbxproj (rev 0)
+++ Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcodeproj/project.pbxproj 2009-05-29 15:40:26 UTC (rev 1801)
@@ -0,0 +1,350 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8DD76F890486A9BA00D96B5E /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097DBE83FE8419DDC02AAC07 /* CoreServices.framework */; };
+ D453246505B3E83B007EC99B /* FSCopyObject.c in Sources */ = {isa = PBXBuildFile; fileRef = D453246005B3E83B007EC99B /* FSCopyObject.c */; };
+ D453246605B3E83B007EC99B /* FSCopyObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D453246105B3E83B007EC99B /* FSCopyObject.h */; };
+ D453246705B3E83B007EC99B /* GenLinkedList.c in Sources */ = {isa = PBXBuildFile; fileRef = D453246205B3E83B007EC99B /* GenLinkedList.c */; };
+ D453246805B3E83B007EC99B /* GenLinkedList.h in Headers */ = {isa = PBXBuildFile; fileRef = D453246305B3E83B007EC99B /* GenLinkedList.h */; };
+ D453246905B3E83B007EC99B /* HelloWorldTool.c in Sources */ = {isa = PBXBuildFile; fileRef = D453246405B3E83B007EC99B /* HelloWorldTool.c */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXBuildStyle section */
+ 014CEA4C0018CE3E11CA2923 /* Development */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ DEBUGGING_SYMBOLS = YES;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ OPTIMIZATION_CFLAGS = "-O0";
+ };
+ name = Development;
+ };
+ 014CEA4D0018CE3E11CA2923 /* Deployment */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ };
+ name = Deployment;
+ };
+/* End PBXBuildStyle section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F8B0486A9BA00D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 097DBE83FE8419DDC02AAC07 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
+ 8DD76F8E0486A9BA00D96B5E /* FSCopyObject_X_D */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = FSCopyObject_X_D; sourceTree = BUILT_PRODUCTS_DIR; };
+ D453246005B3E83B007EC99B /* FSCopyObject.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = FSCopyObject.c; path = Sources/FSCopyObject.c; sourceTree = "<group>"; };
+ D453246105B3E83B007EC99B /* FSCopyObject.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FSCopyObject.h; path = Sources/FSCopyObject.h; sourceTree = "<group>"; };
+ D453246205B3E83B007EC99B /* GenLinkedList.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = GenLinkedList.c; path = Sources/GenLinkedList.c; sourceTree = "<group>"; };
+ D453246305B3E83B007EC99B /* GenLinkedList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = GenLinkedList.h; path = Sources/GenLinkedList.h; sourceTree = "<group>"; };
+ D453246405B3E83B007EC99B /* HelloWorldTool.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = HelloWorldTool.c; path = Sources/HelloWorldTool.c; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F880486A9BA00D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8DD76F890486A9BA00D96B5E /* CoreServices.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* FSCopyObject_X_D */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
+ 1A8B4A8EFE9D542A11CA2CBB /* Products */,
+ );
+ name = FSCopyObject_X_D;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ D453246005B3E83B007EC99B /* FSCopyObject.c */,
+ D453246105B3E83B007EC99B /* FSCopyObject.h */,
+ D453246205B3E83B007EC99B /* GenLinkedList.c */,
+ D453246305B3E83B007EC99B /* GenLinkedList.h */,
+ D453246405B3E83B007EC99B /* HelloWorldTool.c */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 097DBE83FE8419DDC02AAC07 /* CoreServices.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ 1A8B4A8EFE9D542A11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76F8E0486A9BA00D96B5E /* FSCopyObject_X_D */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 8DD76F850486A9BA00D96B5E /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D453246605B3E83B007EC99B /* FSCopyObject.h in Headers */,
+ D453246805B3E83B007EC99B /* GenLinkedList.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F840486A9BA00D96B5E /* FSCopyObject */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 5D1271280A254DFF00749CBB /* Build configuration list for PBXNativeTarget "FSCopyObject" */;
+ buildPhases = (
+ 8DD76F850486A9BA00D96B5E /* Headers */,
+ 8DD76F860486A9BA00D96B5E /* Sources */,
+ 8DD76F880486A9BA00D96B5E /* Frameworks */,
+ 8DD76F8A0486A9BA00D96B5E /* Rez */,
+ 8DD76F8B0486A9BA00D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = NO;
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ HEADER_SEARCH_PATHS = "";
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = FSCopyObject_X_D;
+ REZ_EXECUTABLE = YES;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ dependencies = (
+ );
+ name = FSCopyObject;
+ productInstallPath = "$(HOME)/bin";
+ productName = FSCopyObject_X_D;
+ productReference = 8DD76F8E0486A9BA00D96B5E /* FSCopyObject_X_D */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 5D12712C0A254DFF00749CBB /* Build configuration list for PBXProject "FSCopyObject" */;
+ buildSettings = {
+ };
+ buildStyles = (
+ 014CEA4C0018CE3E11CA2923 /* Development */,
+ 014CEA4D0018CE3E11CA2923 /* Deployment */,
+ );
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* FSCopyObject_X_D */;
+ projectDirPath = "";
+ targets = (
+ 8DD76F840486A9BA00D96B5E /* FSCopyObject */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXRezBuildPhase section */
+ 8DD76F8A0486A9BA00D96B5E /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXRezBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F860486A9BA00D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D453246505B3E83B007EC99B /* FSCopyObject.c in Sources */,
+ D453246705B3E83B007EC99B /* GenLinkedList.c in Sources */,
+ D453246905B3E83B007EC99B /* HelloWorldTool.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 5D1271290A254DFF00749CBB /* Development */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ DEBUGGING_SYMBOLS = YES;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = NO;
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ HEADER_SEARCH_PATHS = "";
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = "";
+ OPTIMIZATION_CFLAGS = "-O0";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = FSCopyObject_X_D;
+ REZ_EXECUTABLE = YES;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Development;
+ };
+ 5D12712A0A254DFF00749CBB /* Deployment */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = NO;
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ HEADER_SEARCH_PATHS = "";
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = FSCopyObject_X_D;
+ REZ_EXECUTABLE = YES;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Deployment;
+ };
+ 5D12712B0A254DFF00749CBB /* Default */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = NO;
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ HEADER_SEARCH_PATHS = "";
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = FSCopyObject_X_D;
+ REZ_EXECUTABLE = YES;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = Default;
+ };
+ 5D12712D0A254DFF00749CBB /* Development */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Development;
+ };
+ 5D12712E0A254DFF00749CBB /* Deployment */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Deployment;
+ };
+ 5D12712F0A254DFF00749CBB /* Default */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Default;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 5D1271280A254DFF00749CBB /* Build configuration list for PBXNativeTarget "FSCopyObject" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 5D1271290A254DFF00749CBB /* Development */,
+ 5D12712A0A254DFF00749CBB /* Deployment */,
+ 5D12712B0A254DFF00749CBB /* Default */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Default;
+ };
+ 5D12712C0A254DFF00749CBB /* Build configuration list for PBXProject "FSCopyObject" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 5D12712D0A254DFF00749CBB /* Development */,
+ 5D12712E0A254DFF00749CBB /* Deployment */,
+ 5D12712F0A254DFF00749CBB /* Default */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Default;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
Property changes on: Frontier/branches/Conversant/Common/FSCopyObject/FSCopyObject.xcodeproj/project.pbxproj
___________________________________________________________________
Added: svn:executable
+ *
Added: Frontier/branches/Conversant/Common/FSCopyObject/ReadMe.txt
===================================================================
--- Frontier/branches/Conversant/Common/FSCopyObject/ReadMe.txt (rev 0)
+++ Frontier/branches/Conversant/Common/FSCopyObject/ReadMe.txt 2009-05-29 15:40:26 UTC (rev 1801)
@@ -0,0 +1,73 @@
+About FSCopyObject:
+
+Contains source to demonstrate how to copy/delete files and folders with HFS+ API's.
+It also demonstrates a technique to rename an object if an object of the same name
+exists in the destination.
+
+For proper viewing/alignment of the source: disable wrap around text, enable Tabs, and
+set tab width to 4 spaces (Project Builder has wrap-around-text enabled, and tab width
+set to 8 by default)
+
+FSCopyObject.mcp is a CodeWarrior 8.3 Standard C Console project that builds Carbon,
+Classic, Mach-O SIOUX applications as well as a command line tool (FSCopyObject_CW_D).
+
+FSCopyObject.xcode is a XCode 1.1 CoreServices Tool that builds a command line tool
+(FSCopyObject_X_D)
+
+FSCopyObject.pbproj is a Project Builder 2.0.1 CoreServices Tool that builds a command
+line tool (FSCopyObject_PB_D).
+
+All binaries demonstrate the use and different features of FSCopyObject and FSDeleteObjects.
+Both FSCopyObject and FSDeleteObjects are MP safe routines.
+
+FSCopyObject Version History:
+
+1.5
+ Added: XCode project (FSCopyObject.xcode)
+ Added: New arg list format for Command Line tools
+ Added: Changed kDupeActionIgnore to kDupeActionStandard, no functionality change
+ Added: Optional parameter added to FSCopyObject to provide a name for the new object
+ Added: CopyObjectFilterProcs now must return an error code, and FSCopyObject will
+ bail if an error is received from a CopyObjectFilterProc
+ Fixed: Only call GetVolParms once for source and destination vols during Preflight
+ Fixed: [3390210, 3482028] Fixed issue where a zero length object would be created
+ when the current user did not have proper permissions to the source object or
+ when there was not enough disk space to create the new object object
+
+1.4
+ Added: FSCopyObject now returns an FSSpec to the new object
+ Added: Complete rewrite of copy folder engine to better utilize FSGetCatalogInfoBulk
+ Added: Split CopyForks into DropBox and Regular destination variants
+ Added: dwarning support, for debugging spew
+ Fixed: Only try to use PBHCopyFileSync if the remote volumes actually support it
+ Fixed: No more recursion in FSCopyObject
+ Fixed: [3188680] In the Command Line tool, worked around bug in the X File Manager,
+ 2489632, where FSPathMakeRef doesn't handle symlinks properly. It automatically
+ resolves symlinks and returns an FSRef to the symlinks target, not the symlink
+ itself as expected.
+ Fixed: [3188701] Fixed possible data loss issue when, in replace mode only, the
+ source object was inside the destination directory.
+ Fixed: [3188704] Fixed problem where the error code returned from a parameter check
+ was being overwritten in FSCopyObject and UnicodeNameGetHFSName
+
+1.3:
+ Added: Project Builder project (FSCopyObject.pbproj)
+ Added: command line tool target to FSCopyObject.mcp (FSCopyObject_CW_D)
+ Moved: binaries to build directory
+
+1.2:
+ Added: Entire project now builds in C
+ Added: Mach-O target
+ Added: Options to rename or replace the object being copied
+ Fixed: Fixed issue where some of the info passed to filter proc would,
+ under curtain situations, describe the origenal object
+ not the new one
+ Fixed: Code cleanup
+
+1.1:
+ Fixed: Worked around issue with FSSetCatalogInfo returning -36 on symbolic links
+ Fixed: Code cleanup
+
+1.0:
+ First Checkin
+
Property changes on: Frontier/branches/Conversant/Common/FSCopyObject/ReadMe.txt
___________________________________________________________________
Added: svn:executable
+ *
Added: Frontier/branches/Conversant/Common/FSCopyObject/Sources/ConsoleSIOUX.plc
===================================================================
--- Frontier/branches/Conversant/Common/FSCopyObject/Sources/ConsoleSIOUX.plc (rev 0)
+++ Frontier/branches/Conversant/Common/FSCopyObject/Sources/ConsoleSIOUX.plc 2009-05-29 15:40:26 UTC (rev 1801)
@@ -0,0 +1,46 @@
+/*
+ * Copyright \xA9 2002 Metrowerks Corporation. All Rights Reserved.
+ *
+ * Questions and comments to:
+ * <mailto:su...@me...>
+ * <http://www.metrowerks.com/>
+ */
+
+/* Change this to your bundle identifier string */
+#define kBundleIdentifier "com.apple.FSCopyObject"
+
+/* Change this to your short version string */
+#define kBundleShortVersion __OUTPUT_FILENAME__ " version 1.5"
+
+/* Change this to the string to display in the Finder's Get Info window */
+#define kBundleGetInfo kBundleShortVersion ", Copyright \xA9 2002-2004 Apple Computer, Inc., All Rights Reserved."
+
+plist
+{
+ dictionary
+ {
+ key "CFBundleIdentifier" value string kBundleIdentifier
+
+ key "CFBundleName" value string __OUTPUT_FILENAME__
+ key "CFBundleGetInfoString" value string kBundleGetInfo
+ key "CFBundleShortVersionString" value string kBundleShortVersion
+
+ key "CFBundlePackageType" value string __OUTPUT_TYPE__
+ key "CFBundleSignature" value string __OUTPUT_CREATOR__
+ key "CFBundleExecutable" value string __OUTPUT_FILENAME__
+ key "CFBundleVersion" value string "1.5"
+
+ key "CFBundleDevelopmentRegion" value string "English"
+ key "CFBundleInfoDictionaryVersion" value string "6.0"
+ key "LSRequiresCarbon" value boolean true
+ }
+}
+
+/* Change this to be localized for English */
+localize "English"
+{
+ comment "Localized versions of Info.plist keys"
+ key "CFBundleName" value string __OUTPUT_FILENAME__
+ key "CFBundleGetInfoString" value string kBundleGetInfo
+ key "CFBundleShortVersionString" value string kBundleShortVersion
+}
\ No newline at end of file
Property changes on: Frontier/branches/Conversant/Common/FSCopyObject/Sources/ConsoleSIOUX.plc
___________________________________________________________________
Added: svn:executable
+ *
Added: Frontier/branches/Conversant/Common/FSCopyObject/Sources/FSCopyObject.c
===================================================================
--- Frontier/branches/Conversant/Common/FSCopyObject/Sources/FSCopyObject.c (rev 0)
+++ Frontier/branches/Conversant/Common/FSCopyObject/Sources/FSCopyObject.c 2009-05-29 15:40:26 UTC (rev 1801)
@@ -0,0 +1,1966 @@
+/*
+ File: FSCopyObject.c
+
+ Contains: A Copy/Delete Files/Folders engine which uses HFS+ API's.
+ This code takes some tricks/techniques from MoreFilesX and
+ MPFileCopy, wraps them all up into an easy to use API, and
+ adds a bunch of features. It will run on Mac OS 9.1 through
+ 9.2.x and 10.1.x and up (Classic, Carbon and Mach-O)
+
+ Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
+ ("Apple") in consideration of your agreement to the following terms, and your
+ use, installation, modification or redistribution of this Apple software
+ constitutes acceptance of these terms. If you do not agree with these terms,
+ please do not use, install, modify or redistribute this Apple software.
+
+ In consideration of your agreement to abide by the following terms, and subject
+ to these terms, Apple grants you a personal, non-exclusive license, under Apple\xD5s
+ copyrights in this original Apple software (the "Apple Software"), to use,
+ reproduce, modify and redistribute the Apple Software, with or without
+ modifications, in source and/or binary forms; provided that if you redistribute
+ the Apple Software in its entirety and without modifications, you must retain
+ this notice and the following text and disclaimers in all such redistributions of
+ the Apple Software. Neither the name, trademarks, service marks or logos of
+ Apple Computer, Inc. may be used to endorse or promote products derived from the
+ Apple Software without specific prior written permission from Apple. Except as
+ expressly stated in this notice, no other rights or licenses, express or implied,
+ are granted by Apple herein, including but not limited to any patent rights that
+ may be infringed by your derivative works or by other works in which the Apple
+ Software may be incorporated.
+
+ The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
+ WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+ WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
+ COMBINATION WITH YOUR PRODUCTS.
+
+ IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
+ OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
+ (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Copyright \xA9 2002-2004 Apple Computer, Inc., All Rights Reserved
+*/
+
+#include "FSCopyObject.h"
+#include "GenLinkedList.h"
+#include "MoreFilesX.h"
+#if !TARGET_API_MAC_OSX
+//#include <UnicodeConverter.h>
+#endif
+#include <stddef.h>
+#include <string.h>
+
+#pragma mark ----- Tunable Parameters -----
+
+/* The following constants control the behavior of the copy engine. */
+
+enum { /* BufferSizeForVolSpeed */
+/* kDefaultCopyBufferSize = 2L * 1024 * 1024,*/ /* 2MB, Fast but not very responsive. */
+ kDefaultCopyBufferSize = 256L * 1024, /* 256kB, Slower but can still use machine. */
+ kMaximumCopyBufferSize = 2L * 1024 * 1024,
+ kMinimumCopyBufferSize = 1024
+};
+
+enum { /* CheckForDestInsideSrc */
+ errFSDestInsideSource = -1234
+};
+
+enum {
+ /* for use with PBHGetDirAccess in IsDropBox */
+ kPrivilegesMask = kioACAccessUserWriteMask | kioACAccessUserReadMask | kioACAccessUserSearchMask,
+
+ /* for use with FSGetCatalogInfo and FSPermissionInfo->mode */
+ /* from sys/stat.h... note -- sys/stat.h definitions are in octal */
+ /* */
+ /* You can use these values to adjust the users/groups permissions */
+ /* on a file/folder with FSSetCatalogInfo and extracting the */
+ /* kFSCatInfoPermissions field. See code below for examples */
+ kRWXUserAccessMask = 0x01C0,
+ kReadAccessUser = 0x0100,
+ kWriteAccessUser = 0x0080,
+ kExecuteAccessUser = 0x0040,
+
+ kRWXGroupAccessMask = 0x0038,
+ kReadAccessGroup = 0x0020,
+ kWriteAccessGroup = 0x0010,
+ kExecuteAccessGroup = 0x0008,
+
+ kRWXOtherAccessMask = 0x0007,
+ kReadAccessOther = 0x0004,
+ kWriteAccessOther = 0x0002,
+ kExecuteAccessOther = 0x0001,
+
+ kDropFolderValue = kWriteAccessOther | kExecuteAccessOther
+};
+
+#define kNumObjects 80
+
+#define VolHasCopyFile(volParms) (((volParms)->vMAttrib & (1L << bHasCopyFile)) != 0)
+
+#pragma mark ----- Struct Definitions -----
+
+ /* The CopyParams data structure holds the copy buffer used */
+ /* when copying the forks over, as well as special case */
+ /* info on the destination */
+struct CopyParams {
+ void *copyBuffer;
+ ByteCount copyBufferSize;
+ Boolean copyingToDropFolder;
+ Boolean copyingToLocalVolume;
+ Boolean volHasCopyFile;
+ DupeAction dupeAction;
+};
+typedef struct CopyParams CopyParams;
+
+ /* The FilterParams data structure holds the date and info */
+ /* that the caller wants passed into the Filter Proc, as well */
+ /* as the Filter Proc Pointer itself */
+struct FilterParams {
+ FSCatalogInfoBitmap whichInfo;
+ CopyObjectFilterProcPtr filterProcPtr;
+ Boolean containerChanged;
+ Boolean wantSpec;
+ Boolean wantName;
+ void *yourDataPtr;
+};
+typedef struct FilterParams FilterParams;
+
+ /* The ForkTracker data structure holds information about a specific fork, */
+ /* specifically the name and the refnum. We use this to build a list of */
+ /* all the forks before we start copying them. We need to do this because */
+ /* if we're copying into a drop folder, we must open all the forks before */
+ /* we start copying data into any of them. */
+ /* Plus it's a convenient way to keep track of all the forks... */
+struct ForkTracker {
+ HFSUniStr255 forkName;
+ SInt64 forkSize;
+ SInt16 forkDestRefNum;
+};
+typedef struct ForkTracker ForkTracker;
+typedef ForkTracker *ForkTrackerPtr;
+
+ /* The FolderListData data structure holds FSRefs to the source and */
+ /* coorisponding destination folder, as well as which level its on */
+ /* for use in ProcessFolderList. */
+struct FolderListData
+{
+ FSRef sourceDirRef;
+ FSRef destDirRef;
+ UInt32 level;
+};
+typedef struct FolderListData FolderListData;
+
+ /* The FSCopyFolderGlobals data structure holds the information needed to */
+ /* copy a directory */
+struct FSCopyFolderGlobals
+{
+ FSRef *sourceDirRef;
+ FSRef *destDirRef;
+
+ FSCatalogInfo *catInfoList;
+ FSRef *srcRefList;
+ HFSUniStr255 *nameList;
+
+ GenLinkedList folderList;
+ GenIteratorPtr folderListIter;
+
+ CopyParams *copyParams;
+ FilterParams *filterParams;
+ Boolean containerChanged;
+
+ ItemCount maxLevels;
+ ItemCount currentLevel;
+};
+typedef struct FSCopyFolderGlobals FSCopyFolderGlobals;
+
+ /* The FSDeleteObjectGlobals data structure holds information needed to */
+ /* recursively delete a directory */
+struct FSDeleteObjectGlobals
+{
+ FSCatalogInfo catalogInfo; /* FSCatalogInfo */
+ ItemCount actualObjects; /* number of objects returned */
+ OSErr result; /* result */
+};
+typedef struct FSDeleteObjectGlobals FSDeleteObjectGlobals;
+
+#pragma mark ----- Local Prototypes -----
+
+static OSErr FSCopyObjectPreflight ( const FSRef *source,
+ const FSRef *destDir,
+ const DupeAction dupeAction,
+ FSCatalogInfo *sourceCatInfo,
+ CopyParams *copyParams, /* can be NULL */
+ HFSUniStr255 *newObjectName,
+ FSRef *deleteMeRef,
+ Boolean *isReplacing,
+ Boolean *isDirectory );
+
+static OSErr FSCopyObjectCopyFile ( const FSRef *source,
+ const FSRef *destDir,
+ const FSCatalogInfo *sourceCatInfo,
+ const HFSUniStr255 *newFileName,
+ CopyParams *copyParams,
+ FilterParams *filterParams,
+ FSRef *newFileRef, /* can be NULL */
+ FSSpec *newFileSpec ); /* can be NULL */
+
+static OSErr CopyFile ( const FSRef *source,
+ FSCatalogInfo *sourceCatInfo,
+ const FSRef *destDir,
+ const HFSUniStr255 *destName, /* can be NULL */
+ CopyParams *copyParams,
+ FSRef *newRef, /* can be NULL */
+ FSSpec *newSpec ); /* can be NULL */
+
+static OSErr FSUsePBHCopyFile ( const FSRef *srcFileRef,
+ const FSRef *dstDirectoryRef,
+ const HFSUniStr255 *destName, /* can be NULL (no rename during copy) */
+ TextEncoding textEncodingHint,
+ FSRef *newRef, /* can be NULL */
+ FSSpec *newSpec ); /* can be NULL */
+
+static OSErr DoCopyFile ( const FSRef *source,
+ FSCatalogInfo *sourceCatInfo,
+ const FSRef *destDir,
+ const HFSUniStr255 *destName,
+ CopyParams *params,
+ FSRef *newRef, /* can be NULL */
+ FSSpec *newSpec ); /* can be NULL */
+
+static OSErr FSCopyFolder ( const FSRef *source,
+ const FSRef *destDir,
+ const FSCatalogInfo *sourceCatInfo,
+ const HFSUniStr255 *newFoldName,
+ CopyParams *copyParams,
+ FilterParams *filterParams,
+ ItemCount maxLevels,
+ FSRef *outDirRef, /* can be NULL */
+ FSSpec *outDirSpec ); /* can be NULL */
+
+static OSErr ProcessFolderList ( FSCopyFolderGlobals *folderGlobals );
+
+static OSErr CopyFolder ( FSCopyFolderGlobals *folderGlobals );
+
+static OSErr CheckForDestInsideSrc ( const FSRef *source,
+ const FSRef *destDir );
+
+static OSErr CopyForks ( const FSRef *source,
+ const FSRef *dest,
+ CopyParams *params );
+
+static OSErr CopyForksToDisk ( const FSRef *source,
+ const FSRef *dest,
+ CopyParams *params );
+
+static OSErr CopyForksToDropBox ( const FSRef *source,
+ const FSRef *dest,
+ CopyParams *params );
+
+static OSErr OpenAllForks ( const FSRef *dest,
+ GenLinkedList *forkList );
+
+static OSErr WriteFork ( const SInt16 srcRefNum,
+ const SInt16 destRefNum,
+ const CopyParams *params,
+ const SInt64 forkSize );
+
+static UInt32 CalcBufferSizeForVol ( const GetVolParmsInfoBuffer *volParms,
+ UInt32 volParmsSize );
+
+static UInt32 BufferSizeForVolSpeed ( UInt32 volumeBytesPerSecond );
+
+static OSErr FSDeleteFolder ( const FSRef *container );
+
+static void FSDeleteFolderLevel ( const FSRef *container,
+ FSDeleteObjectGlobals *theGlobals );
+
+static OSErr IsDropBox ( const FSRef *source,
+ Boolean *isDropBox );
+
+static OSErr GetMagicBusyCreateDate( UTCDateTime *date );
+
+/*
+static OSErr FSGetVRefNum ( const FSRef *ref,
+ FSVolumeRefNum *vRefNum );
+
+static OSErr FSGetVolParms ( FSVolumeRefNum volRefNum,
+ UInt32 bufferSize,
+ GetVolParmsInfoBuffer*volParmsInfo,
+ UInt32 *actualInfoSize ); // Can Be NULL
+*/
+
+static OSErr UniStrToPStr ( const HFSUniStr255 *uniStr,
+ TextEncoding textEncodingHint,
+ Boolean isVolumeName,
+ Str255 pStr );
+
+/*
+static OSErr FSMakeFSRef ( FSVolumeRefNum volRefNum,
+ SInt32 dirID,
+ ConstStr255Param name,
+ FSRef *ref );
+*/
+
+static OSErr SetupDestination ( const FSRef *destDir,
+ const DupeAction dupeAction,
+ HFSUniStr255 *sourceName,
+ FSRef *deleteMeRef,
+ Boolean *isReplacing);
+
+static OSErr GetUniqueName ( const FSRef *destDir,
+ HFSUniStr255 *sourceName );
+
+static OSErr GetObjectName ( const FSRef *sourceRef,
+ HFSUniStr255 *sourceName,
+ TextEncoding *sourceEncoding );
+
+static OSErr CreateFolder ( const FSRef *sourceRef,
+ const FSRef *destDirRef,
+ const FSCatalogInfo *catalogInfo,
+ const HFSUniStr255 *folderName,
+ CopyParams *params,
+ FSRef *newFSRefPtr,
+ FSSpec *newFSSpecPtr );
+
+static OSErr DoCreateFolder ( const FSRef *sourceRef,
+ const FSRef *destDirRef,
+ const FSCatalogInfo *catalogInfo,
+ const HFSUniStr255 *folderName,
+ CopyParams *params,
+ FSRef *newFSRefPtr,
+ FSSpec *newFSSpecPtr);
+
+static pascal void MyDisposeDataProc ( void *pData );
+
+static pascal void MyCloseForkProc ( void *pData );
+
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+
+#pragma mark ----- Copy Objects -----
+
+ /* This routine acts as the top level of the copy engine. */
+OSErr FSCopyObject( const FSRef *source,
+ const FSRef *destDir,
+ ItemCount maxLevels,
+ FSCatalogInfoBitmap whichInfo,
+ DupeAction dupeAction,
+ const HFSUniStr255 *newObjectName, /* can be NULL */
+ Boolean wantFSSpec,
+ Boolean wantName,
+ CopyObjectFilterProcPtr filterProcPtr, /* can be NULL */
+ void *yourDataPtr, /* can be NULL */
+ FSRef *newObjectRef, /* can be NULL */
+ FSSpec *newObjectSpec) /* can be NULL */
+{
+ CopyParams copyParams;
+ FilterParams filterParams;
+ FSCatalogInfo sourceCatInfo;
+ HFSUniStr255 sourceName,
+ tmpObjectName;
+ FSRef tmpObjectRef,
+ deleteMeRef;
+ Boolean isDirectory,
+ isReplacing = false;
+ OSErr err = ( source != NULL && destDir != NULL ) ? noErr : paramErr;
+
+ /* Zero out these two FSRefs in case an error occurs before or */
+ /* inside FSCopyObjectPreflight. Paranoia mainly... */
+ BlockZero( &deleteMeRef, sizeof( FSRef ) );
+ BlockZero( &tmpObjectRef, sizeof( FSRef ) );
+
+ /* setup filterParams */
+ filterParams.whichInfo = whichInfo;
+ filterParams.filterProcPtr = filterProcPtr;
+ filterParams.wantSpec = ( filterProcPtr && wantFSSpec ); /* only get this info if */
+ filterParams.wantName = ( filterProcPtr && wantName ); /* a filterProc is provied */
+ filterParams.yourDataPtr = yourDataPtr;
+
+ /* Get and store away the name of the source object */
+ /* and setup the initial name of the new object */
+ if( err == noErr )
+ err = GetObjectName( source, &sourceName, NULL );
+ if( err == noErr )
+ tmpObjectName = (newObjectName != NULL) ? *newObjectName : sourceName;
+
+ if( err == noErr ) /* preflight/prep the destination and our internal variables */
+ err = FSCopyObjectPreflight( source, destDir, dupeAction, &sourceCatInfo, ©Params, &tmpObjectName, &deleteMeRef, &isReplacing, &isDirectory );
+
+ /* now that we have some info, lets print it */
+ if( err == noErr )
+ {
+ dwarning(( "%s -- err: %d, maxLevels: %u, whichInfo: %08x,\n", __FUNCTION__, err, (unsigned int)maxLevels, (int)whichInfo ));
+ dwarning(( "\t\t\t\tdupeAction: %s, wantSpec: %s, wantName: %s,\n", ((dupeAction == kDupeActionReplace) ? "replace" : ((dupeAction == kDupeActionRename) ? "rename" : "standard")), (filterParams.wantSpec)?"yes":"no", (filterParams.wantName)?"yes":"no" ));
+ dwarning(( "\t\t\t\tfilterProcPtr: 0x%08x, yourDataPtr: 0x%08x,\n", (unsigned int)filterProcPtr, (unsigned int)yourDataPtr ));
+ dwarning(( "\t\t\t\tnewObjectRef: 0x%08x, newObjectSpec: 0x%08x,\n", (unsigned int)newObjectRef, (unsigned int)newObjectSpec ));
+ dwarning(( "\t\t\t\tcopyBufferSize: %dkB, isDirectory: %s, isLocal: %s,\n", (int)copyParams.copyBufferSize/1024, (isDirectory)?"yes":"no", (copyParams.copyingToLocalVolume)?"yes":"no" ));
+ dwarning(( "\t\t\t\tisDropBox: %s, PBHCopyFileSync supported: %s\n\n", (copyParams.copyingToDropFolder)?"yes":"no", (copyParams.volHasCopyFile)?"yes":"no" ));
+ }
+
+ if( err == noErr ) /* now copy the file/folder... */
+ { /* is it a folder? */
+ if ( isDirectory )
+ { /* yes */
+ err = CheckForDestInsideSrc(source, destDir);
+ if( err == noErr )
+ err = FSCopyFolder( source, destDir, &sourceCatInfo, &tmpObjectName, ©Params, &filterParams, maxLevels, &tmpObjectRef, newObjectSpec );
+ }
+ else /* no */
+ err = FSCopyObjectCopyFile(source, destDir, &sourceCatInfo, &tmpObjectName, ©Params, &filterParams, &tmpObjectRef, newObjectSpec);
+ }
+
+ /* if an object existed in the destination with the same name as */
+ /* the source and the caller wants to replace it, we had renamed it */
+ /* to ".DeleteMe" earlier. If no errors, we delete it, else delete */
+ /* the one we just created and rename the origenal back to its */
+ /* origenal name. */
+ /* */
+ /* This is done mainly to cover the case of the source being in the */
+ /* destination directory when kDupeActionReplace is selected */
+ /* (3188701) */
+ if( copyParams.dupeAction == kDupeActionReplace && isReplacing == true )
+ {
+ dwarning(("%s -- Cleaning up, this might take a moment. err : %d\n", __FUNCTION__, err));
+
+ if( err == noErr )
+ err = FSDeleteObjects( &deleteMeRef );
+ else
+ { /* not much we can do if the delete or rename fails, we need to preserve */
+ /* the origenal error code that got us here. */
+ /* */
+ /* If an error occurs before or inside SetupDestination, newFileRef and */
+ /* deleteMeRef will be invalid so the delete and rename will simply fail */
+ /* leaving the source and destination unchanged */
+ myverify_noerr( FSDeleteObjects( &tmpObjectRef ) );
+ myverify_noerr( FSRenameUnicode( &deleteMeRef, sourceName.length, sourceName.unicode, sourceCatInfo.textEncodingHint, NULL ) );
+ }
+ }
+
+ if( err == noErr && newObjectRef != NULL )
+ *newObjectRef = tmpObjectRef;
+
+ /* Clean up for space and safety... Who me? */
+ if( copyParams.copyBuffer != NULL )
+ DisposePtr((char*)copyParams.copyBuffer);
+
+ mycheck_noerr( err );
+
+ return err;
+}
+
+/*****************************************************************************/
+
+ /* Does a little preflighting (as the name suggests) to figure out the optimal */
+ /* buffer size, if its a drop box, on a remote volume etc */
+static OSErr FSCopyObjectPreflight( const FSRef *source,
+ const FSRef *destDir,
+ const DupeAction dupeAction,
+ FSCatalogInfo *sourceCatInfo,
+ CopyParams *copyParams,
+ HFSUniStr255 *newObjectName,
+ FSRef *deleteMeRef,
+ Boolean *isReplacing,
+ Boolean *isDirectory)
+{
+ GetVolParmsInfoBuffer srcVolParms,
+ destVolParms;
+ UInt32 srcVolParmsSize = 0,
+ destVolParmsSize = 0;
+ FSVolumeRefNum srcVRefNum,
+ destVRefNum;
+ OSErr err = ( source != NULL && destDir != NULL &&
+ sourceCatInfo != NULL && copyParams != NULL &&
+ newObjectName != NULL && deleteMeRef != NULL &&
+ isDirectory != NULL ) ? noErr : paramErr;
+
+ BlockZero( copyParams, sizeof( CopyParams ) );
+
+ copyParams->dupeAction = dupeAction;
+
+ if( err == noErr ) /* Get the info we will need later about the source object */
+ err = FSGetCatalogInfo( source, kFSCatInfoSettableInfo, sourceCatInfo, NULL, NULL, NULL );
+ if( err == noErr ) /* get the source's vRefNum */
+ err = FSGetVRefNum( source, &srcVRefNum );
+ if( err == noErr ) /* get the source's volParams */
+ err = FSGetVolParms( srcVRefNum, sizeof(GetVolParmsInfoBuffer), &srcVolParms, &srcVolParmsSize );
+ if( err == noErr ) /* get the destination's vRefNum */
+ err = FSGetVRefNum( destDir, &destVRefNum );
+ if( err == noErr )
+ {
+ /* Calculate the optimal copy buffer size for the src vol */
+ copyParams->copyBufferSize = CalcBufferSizeForVol( &srcVolParms, srcVolParmsSize );
+
+ /* if src and dest on different volumes, get its vol parms */
+ /* and calculate its optimal buffer size */
+ /* else destVolParms = srcVolParms */
+ if( srcVRefNum != destVRefNum )
+ {
+ err = FSGetVolParms( destVRefNum, sizeof(GetVolParmsInfoBuffer), &destVolParms, &destVolParmsSize );
+ if( err == noErr )
+ {
+ ByteCount tmpBufferSize = CalcBufferSizeForVol( &destVolParms, destVolParmsSize );
+ if( tmpBufferSize < copyParams->copyBufferSize )
+ copyParams->copyBufferSize = tmpBufferSize;
+ }
+ }
+ else
+ destVolParms = srcVolParms;
+ }
+ if( err == noErr )
+ err = ((copyParams->copyBuffer = NewPtr( copyParams->copyBufferSize )) != NULL ) ? noErr : MemError();
+
+ /* figure out if source is a file or folder */
+ /* if it is on a local volume, */
+ /* if destination is a drop box */
+ /* if source and dest are on same server */
+ /* and if it supports PBHCopyFile */
+ if( err == noErr ) /* is the destination a Drop Box */
+ err = IsDropBox( destDir, ©Params->copyingToDropFolder );
+ if( err == noErr )
+ {
+ /* Is it a directory */
+ *isDirectory = ((sourceCatInfo->nodeFlags & kFSNodeIsDirectoryMask) != 0);
+ /* destVolParms.vMServerAdr is non-zero for remote volumes */
+ copyParams->copyingToLocalVolume = (destVolParms.vMServerAdr == 0);
+ if( !copyParams->copyingToLocalVolume )
+ {
+ /* If the destination is on a remote volume, and source and dest are on */
+ /* the same server, then it might support PBHCopyFileSync */
+ /* If not, then PBHCopyFileSync won't work */
+
+ /* figure out if the volumes support PBHCopyFileSync */
+ copyParams->volHasCopyFile = ( err == noErr && destVolParms.vMServerAdr == srcVolParms.vMServerAdr ) ?
+ VolHasCopyFile(&srcVolParms) : false;
+ }
+ }
+
+ if( err == noErr )
+ err = SetupDestination( destDir, copyParams->dupeAction, newObjectName, deleteMeRef, isReplacing );
+
+ return err;
+}
+
+#pragma mark ----- Copy Files -----
+
+/*****************************************************************************/
+
+static OSErr FSCopyObjectCopyFile( const FSRef *source,
+ const FSRef *destDir,
+ const FSCatalogInfo *sourceCatInfo,
+ const HFSUniStr255 *newFileName,
+ CopyParams *copyParams,
+ FilterParams *filterParams,
+ FSRef *outFileRef,
+ FSSpec *outFileSpec )
+{
+ FSCatalogInfo catInfo = *sourceCatInfo;
+ FSRef newFileRef;
+ FSSpec newFileSpec;
+ OSErr err = ( source != NULL && destDir != NULL &&
+ copyParams != NULL && filterParams != NULL ) ? noErr : paramErr;
+
+ /* If you would like a Pre-Copy filter (i.e to weed out objects */
+ /* you don't want to copy) you should add it here */
+
+ if( err == noErr ) /* copy the file over */
+ err = CopyFile( source, &catInfo, destDir, newFileName, copyParams, &newFileRef, (filterParams->wantSpec || outFileSpec) ? &newFileSpec : NULL );
+
+ /* Call the IterateFilterProc _after_ the new file was created even if an error occured. */
+ /* Note: if an error occured above, the FSRef and other info might not be valid */
+ if( filterParams->filterProcPtr != NULL )
+ {
+ /* get the extra info the user wanted on the new file that we don't have */
+ if( err == noErr && (filterParams->whichInfo & ~kFSCatInfoSettableInfo) != kFSCatInfoNone )
+ err = FSGetCatalogInfo( &newFileRef, filterParams->whichInfo & ~kFSCatInfoSettableInfo, &catInfo, NULL, NULL, NULL );
+
+ err = CallCopyObjectFilterProc( filterParams->filterProcPtr, false, 0, err, &catInfo, &newFileRef,
+ (filterParams->wantSpec) ? &newFileSpec : NULL,
+ (filterParams->wantName) ? newFileName : NULL,
+ filterParams->yourDataPtr);
+ }
+
+ if( err == noErr )
+ {
+ if( outFileRef != NULL )
+ *outFileRef = newFileRef;
+ if( outFileSpec != NULL )
+ *outFileSpec = newFileSpec;
+ }
+
+ mycheck_noerr(err);
+
+ return err;
+}
+
+/*****************************************************************************/
+
+static OSErr CopyFile( const FSRef *source,
+ FSCatalogInfo *sourceCatInfo,
+ const FSRef *destDir,
+ const HFSUniStr255 *destName, /* can be NULL */
+ CopyParams *params,
+ FSRef *newFile, /* can be NULL */
+ FSSpec *newSpec ) /* can be NULL */
+{
+ OSErr err = paramErr;
+
+ /* Clear the "inited" bit so that the Finder positions the icon for us. */
+ ((FInfo *)(sourceCatInfo->finderInfo))->fdFlags &= ~kHasBeenInited;
+
+ /* if the volumes support PBHCopyFileSync, try to use it */
+ if( params->volHasCopyFile == true )
+ err = FSUsePBHCopyFile( sour...
[truncated message content] |