-
Notifications
You must be signed in to change notification settings - Fork 514
FSKit macOS xcode16.0 b5
Rolf Bjarne Kvinge edited this page Aug 13, 2024
·
3 revisions
#FSKit.framework https://github.com/xamarin/xamarin-macios/pull/21029
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSClient.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSClient.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSClient.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSClient.h 2024-07-31 00:44:36
@@ -10,24 +10,20 @@
NS_ASSUME_NONNULL_BEGIN
-/*
- * FSClient - client class for talking to fskitd
- *
- * Creating an instance of this class will connect to fskitd
- */
+/** Client class for talking to `fskitd` and asking about installed extensions */
FSKIT_API_AVAILABILITY_V1
@interface FSClient : NSObject
-/*
- * ask fskitd for a list of installed extensions
- *
- * Available in both asynchronous and synchronous versions
+/**
+ @method fetchInstalledExtensionsWithCompletionHandler: asynchronous call that calls the completion handler with a list of installed filesystem modules in the system
*/
--(void)installedExtensions:(void(^)(NSArray<FSModuleIdentity *> * _Nullable,
- NSError * _Nullable))results FSKIT_API_AVAILABILITY_V1;
++(void)fetchInstalledExtensionsWithCompletionHandler:(void(^)(NSArray<FSModuleIdentity *> *_Nullable,
+ NSError *_Nullable))completionHandler FSKIT_API_AVAILABILITY_V1 NS_SWIFT_NAME(installedExtensions(completionHandler:));
--(void)installedExtensionsSync:(void(^)(NSArray<FSModuleIdentity *> * _Nullable,
- NSError * _Nullable))results FSKIT_API_AVAILABILITY_V1;
+/**
+@method installedExtensionsWithError: synchronous version fetchInstalledExtensionsWithCompletionHandler
+ */
++(NSArray<FSModuleIdentity *> * _Nullable)installedExtensionsWithError:(NSError**)error FSKIT_API_AVAILABILITY_V1;
@end
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSContainer.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSContainer.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSContainer.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSContainer.h 2024-07-31 00:44:36
@@ -32,17 +32,17 @@
FSKIT_API_AVAILABILITY_V1
typedef NS_ENUM(NSInteger, FSContainerState) {
// Container not ready
- FSContainerNotReady = 0,
+ FSContainerStateNotReady = 0,
/*
Container prevented from transitioning from FSContainerNotReady to
FSContainerReady by a conceptually recoverable error. That error
which set in the errorState property
*/
- FSContainerBlocked,
+ FSContainerStateBlocked,
// Container ready but inactive
- FSContainerReady,
+ FSContainerStateReady,
// Container active, one or more volumes are active
- FSContainerActive
+ FSContainerStateActive
};
/**
@@ -57,7 +57,7 @@
@interface FSContainerIdentifier : FSEntityIdentifier
/*
- * For Unary file systems, the container identifier is the same
+ * For Unary filesystems, the container identifier is the same
* as the volume identifier.
*/
@property (readonly) FSVolumeIdentifier *volumeIdentifier;
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSEntityIdentifier.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSEntityIdentifier.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSEntityIdentifier.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSEntityIdentifier.h 2024-07-31 00:44:36
@@ -31,7 +31,7 @@
longByteQualifier:(const char * _Nonnull)bytes;
@property (retain) NSUUID *uuid;
-@property (retain, nullable) NSData *qual;
+@property (retain, nullable) NSData *qualifier;
@end
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileDataBuffer.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileDataBuffer.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileDataBuffer.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileDataBuffer.h 1969-12-31 19:00:00
@@ -1,43 +0,0 @@
-//
-// Copyright (c) 2022 Apple Inc. All rights reserved.
-//
-// FSFileDataBuffer.h
-// FSKit
-//
-
-#import <Foundation/Foundation.h>
-#import <FSKit/FSKitDefines.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/*
- * FSFileDataBuffer - wrapper object for a data buffer
- *
- * This object class wraps data buffers, and behaves
- * in a way similar to a uio in the kernel. The mutable sub
- * class is writable.
- */
-
-FSKIT_API_AVAILABILITY_V1
-@interface FSFileDataBuffer : NSObject <NSSecureCoding>
-@property (readwrite) NSUInteger length FSKIT_API_AVAILABILITY_V1;
-
-+(nullable instancetype)dataWithLength:(NSUInteger)length FSKIT_API_AVAILABILITY_V1;
--(nullable instancetype)initWithLength:(NSUInteger)length FSKIT_API_AVAILABILITY_V1;
--(const void * _Nullable)bytes FSKIT_API_AVAILABILITY_V1 NS_SWIFT_UNAVAILABLE("Use a withBytes instead.");
--(void)withBytes:(void(^)(const char * _Nonnull bytes))closure FSKIT_API_AVAILABILITY_V1;
-
-@end
-
-FSKIT_API_AVAILABILITY_V1
-@interface FSMutableFileDataBuffer : FSFileDataBuffer
-
-+(nullable instancetype)dataWithCapacity:(NSUInteger)capacity FSKIT_API_AVAILABILITY_V1;
--(nullable instancetype)initWithCapacity:(NSUInteger)capacity FSKIT_API_AVAILABILITY_V1;
--(NSUInteger) capacity FSKIT_API_AVAILABILITY_V1;
--(void * _Nullable)mutableBytes FSKIT_API_AVAILABILITY_V1 NS_SWIFT_UNAVAILABLE("Use a withMutableBytes instead.");
--(void)withMutableBytes:(void(^)(void * _Nonnull bytes))closure FSKIT_API_AVAILABILITY_V1;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileName.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileName.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileName.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileName.h 2024-07-31 00:44:36
@@ -14,7 +14,7 @@
names back to the kernel as part of directory enumeration. In almost all cases, these names will be valid
UTF-8 sequences. There are only two cases in which an FSModule will receive an FSFileName object whose
contents are not valid UTF8. The first is a program passing erroneous data to a system call. An FSModule
- should consider this case an error. The second case applies to a subset of FSModules. Some file system
+ should consider this case an error. The second case applies to a subset of FSModules. Some filesystem
formats consider file names to be an arbitrary "bag of bytes." These formats leave character encoding to
be set by the operating system. In these cases, lacking encoding information, the FSModule can only pass
back the names it finds on disk. The behavior of upper layers such as NSFileManager is unspecified. What
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileSystem.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileSystem.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileSystem.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileSystem.h 2024-07-31 00:44:36
@@ -7,7 +7,6 @@
#import <Foundation/Foundation.h>
#import <FSKit/FSFileSystemBase.h>
-#import <FSKit/FSTaskOptionsBundle.h>
NS_ASSUME_NONNULL_BEGIN
@@ -17,23 +16,6 @@
*/
FSKIT_API_UNAVAILABLE_V1
@interface FSFileSystem : NSObject <FSFileSystemBase>
-
-@end
-
-#pragma mark - Operation @protocols
-
-FSKIT_API_UNAVAILABLE_V1
-@protocol FSFileSystemOperations <NSObject>
-
-@optional
--(void)loadResource:(FSResource *)resource
- options:(FSTaskOptionsBundle *)options
- replyHandler:(void(^)(NSArray<FSVolume *> * _Nullable volumes,
- NSError * _Nullable error))reply FSKIT_API_UNAVAILABLE_V1;
-
-/// This method will be called after the main runloop has started and before the first message from fskitd has been received.
-@optional
--(void)didFinishLaunching;
@end
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileSystemBase.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileSystemBase.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileSystemBase.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSFileSystemBase.h 2024-07-31 00:44:36
@@ -27,29 +27,29 @@
/**
@method wipeResource:includingRanges:excludingRanges:replyHandler:
- @brief Wipe existing file systems on the provided resource
+ @brief Wipe existing filesystems on the provided resource
@param resource FSBlockDeviceResource to be wiped
@param include set of ranges to additionally clear during wipefs processing.
@param exclude set of ranges to NOT clear duing wipefs processing.
@param reply Block with end status upon completion
@discussion wraps wipefs functionality from libutil. That functionality is described as:
- The wipefs family of functions wipe existing file systems on a volume. A DKIOCUNMAP ioctl is
+ The wipefs family of functions wipe existing filesystems on a volume. A DKIOCUNMAP ioctl is
sent to the device to invalidate all of its content. Then zeroes are written to various
- locations that are used by various file systems to recognize their content and mount their
- volumes. This is usually used by the newfs_* utilities before they create new file systems
- on the volume, so that the existing file system will not be mounted accidentally after the
- new file system is created.
+ locations that are used by various filesystems to recognize their content and mount their
+ volumes. This is usually used by the newfs_* utilities before they create new filesystems
+ on the volume, so that the existing filesystem will not be mounted accidentally after the
+ new filesystem is created.
NOTE: These routines do not overwrite all volume structures. These routines do not securely
erase the previous content. They only overwrite enough to make sure that the normal
- utilities will no longer recognize any file system content. It is possible that previous
- file system content could be recovered by other means.
+ utilities will no longer recognize any filesystem content. It is possible that previous
+ filesystem content could be recovered by other means.
*/
-(void)wipeResource:(FSBlockDeviceResource * )resource
includingRanges:(NSIndexSet *)include
excludingRanges:(NSIndexSet *)exclude
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ completionHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
@end
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSItem.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSItem.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSItem.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSItem.h 2024-07-31 00:44:36
@@ -11,67 +11,71 @@
NS_ASSUME_NONNULL_BEGIN
FSKIT_API_AVAILABILITY_V1
-typedef NS_ENUM(uint8_t, FSItemType) {
- FSItemTypeUnknown = 0,
+typedef NS_OPTIONS(NSInteger, FSItemAttribute) {
+ FSItemAttributeUID = 1 << 0,
+ FSItemAttributeGID = 1 << 1,
+ FSItemAttributeMode = 1 << 2,
+ FSItemAttributeType = 1 << 3,
+ FSItemAttributeLinkCount = 1 << 4,
+ FSItemAttributeFlags = 1 << 5,
+ FSItemAttributeSize = 1 << 6,
+ FSItemAttributeAllocSize = 1 << 7,
+ FSItemAttributeFileID = 1 << 8,
+ FSItemAttributeParentID = 1 << 9,
+ FSItemAttributeSupportsLimitedXAttrs = 1 << 10,
+ FSItemAttributeInhibitKOIO = 1 << 11,
+ FSItemAttributeModifyTime = 1 << 12,
+ FSItemAttributeAddedTime = 1 << 13,
+ FSItemAttributeChangeTime = 1 << 14,
+ FSItemAttributeAccessTime = 1 << 15,
+ FSItemAttributeBirthTime = 1 << 16,
+ FSItemAttributeBackupTime = 1 << 17
+};
+
+FSKIT_API_AVAILABILITY_V1
+typedef NS_ENUM(NSInteger, FSItemType) {
+ FSItemTypeUnknown = 0,
FSItemTypeFile,
- FSItemTypeDir,
+ FSItemTypeDirectory,
FSItemTypeSymlink,
- FSItemTypeFIFO,
- FSItemTypeCharDev,
- FSItemTypeBlockDev,
+ FSItemTypeFIFO NS_SWIFT_NAME(fifo),
+ FSItemTypeCharDevice,
+ FSItemTypeBlockDevice,
FSItemTypeSocket
};
FSKIT_API_AVAILABILITY_V1
@interface FSItemAttributes : NSObject <NSSecureCoding>
--(void)reset; // mark all attributes inactive
+-(void)invalidateAllProperties; // mark all attributes inactive
@property (nonatomic) uint32_t uid;
@property (nonatomic) uint32_t gid;
@property (nonatomic) uint32_t mode;
@property (nonatomic) FSItemType type;
-@property (nonatomic) uint32_t numLinks;
-@property (nonatomic) uint32_t bsdFlags;
+@property (nonatomic) uint32_t linkCount;
+@property (nonatomic) uint32_t flags;
@property (nonatomic) uint64_t size;
@property (nonatomic) uint64_t allocSize;
-@property (nonatomic) uint64_t fileid;
-@property (nonatomic) uint64_t parentid;
-@property (nonatomic) bool useKOIO;
-@property (nonatomic) bool supportsLimitedXAttrs;
+@property (nonatomic) uint64_t fileID;
+@property (nonatomic) uint64_t parentID;
+@property (nonatomic) BOOL supportsLimitedXAttrs;
+/**
+ * inhibitKOIO
+ * Allows the file system to override the per file system Kernel Offloaded IO
+ * settings for a specific file.
+ */
+@property (nonatomic) BOOL inhibitKOIO;
-/* time values need to be modified by reference */
--(void)modifyTime:(struct timespec *)tp;
--(void)addedTime:(struct timespec *)tp;
--(void)changeTime:(struct timespec *)tp;
--(void)accessTime:(struct timespec *)tp;
--(void)birthTime:(struct timespec *)tp;
--(void)backupTime:(struct timespec *)tp;
+@property (nonatomic) struct timespec modifyTime;
+@property (nonatomic) struct timespec addedTime;
+@property (nonatomic) struct timespec changeTime;
+@property (nonatomic) struct timespec accessTime;
+@property (nonatomic) struct timespec birthTime;
+@property (nonatomic) struct timespec backupTime;
-@property (nonatomic,readonly) bool uidIsActive;
-@property (nonatomic,readonly) bool gidIsActive;
-@property (nonatomic,readonly) bool modeIsActive;
-@property (nonatomic,readonly) bool typeIsActive;
-@property (nonatomic,readonly) bool numLinksIsActive;
-@property (nonatomic,readonly) bool bsdFlagsIsActive;
-@property (nonatomic,readonly) bool sizeIsActive;
-@property (nonatomic,readonly) bool allocSizeIsActive;
-@property (nonatomic,readonly) bool fileidIsActive;
-@property (nonatomic,readonly) bool parentidIsActive;
-@property (nonatomic,readonly) bool modifyTimeIsActive;
-@property (nonatomic,readonly) bool addedTimeIsActive;
-@property (nonatomic,readonly) bool changeTimeIsActive;
-@property (nonatomic,readonly) bool accessTimeIsActive;
-@property (nonatomic,readonly) bool birthTimeIsActive;
-@property (nonatomic,readonly) bool backupTimeIsActive;
+-(BOOL)isValid:(FSItemAttribute)attribute;
--(void)setModifyTime:(struct timespec *)tp;
--(void)setAddedTime:(struct timespec *)tp;
--(void)setChangeTime:(struct timespec *)tp;
--(void)setAccessTime:(struct timespec *)tp;
--(void)setBirthTime:(struct timespec *)tp;
--(void)setBackupTime:(struct timespec *)tp;
-
@end
#pragma mark - Get/Set Item Attributes
@@ -79,44 +83,19 @@
FSKIT_API_AVAILABILITY_V1
@interface FSItemSetAttributesRequest : FSItemAttributes
-@property (nonatomic) bool uidWasConsumed;
-@property (nonatomic) bool gidWasConsumed;
-@property (nonatomic) bool typeWasConsumed;
-@property (nonatomic) bool modeWasConsumed;
-@property (nonatomic) bool numLinksWasConsumed;
-@property (nonatomic) bool bsdFlagsWasConsumed;
-@property (nonatomic) bool sizeWasConsumed;
-@property (nonatomic) bool allocSizeWasConsumed;
-@property (nonatomic) bool fileidWasConsumed;
-@property (nonatomic) bool parentidWasConsumed;
-@property (nonatomic) bool accessTimeWasConsumed;
-@property (nonatomic) bool changeTimeWasConsumed;
-@property (nonatomic) bool modifyTimeWasConsumed;
-@property (nonatomic) bool addedTimeWasConsumed;
-@property (nonatomic) bool birthTimeWasConsumed;
-@property (nonatomic) bool backupTimeWasConsumed;
+@property (nonatomic) FSItemAttribute consumedAttributes;
+-(BOOL)wasConsumed:(FSItemAttribute)attribute;
+
@end
FSKIT_API_AVAILABILITY_V1
@interface FSItemGetAttributesRequest : NSObject <NSSecureCoding>
-@property (nonatomic) bool uidWanted;
-@property (nonatomic) bool gidWanted;
-@property (nonatomic) bool typeWanted;
-@property (nonatomic) bool modeWanted;
-@property (nonatomic) bool numLinksWanted;
-@property (nonatomic) bool bsdFlagsWanted;
-@property (nonatomic) bool sizeWanted;
-@property (nonatomic) bool allocSizeWanted;
-@property (nonatomic) bool fileidWanted;
-@property (nonatomic) bool parentidWanted;
-@property (nonatomic) bool accessTimeWanted;
-@property (nonatomic) bool changeTimeWanted;
-@property (nonatomic) bool modifyTimeWanted;
-@property (nonatomic) bool addedTimeWanted;
-@property (nonatomic) bool birthTimeWanted;
-@property (nonatomic) bool backupTimeWanted;
+@property (nonatomic) FSItemAttribute wantedAttributes;
+
+-(BOOL)isWanted:(FSItemAttribute)attribute;
+
@end
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKit.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKit.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKit.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKit.h 2024-07-31 00:44:36
@@ -26,13 +26,11 @@
#import <FSKit/FSClient.h>
#import <FSKit/FSContainer.h>
#import <FSKit/FSEntityIdentifier.h>
-#import <FSKit/FSFileDataBuffer.h>
#import <FSKit/FSFileName.h>
#import <FSKit/FSItem.h>
#import <FSKit/FSMessageConnection.h>
#import <FSKit/FSModuleIdentity.h>
#import <FSKit/FSResource.h>
-#import <FSKit/FSTaskOptionsBundle.h>
#import <FSKit/FSVolume.h>
#import <FSKit/FSVolumeExtent.h>
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKitDefines.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKitDefines.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKitDefines.h 2024-07-13 05:25:28
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKitDefines.h 2024-07-31 00:44:36
@@ -34,7 +34,7 @@
#endif
// original API
-#define FSKIT_API_AVAILABILITY_V1 API_AVAILABLE(macos(14.0)) \
+#define FSKIT_API_AVAILABILITY_V1 API_AVAILABLE(macos(15.0)) \
API_UNAVAILABLE(ios, visionos) API_UNAVAILABLE(watchos, tvos)
// Unavailable in original API
#define FSKIT_API_UNAVAILABLE_V1 API_UNAVAILABLE(macos, ios, visionos) API_UNAVAILABLE(watchos, tvos)
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKitTypes.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKitTypes.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKitTypes.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSKitTypes.h 2024-07-31 00:44:36
@@ -19,6 +19,6 @@
* "force" => @[ @"--force" ]
* "read only" => @[ @"-o", "rdonly" ]
*/
-typedef NSArray <NSString *> *FSTaskParameters;
+typedef NSArray <NSString *> FSTaskParameters;
#endif /* FSKitTypes_h */
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSMessageConnection.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSMessageConnection.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSMessageConnection.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSMessageConnection.h 2024-07-31 00:44:35
@@ -10,101 +10,26 @@
NS_ASSUME_NONNULL_BEGIN
-/** Protocol to run FS task methods from a different process using FSMessageConnection */
+/** This class allows to pass log messages from the filesystem module to the client, and also notify the client when a task is completed.
+ FSKit will create an instance of this class for each long-running operation.
+ */
FSKIT_API_AVAILABILITY_V1
-@protocol FSTaskMessageOperations
+@interface FSMessageConnection : NSObject
/** @method logMessage
- @abstract Logs given data, e.g. log a NSString to stdout, or log to a file.
+ @abstract Logs given to the initiating client.
@param str The string to log
*/
- (void)logMessage:(NSString *)str FSKIT_API_AVAILABILITY_V1;
-/** @method prompt
- @abstract prompt the client for a response, the response string will be in the reply block
- @param prompt The prompt string
- @param reply The reply block containing the response string from the prompt
+/** @method didCompleteWithError
+ @abstract This informs the client that the task is completed
+ @param taskError nil or error status
+ @param completionHandler Block receiving any error stemming from delivering taskError to the client. May be nil if the caller does not need
+ to receive a delivery error.
*/
-- (void)prompt:(NSString *)prompt
- replyHandler:(void (^)(NSString * _Nullable,
- NSError * _Nullable))reply FSKIT_API_AVAILABILITY_V1;
-
-/** @method promptTrueFalse
- @abstract Similar to prompt method, but the response is a bool (handy for prompts like yes/no questions )
- @param prompt The prompt string
- @param reply The reply block containing the response boolean from the prompt
- */
-- (void)promptTrueFalse:(NSString *)prompt
- replyHandler:(void (^)(BOOL,
- NSError * _Nullable))reply FSKIT_API_AVAILABILITY_V1;
-
-/** @method completed
- @abstract This informs the client if our task is completed or not by the response block
- @param error nil or error status
- @param reply Reports status of sending message, or any error from logger.
- */
-- (void)completed:(NSError * _Nullable)error
- replyHandler:(void (^)(int ignore_me, NSError * _Nullable))reply FSKIT_API_AVAILABILITY_V1;
-
-@end
-
-/** This class allows an FSTask to pass log messages and completion information back to an initiating client. It also allows prompting for responses from a user. */
-FSKIT_API_AVAILABILITY_V1
-@interface FSMessageConnection : NSObject<NSSecureCoding, FSTaskMessageOperations>
-
-/** Client information about linguistic, cultural, and technological conventions for use in formatting data for presentation. */
-@property (readonly) NSLocale *locale FSKIT_API_AVAILABILITY_V1;
-
-/** @method connect
- @abstract Establishes a new connection from an application or other process to our service.
- @param reply Block to indicate about any errors.
- */
--(void)connect:(void (^)(NSError * _Nullable)) reply FSKIT_API_AVAILABILITY_V1;
-
-/** @method logLocalizedMessage:table:bundle:array
- @abstract Logs a localized string from given string format, localization table, bundle
- @param formatString The string to localize and log
- @param tableName Localization table
- @param bundle Bundle to find the localization table
- @param array Array of arguments for the format string
- */
--(void)logLocalizedMessage:(NSString *)formatString
- table:(NSString *)tableName
- bundle:(NSBundle *)bundle
- array:(NSArray * _Nullable)array FSKIT_API_AVAILABILITY_V1;
-
-/** @method logLocalizedMessage:table:bundle:arguments
- @abstract Logs a localized string from given string format, localization table, bundle, and arguments list.
- @param formatString The string to localize and log
- @param tableName Localization table
- @param bundle Bundle to find the localization table
- @param argList argument list
- */
--(void)logLocalizedMessage:(NSString *)formatString
- table:(NSString *)tableName
- bundle:(NSBundle *)bundle
- arguments:(va_list)argList FSKIT_API_AVAILABILITY_V1;
-
-/** @method logLocalizedMessage:table:bundle
- @abstract Logs a localized string from given string format, localization table, bundle, and arguments list.
- @param formatString The string to localize and log
- @param tableName Localization table
- @param bundle Bundle to find the localization table
- */
--(void)logLocalizedMessage:(NSString *)formatString
- table:(NSString *)tableName
- bundle:(NSBundle *)bundle, ... FSKIT_API_AVAILABILITY_V1;
-
-
-/** @method localizedMessage:table:bundle
- @abstract Returns a localized message from given message, localization table, and bundle.
- @param message The string to localize (can be a formatted string)
- @param tableName Localization table
- @param bundle Bundle to find the localization table
- */
--(NSString *)localizedMessage:(NSString *)message
- table:(NSString *)tableName
- bundle:(NSBundle *)bundle, ... FSKIT_API_AVAILABILITY_V1;
+- (void)didCompleteWithError:(NSError * _Nullable)taskError
+ completionHandler:(void (^)(NSError * _Nullable deliveryError))completionHandler FSKIT_API_AVAILABILITY_V1;
@end
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSModuleIdentity.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSModuleIdentity.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSModuleIdentity.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSModuleIdentity.h 2024-07-31 00:44:36
@@ -10,20 +10,34 @@
NS_ASSUME_NONNULL_BEGIN
-/** Represents a file system module identity */
+typedef NSString * FSModuleIdentityAttribute FSKIT_API_AVAILABILITY_V1 NS_TYPED_EXTENSIBLE_ENUM;
+
+FS_EXPORT FSModuleIdentityAttribute const FSModuleIdentityAttributeSupportsServerURLs;
+FS_EXPORT FSModuleIdentityAttribute const FSModuleIdentityAttributeSupportsBlockResources;
+FS_EXPORT FSModuleIdentityAttribute const FSModuleIdentityAttributeSupportsKOIO; /* Supports Kernel-offloaded I/O */
+FS_EXPORT FSModuleIdentityAttribute const FSModuleIdentityAttributeShortName;
+FS_EXPORT FSModuleIdentityAttribute const FSModuleIdentityAttributeMediaTypes;
+FS_EXPORT FSModuleIdentityAttribute const FSModuleIdentityAttributePersonalities;
+FS_EXPORT FSModuleIdentityAttribute const FSModuleIdentityAttributeCheckOptionSyntax;
+FS_EXPORT FSModuleIdentityAttribute const FSModuleIdentityAttributeFormatOptionSyntax;
+FS_EXPORT FSModuleIdentityAttribute const FSModuleIdentityAttributeActivateOptionSyntax;
+
+
+/** Represents a filesystem module identity */
FSKIT_API_AVAILABILITY_V1
@interface FSModuleIdentity : NSObject
@property (readonly) NSString *bundleIdentifier FSKIT_API_AVAILABILITY_V1;
-@property (readonly) NSDictionary <NSString *,id> *attributes FSKIT_API_AVAILABILITY_V1;
+@property (readonly) NSDictionary <FSModuleIdentityAttribute ,id>
+ *attributes FSKIT_API_AVAILABILITY_V1;
@property (readonly) NSURL *url FSKIT_API_AVAILABILITY_V1;
-@property (readonly, getter=isEnabled)
- BOOL enabled; // module is enabled
+@property (nonatomic, getter=isEnabled, readonly)
+ BOOL enabled;
@property (readonly, getter=isSystem)
- BOOL system; // Is a system-installed module
+ BOOL system;
@end
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSResource.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSResource.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSResource.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSResource.h 2024-07-31 00:44:36
@@ -5,76 +5,64 @@
// FSKit
//
-#ifndef FSResource_h
-#define FSResource_h
-
-#import <Foundation/Foundation.h> // TAPI has occasionally NOT included this
+#import <Foundation/Foundation.h>
#import <FSKit/FSContainer.h>
#import <FSKit/FSKitDefines.h>
#import <FSKit/FSKitTypes.h>
#import <FSKit/FSMessageConnection.h>
-#import <FSKit/FSTaskOptionsBundle.h>
NS_ASSUME_NONNULL_BEGIN
FSKIT_API_AVAILABILITY_V1
-typedef NS_ENUM(int, FSMatchResult) {
+typedef NS_ENUM(NSInteger, FSMatchResult) {
// No match
- FSMatchNotRecognized = 0,
+ FSMatchResultNotRecognized = 0,
// Probe recognizes this resource but is unable to use
- FSMatchRecognized,
+ FSMatchResultRecognized,
// Probe recognizes this resource and is ready to use, but in a limited capacity
- FSMatchUsableButLimited,
+ FSMatchResultUsableButLimited,
// Probe recognizes this resource and is ready to use
- FSMatchUsable,
+ FSMatchResultUsable,
};
-FSKIT_API_AVAILABILITY_V1
-typedef NS_ENUM(int, FSResourceKind) {
- // generic
- FSResourceKindGeneric = 0,
- // Block Device
- FSResourceKindBlockDevice,
- // Path/catch-all
- FSResourceKindPathURL,
- // Server URL
- FSResourceKindServerURL,
-};
-
/**
- * FSResource - Abstract resource used by file systems to contain or source the volume
+ * FSResource - Abstract resource used by filesystems to contain or source the volume
*/
FSKIT_API_AVAILABILITY_V1
@interface FSResource : NSObject<NSSecureCoding>
-@property (readonly, nonatomic) FSResourceKind kind FSKIT_API_AVAILABILITY_V1;
-@property (nonatomic, setter=revoke:) bool revoked FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic, readonly) BOOL isRevoked;
-+(instancetype _Nullable)dynamicCast:(id)candidate FSKIT_API_AVAILABILITY_V1;
+// Creates a proxy object of self, if you create a proxy from a proxy, you get a copy of that proxy
+- (instancetype)makeProxy;
+- (void)revoke;
+
@end
-#pragma mark - FSBlockDeviceRsource class and helpers
+#pragma mark - FSBlockDeviceResource class and helpers
-typedef struct FSMetaReadahead_s {
+typedef struct {
off_t offset;
size_t length;
-} FSMetaReadahead;
+} FSMetadataReadahead;
-@interface FSKitMetaBlockRange : NSObject
+@interface FSMetadataBlockRange : NSObject
@property (readonly) off_t startBlockOffset;
@property (readonly) uint32_t blockLength;
-@property (readonly) uint32_t numOfBlocks;
+@property (readonly) uint32_t numberOfBlocks;
-(instancetype)initWithOffset:(off_t)startBlockOffset
blockLength:(uint32_t)blockLength
- numOfBlocks:(uint32_t)numOfBlocks;
+ numberOfBlocks:(uint32_t)numberOfBlocks;
+(instancetype)rangeWithOffset:(off_t)startBlockOffset
blockLength:(uint32_t)blockLength
- numOfBlocks:(uint32_t)numOfBlocks;
+ numberOfBlocks:(uint32_t)numberOfBlocks;
+- (instancetype)init NS_UNAVAILABLE;
+
@end
/**
@@ -85,23 +73,24 @@
FSKIT_API_AVAILABILITY_V1
@interface FSBlockDeviceResource : FSResource
--(instancetype _Nullable)initProxyForBSDName:(NSString *)bsdName FSKIT_API_AVAILABILITY_V1;
--(instancetype _Nullable)initProxyForBSDName:(NSString *)bsdName
- writable:(bool)isWritable FSKIT_API_AVAILABILITY_V1;
++ (instancetype _Nullable)proxyResourceForBSDName:(NSString *)BSDName FSKIT_API_AVAILABILITY_V1;
-+(instancetype _Nullable)proxyResourceForBSDName:(NSString *)bsdName FSKIT_API_AVAILABILITY_V1;
++ (instancetype _Nullable)proxyResourceForBSDName:(NSString *)BSDName
+ isWritable:(BOOL)isWritable FSKIT_API_AVAILABILITY_V1;
-+(instancetype _Nullable)proxyResourceForBSDName:(NSString *)bsdName
- writable:(bool)writable FSKIT_API_AVAILABILITY_V1;
+@property (readonly, copy) NSString * BSDName;
+@property (readonly, getter=isWritable)
+ BOOL writable;
+@property (readonly) uint64_t blockSize;
+@property (readonly) uint64_t blockCount;
+@property (readonly) uint64_t physicalBlockSize;
+@property (nonatomic, readonly, getter=isTerminated)
+ BOOL terminated;
-@property (readonly, strong) NSString * bsdName FSKIT_API_AVAILABILITY_V1;
-@property (readonly) bool writable FSKIT_API_AVAILABILITY_V1;
-@property (readonly) NSUInteger blockSize FSKIT_API_AVAILABILITY_V1;
-@property (readonly) NSUInteger blockCount FSKIT_API_AVAILABILITY_V1;
-@property (readonly) NSUInteger physicalBlockSize FSKIT_API_AVAILABILITY_V1;
-@property (nonatomic,setter=terminate:)
- bool terminated FSKIT_API_AVAILABILITY_V1;
+- (instancetype)init NS_UNAVAILABLE;
+- (void)terminate FSKIT_API_AVAILABILITY_V1;
+
/**
* readInto:startingAt:length:replyHandler: - read data into a buffer
*
@@ -123,9 +112,9 @@
*/
-(void)readInto:(void *)buffer
startingAt:(off_t)offset
- length:(size_t)nbytes
+ length:(size_t)length
replyHandler:(void(^)(size_t actuallyRead,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1 NS_REFINED_FOR_SWIFT;
/**
* synchronousReadInto:startingAt:length:replyHandler: - synchronous read data into a buffer
@@ -133,9 +122,9 @@
*/
-(void)synchronousReadInto:(void *)buffer
startingAt:(off_t)offset
- length:(size_t)nbytes
+ length:(size_t)length
replyHandler:(void(^)(size_t actuallyRead,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1 NS_REFINED_FOR_SWIFT;
/**
* writeFrom:startingAt:length:reply: - write data from a buffer
@@ -158,9 +147,9 @@
*/
-(void)writeFrom:(void *)buffer
startingAt:(off_t)offset
- length:(size_t)nbytes
+ length:(size_t)length
replyHandler:(void(^)(size_t actuallyWritten,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1 NS_REFINED_FOR_SWIFT;
/**
* synchronousWriteFrom:startingAt:length:replyHandler: - synchronous write data from a buffer
@@ -168,12 +157,12 @@
*/
-(void)synchronousWriteFrom:(void *)buffer
startingAt:(off_t)offset
- length:(size_t)nbytes
- replyHandler:(void(^)(size_t actuallyRead,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ length:(size_t)length
+ replyHandler:(void(^)(size_t actuallyWritten,
+ NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1 NS_REFINED_FOR_SWIFT;
/**
- * synchronousMetaReadInto:startingAt:length:reply: - synchronous read metadata data into a buffer
+ * synchronousMetadataReadInto:startingAt:length:reply: - synchronous read metadata data into a buffer
*
* This method schedules a metadata read from the resource. The data are read from offset parameter in the file into the buffer located
* at buffer. Up to length bytes are read. To be successful, requests must conform to the transfer requirements of the underlying resource;
@@ -184,23 +173,23 @@
* Reply may be called before readInto:startingAt:length:reply returns, such as when an error is immediately detected.
* Otherwise it will be called when the operation concludes.
*/
--(void)synchronousMetaReadInto:(void *)buffer
- startingAt:(off_t)offset
- length:(size_t)length
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)synchronousMetadataReadInto:(void *)buffer
+ startingAt:(off_t)offset
+ length:(size_t)length
+ replyHandler:(void(^)(NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1 NS_REFINED_FOR_SWIFT;
/**
- * synchronousMetaReadInto:startingAt:length:readAheadExtents:readAheadCount:replyHandler: - synchronous read metadata data into a buffer with read ahead
+ * synchronousMetadataReadInto:startingAt:length:readAheadExtents:readAheadCount:replyHandler: - synchronous read metadata data into a buffer with read ahead
*/
--(void)synchronousMetaReadInto:(void *)buffer
- startingAt:(off_t)offset
- length:(size_t)length
- readAheadExtents:(FSMetaReadahead *)readAheadExtents
- readAheadCount:(int)readAheadExtentsCount
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)synchronousMetadataReadInto:(void *)buffer
+ startingAt:(off_t)offset
+ length:(size_t)length
+ readAheadExtents:(const FSMetadataReadahead *)readAheadExtents
+ readAheadCount:(NSInteger)readAheadExtentsCount
+ replyHandler:(void(^)(NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1 NS_REFINED_FOR_SWIFT;
/**
- * metaWriteFrom:startingAt:length:replyHandler: - write metadata data from a buffer
+ * metadataWriteFrom:startingAt:length:replyHandler: - write metadata data from a buffer
*
* This method schedules a metadata write to the resource. The data are written to offset parameter in the file from the buffer located
* at buffer. Up to length bytes are written. To be successful, requests must conform to the transfer requirements of the underlying resource;
@@ -208,34 +197,34 @@
*
* Error will be nil in case of no error, and non-nil in case of an error. In the case of no error,
*
- * Reply may be called before metaWriteFrom:startingAt:length:reply returns, such as when an error is immediately detected.
+ * Reply may be called before metadataWriteFrom:startingAt:length:reply returns, such as when an error is immediately detected.
* Otherwise it will be called when the operation concludes.
* Note: No assumptions should be made about reply block execution with respect to return from the function.
*/
--(void)metaWriteFrom:(void *)buffer
- startingAt:(off_t)offset
- length:(size_t)length
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)metadataWriteFrom:(void *)buffer
+ startingAt:(off_t)offset
+ length:(size_t)length
+ replyHandler:(void(^)(NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1 NS_REFINED_FOR_SWIFT;
/**
- * synchronousMetaWriteFrom:startingAt:length:replyHandler: - synchronous metadata write data from a buffer
- * This method does exactly what metaWriteFrom:startingAt:length:reply: but in a synchronous way.
+ * synchronousMetadataWriteFrom:startingAt:length:replyHandler: - synchronous metadata write data from a buffer
+ * This method does exactly what metadataWriteFrom:startingAt:length:reply: but in a synchronous way.
*/
--(void)synchronousMetaWriteFrom:(void *)buffer
- startingAt:(off_t)offset
- length:(size_t)length
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)synchronousMetadataWriteFrom:(void *)buffer
+ startingAt:(off_t)offset
+ length:(size_t)length
+ replyHandler:(void(^)(NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1 NS_REFINED_FOR_SWIFT;
/**
- * synchronousDelayedMetaWriteFrom:startingAt:length:replyHandler: - synchronous metadata delayed write data from a buffer
+ * delayedMetadataWriteFrom:startingAt:length:replyHandler: - synchronous metadata delayed write data from a buffer
*/
--(void)synchronousDelayedMetaWriteFrom:(void *)buffer
- startingAt:(off_t)offset
- length:(size_t)length
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)delayedMetadataWriteFrom:(void *)buffer
+ startingAt:(off_t)offset
+ length:(size_t)length
+ replyHandler:(void(^)(NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1 NS_REFINED_FOR_SWIFT;
/**
- * synchronousMetaFlushWithReplyHandler - synchronously flush the resource's buffer cache.
+ * synchronousMetadataFlushWithReplyHandler - synchronously flush the resource's buffer cache.
*
* This method schedules a flush to the resource. Any cached metadata operations is being written to the resource.
*
@@ -243,10 +232,10 @@
*
* Reply is called when an error is detected, or the method finishes its operation (returns).
*/
--(void)synchronousMetaFlushWithReplyHandler:(void (^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)synchronousMetadataFlushWithReplyHandler:(void (^)(NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1;
/**
- * synchronousMetaClear:wait:replyHandler - synchronously clear the given ranges from our buffer cache
+ * synchronousMetadataClear:wait:replyHandler - synchronously clear the given ranges from our buffer cache
*
* This method clears (writes zeroes into) the given ranges in the resource's buffer cache.
*
@@ -256,12 +245,12 @@
*
* Reply is called when an error is detected, or the method finishes its operation (returns).
*/
--(void)synchronousMetaClear:(NSArray<FSKitMetaBlockRange *> *)rangesToClear
- wait:(bool)wait
- replyHandler:(void (^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)synchronousMetadataClear:(NSArray<FSMetadataBlockRange *> *)rangesToClear
+ wait:(BOOL)wait
+ replyHandler:(void (^)(NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1;
/**
- * synchronousMetaClear:replyHandler - synchronously purge the given ranges from our buffer cache
+ * synchronousMetadataClear:replyHandler - synchronously purge the given ranges from our buffer cache
*
* This method purges (removes) the given range from the resource's buffer cache.
*
@@ -269,8 +258,8 @@
*
* Reply is called when an error is detected, or the method finishes its operation (returns).
*/
--(void)synchronousMetaPurge:(NSArray<FSKitMetaBlockRange *> *)rangesToPurge
- replyHandler:(void (^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)synchronousMetadataPurge:(NSArray<FSMetadataBlockRange *> *)rangesToPurge
+ replyHandler:(void (^)(NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1;
@end
@@ -279,37 +268,39 @@
*
* This protocol includes operations to check and possibly format a resource for an FSUnaryFilesystem.
* FSUnaryFilesystems for FSBlockDeviceResources must conform to this protocol, and ones for
- * FSPathURLResources MAY conform to thei protocol.
+ * FSGenericURLResources MAY conform to thei protocol.
*/
FSKIT_API_AVAILABILITY_V1
@protocol FSManageableResourceMaintenanceOperations <NSObject>
@optional
--(void)checkWithParameters:(FSTaskParameters)parameters
+-(void)checkWithParameters:(FSTaskParameters *)parameters
connection:(FSMessageConnection *)connection
taskID:(NSUUID *)taskID
- replyHandler:(void (^)(NSProgress * _Nullable progress, NSError * _Nullable err))reply FSKIT_API_AVAILABILITY_V1;
+ replyHandler:(void (^)(NSProgress * _Nullable progress, NSError * _Nullable err))replyHandler FSKIT_API_AVAILABILITY_V1 NS_SWIFT_NAME(checkFileSystem(parameters:connection:taskID:replyHandler:));
--(void)formatWithParameters:(FSTaskParameters)parameters
+-(void)formatWithParameters:(FSTaskParameters *)parameters
connection:(FSMessageConnection *)connection
taskID:(NSUUID *)taskID
- replyHandler:(void (^)(NSProgress * _Nullable progress, NSError * _Nullable err))reply FSKIT_API_AVAILABILITY_V1;
+ replyHandler:(void (^)(NSProgress * _Nullable progress, NSError * _Nullable err))replyHandler FSKIT_API_AVAILABILITY_V1 NS_SWIFT_NAME(formatFileSystem(parameters:connection:taskID:replyHandler:));
@end
/**
- * FSPathURLResource - FSResource representing a path
+ * FSGenericURLResource - FSResource representing a path
*
* May be either a real file path (possibly security scoped URL)
- * or an abstract path (a string starting with "file://")
+ * or an abstract path
*/
FSKIT_API_AVAILABILITY_V1
-@interface FSPathURLResource : FSResource
+@interface FSGenericURLResource : FSResource
-@property (readonly, strong) NSURL * url FSKIT_API_AVAILABILITY_V1;
+@property (readonly, copy) NSURL * URL;
-+(instancetype _Nullable)resourceWithURL:(NSURL *)url FSKIT_API_AVAILABILITY_V1;
++(instancetype _Nullable)resourceWithURL:(NSURL *)url;
+- (instancetype)init NS_UNAVAILABLE;
+
@end
/**
@@ -318,14 +309,15 @@
FSKIT_API_AVAILABILITY_V1
@interface FSProbeResult : NSObject <NSSecureCoding>
-@property (readonly) FSMatchResult result;
-@property (readonly, nullable) NSString *name;
-@property (readonly, nullable) FSContainerIdentifier *containerID;
+@property (readonly) FSMatchResult result;
+@property (readonly, copy, nullable) NSString *name;
+@property (readonly, nullable) FSContainerIdentifier *containerID;
+(instancetype _Nullable)resultWithResult:(FSMatchResult) result
name:(NSString * _Nullable)name
containerID:(FSContainerIdentifier * _Nullable)containerUUID FSKIT_API_AVAILABILITY_V1;
+-(instancetype)init NS_UNAVAILABLE;
@end
@@ -339,18 +331,13 @@
/**
* @method probeResource:replyHandler: - probe a resource
* @param resource FSResource to be probed
- * @param reply completion block called with result
+ * @param replyHandler completion block called with result
* @discussion Reports the result of probing the given resource.
*/
-@optional
-(void)probeResource:(FSResource *)resource
- replyHandler:(void(^)(FSMatchResult result,
- NSString * _Nullable name,
- FSContainerIdentifier * _Nullable containerID,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ replyHandler:(void(^)(FSProbeResult * _Nullable result,
+ NSError * _Nullable error))replyHandler FSKIT_API_AVAILABILITY_V1;
@end
NS_ASSUME_NONNULL_END
-
-#endif /* FSResource_h */
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSTaskOptionsBundle.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSTaskOptionsBundle.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSTaskOptionsBundle.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSTaskOptionsBundle.h 1969-12-31 19:00:00
@@ -1,101 +0,0 @@
-//
-// Copyright (c) 2022-2023 Apple Inc. All rights reserved.
-//
-// FSTaskOptionsBundle.h
-// FSKit
-//
-
-#import <Foundation/Foundation.h>
-#import <FSKit/FSKitDefines.h>
-#import <FSKit/FSKitTypes.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-typedef NSString * FSTaskParameterConstant FSKIT_API_AVAILABILITY_V1 NS_TYPED_EXTENSIBLE_ENUM;
-
-FS_EXPORT FSTaskParameterConstant const FSTaskParameterConstantForceLoad;
-FS_EXPORT FSTaskParameterConstant const FSTaskParameterConstantReadOnly;
-
-FSKIT_API_AVAILABILITY_V1
-typedef NS_ENUM(uint8_t, FSTaskType) {
- FSTaskCheck = 0,
- FSTaskFormat,
- FSTaskActivate,
-};
-
-/*
- * FSTaskOption - one option in an FSTaskOptionsBundle
- */
-FSKIT_API_AVAILABILITY_V1
-@interface FSTaskOption : NSObject<NSSecureCoding>
-
--( instancetype)init NS_UNAVAILABLE;
-+(nullable instancetype)optionWithoutValue:(NSString *)option FSKIT_API_AVAILABILITY_V1;
-
-+(nullable instancetype)option:(NSString *)option
- value:(NSString *)value FSKIT_API_AVAILABILITY_V1;
-
-@property (readonly) bool hasValue FSKIT_API_AVAILABILITY_V1;
-@property (readonly, retain) NSString * option FSKIT_API_AVAILABILITY_V1;
-@property (readonly, retain) NSString * optionValue FSKIT_API_AVAILABILITY_V1;
-
-@end
-
-/*
- * FSTaskOptionsBundle - CLI options passed to a CLI tool
- *
- * This class wraps a number of options passed to a tool. The
- * canonical example is that of command line options passed to one
- * of the CLI tools (mount_XYZ, fsck_XYZ, newfs_XYZ), however the
- * options may originate in a UI-app.
- */
-FSKIT_API_AVAILABILITY_V1
-@interface FSTaskOptionsBundle : NSObject<NSSecureCoding>
-
-/**
- @method bundleForArguments:count:extension:operationType:errorHandler:
- @abstract generates an FSTaskOptionsBundle corresponding to the suppiied command arguments
- @discussion Uses getopt(3) or getopt_long(3) to process supplied arguments. Processing uses
- the optstring supplied by the identified extension
- @param argv
- array of argument strings to process
- @param argc
- Count of argument strings to process
- @param extensionID
- Identifier of extension whose parameters are being processed
- @param taskType
- Type of operation (FSTaskCheck, FSTaskFormat)
- @param errorHandler
- Block to handle errors encountered during parsing. The error parameter
- will describe the encountered error, If available, the option parameter will contain
- the contents of the option encountering the error.
- */
-+(instancetype)bundleForArguments:(char * _Nonnull const [_Nonnull])argv
- count:(int)argc
- extension:(NSString *)extensionID
- operationType:(FSTaskType)taskType
- errorHandler:(void(^)(NSError *error, NSString * _Nullable option))errorHandler FSKIT_API_AVAILABILITY_V1;
-
-/**
- @method resetOptionEnumeration
- @abstract Reset option parsing to consider any future argv as a new set of arguments
- @discussion Sets option processing state such that the next command option evalutation
- starts fresh. This acton allows parsing multiple sets of arguments, or re-evaluating a set of arguments.
- */
-+(void)resetOptionEnumeration FSKIT_API_AVAILABILITY_V1;
-
--(void)addOption:(FSTaskOption *)opt FSKIT_API_AVAILABILITY_V1;
-
--(void)enumerateOptionsWithBlock:(void(^)(int ch, NSString * _Nullable optarg,
- NSUInteger idx, BOOL *stop))block FSKIT_API_AVAILABILITY_V1;
-
-@property (readonly, copy) NSArray <FSTaskOption *> * options FSKIT_API_AVAILABILITY_V1;
-@property (readonly, copy) FSTaskParameters parameters;
-
-@end
-
-FS_EXPORT NSString *FSCheckOptionSyntaxKey;
-FS_EXPORT NSString *FSFormatOptionSyntaxKey;
-FS_EXPORT NSString *FSActivateOptionSyntaxKey;
-
-NS_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSUnaryFileSystem.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSUnaryFileSystem.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSUnaryFileSystem.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSUnaryFileSystem.h 2024-07-31 00:44:36
@@ -11,14 +11,12 @@
NS_ASSUME_NONNULL_BEGIN
/*
- * FSUnaryFileSystem - base class for a "Simple" module
+ * FSUnaryFileSystem
*
- * A "Simple" file system is characterized by two attributes:
- * 1) One Resource <=> One Volume
- * 2) FSKit offers a fair amount of infrastructure between incoming
- * requests and the requests to the volume object. Examples are
- * funneling all requests to one metadata operation queue, power
- * assertions, and sleep assertions
+ * A base class for a filesystem characterized by One Resource <=> One Volume
+ *
+ * FSUnaryFileSystem filesystems have a life cycle more constrained than FSFileSystem
+ * ones. The one volume and its container have a shared state and lifetime.
*/
FSKIT_API_AVAILABILITY_V1
@interface FSUnaryFileSystem : NSObject <FSFileSystemBase>
@@ -28,9 +26,8 @@
FSKIT_API_AVAILABILITY_V1
@protocol FSUnaryFileSystemOperations <NSObject>
-@optional
-(void)loadResource:(FSResource *)resource
- options:(FSTaskOptionsBundle *)options
+ options:(FSTaskParameters *)options
replyHandler:(void (^)(FSVolume * _Nullable volume,
NSError * _Nullable err))reply FSKIT_API_AVAILABILITY_V1;
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSVolume.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSVolume.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSVolume.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSVolume.h 2024-07-31 00:44:36
@@ -8,270 +8,200 @@
#import <Foundation/Foundation.h>
#import <FSKit/FSKitDefines.h>
#import <FSKit/FSEntityIdentifier.h>
-#import <FSKit/FSFileDataBuffer.h>
#import <FSKit/FSItem.h>
-#import <FSKit/FSTaskOptionsBundle.h>
#import <FSKit/FSContainer.h>
#import <FSKit/FSFileName.h>
#import <FSKit/FSResource.h>
NS_ASSUME_NONNULL_BEGIN
-/*
- * FSVolumeIdentifier - data identfying a volume
- *
- * For most volumes, these data are the bytes of the UUID
- * identifying the volume. Network file systems may access the same
- * underlying volume using different authentication credentials. As
- * such, volume identifiers for those volumes add qualifying data indicative
- * of the specific container.
- */
-@interface FSVolumeIdentifier : FSEntityIdentifier
-@end
+FSKIT_API_AVAILABILITY_V1
+typedef NSUInteger FSDirectoryCookie;
FSKIT_API_AVAILABILITY_V1
-typedef NS_ENUM(int, FSVolumeState) {
- // Volume not ready
- FSVolumeNotReady = 0,
- // Volume is ready, can be verified, repaired, or mounted
- FSVolumeReady,
- // Volume is active, has been mounted
- FSVolumeActive
-};
+FS_EXPORT FSDirectoryCookie const FSDirectoryCookieInitial;
FSKIT_API_AVAILABILITY_V1
-typedef int (^FSDirEntryPacker)(FSFileName * name, FSItemType itemType, uint64_t itemID,
- uint64_t nextCookie, FSItemAttributes * _Nullable itemAttributes, bool isLast);
+typedef NSUInteger FSDirectoryVerifier;
-/**
- FSKitAccessMask is a bitmask of access rights
- */
FSKIT_API_AVAILABILITY_V1
-typedef NS_OPTIONS(uint32_t, FSKitAccessMask) {
- FSAccessReadData = (1<<1),
- FSAccessListDirectory = FSAccessReadData,
- FSAccessWriteData = (1<<2),
- FSAccessAddFile = FSAccessWriteData,
- FSAccessExecute = (1<<3),
- FSAccessSearch = FSAccessExecute,
- FSAccessDelete = (1<<4),
- FSAccessAppendData = (1<<5),
- FSAccessAddSubdirectory = FSAccessAppendData,
- FSAccessDeleteChild = (1<<6),
- FSAccessReadAttributes = (1<<7),
- FSAccessWriteAttributes = (1<<8),
- FSAccessReadExtAttributes = (1<<9),
- FSAccessWriteExtAttributes = (1<<10),
- FSAccessReadSecurity = (1<<11),
- FSAccessWriteSecurity = (1<<12),
- FSAccessTakeOwnership = (1<<13),
-};
+FS_EXPORT FSDirectoryVerifier const FSDirectoryVerifierInitial;
-/**
- FSKitXattrCreateRequirementAndFlags - if the client only wants to create, only replace, or doesn't care
+/* FSVolumeErrorDomain - an error domain for FSVolume usage. */
+FSKIT_API_AVAILABILITY_V1
+FOUNDATION_EXPORT NSErrorDomain const FSVolumeErrorDomain;
- Also leaves space for future flags
- */
+/* Error codes for FSVolumeErrorDomain. */
FSKIT_API_AVAILABILITY_V1
-typedef NS_OPTIONS(uint32_t, FSKitXattrCreateRequirementAndFlags) {
- FSVolumeMustCreateXattr = 0x0002, /* set the value, fail if attr already exists */
- FSVolumeMustReplaceXattr = 0x0004, /* set the value, fail if attr does not exist */
- FSVolumeAlwaysSetXattr = 0x0006, /* set the value regardless of previous state */
- FSVolumeDeleteXattr = 0x0008, /* delete the value, fail if attr does not exist */
+typedef NS_ERROR_ENUM(FSVolumeErrorDomain, FSVolumeErrorCode) {
+ FSVolumeErrorBadDirectoryCookie = 1,
};
FSKIT_API_AVAILABILITY_V1
-typedef NS_OPTIONS(uint32_t, FSKitBlockmapFlags) {
- FSBlockmapRead = 0x000100,
- FSBlockmapWrite = 0x000200,
- FSBlockmapAsync = 0x000400,
- FSBlockmapNoCache = 0x000800,
- FSBlockmapFileIssued = 0x001000,
+typedef NS_OPTIONS(NSInteger, FSDeactivateOptions) {
+ FSDeactivateOptionsForce = 1 << 0
};
+/*
+ * FSVolumeIdentifier - data identifying a volume
+ *
+ * For most volumes, these data are the bytes of the UUID
+ * identifying the volume. Network filesystems may access the same
+ * underlying volume using different authentication credentials. As
+ * such, volume identifiers for those volumes add qualifying data indicative
+ * of the specific container.
+ */
FSKIT_API_AVAILABILITY_V1
-typedef NS_OPTIONS(uint32_t, FSKitPreallocateFlags) {
- FSPreallocateAll = 0x00000002,
- FSPreallocateContig = 0x00000004,
- FSPreallocateFromEOF = 0x00000010,
- FSPreallocateFromVol = 0x00000020,
-};
+NS_SWIFT_NAME(FSVolume.Identifier)
+@interface FSVolumeIdentifier : FSEntityIdentifier
+@end
+/**
+ * @typedef FSDirectoryEntryPacker
+ * This packer block is used in the enumerateDirectory method.
+ * Usage: Call the packer block for each directory entry you would like to return, with:
+ * @param name item's name.
+ * @param itemType item's type.
+ * @param itemID item's ID.
+ * @param nextCookie indicates the cookie value appropriate for resuming the enumeration at the next entry
+ * @param itemAttributes item's attributes. Should be nil if no attributes were requested.
+ * @param isLast Whether this is the last dir entry in the directory.
+ * Return value:
+ * @return YES if the enumeration should exit. NO if the enumeration should continue.
+ */
FSKIT_API_AVAILABILITY_V1
+typedef BOOL (^FSDirectoryEntryPacker)(FSFileName * name,
+ FSItemType itemType,
+ uint64_t itemID,
+ FSDirectoryCookie nextCookie,
+ FSItemAttributes * _Nullable itemAttributes,
+ BOOL isLast);
+
+/**
+ * @interface FSVolumeSupportedCapabilities
+ * An object to group all volume capabilities.
+ */
+FSKIT_API_AVAILABILITY_V1
+NS_SWIFT_NAME(FSVolume.SupportedCapabilities)
@interface FSVolumeSupportedCapabilities : NSObject<NSSecureCoding>
-/** Supports persistent object identifiers and can look up file system objects by their IDs. */
-@property (nonatomic) bool supportsPersistentObjectIDs FSKIT_API_AVAILABILITY_V1;
+/** Supports persistent object identifiers and can look up filesystem objects by their IDs. */
+@property (nonatomic) BOOL supportsPersistentObjectIDs;
/** Supports symbolic links */
-@property (nonatomic) bool supportsSymLinks FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsSymbolicLinks;
/** Supports hard links */
-@property (nonatomic) bool supportsHardLinks FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsHardLinks;
/** Supports a journal used to speed recovery in case of unplanned restart (such as a power outage or crash). This does not necessarily mean the volume is actively using a journal. */
-@property (nonatomic) bool supportsJournal FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsJournal;
/** Supports active journal using a journal for speedy recovery after an unplanned restart. */
-@property (nonatomic) bool supportsJournalActive FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsActiveJournal;
/** Does not store reliable times for the root directory */
-@property (nonatomic) bool supportsNoRootTimes FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL doesNotSupportRootTimes;
/** Supports sparse files, that is, files which can have 'holes' that have never been written to, and thus do not consume space on disk. */
-@property (nonatomic) bool supportsSparseFiles FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsSparseFiles;
/** Supports zero runs, the volume keeps track of allocated but unwritten runs of a file so that it can substitute zeroes without actually writing zeroes to the media. */
-@property (nonatomic) bool supportsZeroRuns FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsZeroRuns;
/** Supports case sensitive, treats upper and lower case characters in file and directory names as different. */
-@property (nonatomic) bool supportsCaseSensitive FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsCaseSensitiveNames;
/** Supports preserving the case of file and directory names. */
-@property (nonatomic) bool supportsCasePreserving FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsCasePreservingNames;
-/** Supports fast statfs, hints to upper layers to indicate that statfs(2) is fast enough that its results need not be cached by the caller. */
-@property (nonatomic) bool supportsFastStatFS FSKIT_API_AVAILABILITY_V1;
+/** Supports fast statFS, hints to upper layers to indicate that statfs(2) is fast enough that its results need not be cached by the caller. */
+@property (nonatomic) BOOL supportsFastStatFS;
/** Supports file sizes larger than 4GB, and potentially up to 2TB */
-@property (nonatomic) bool supports2TBFiles FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supports2TBFiles;
/** Supports open deny modes (e.g., "open for read write, deny write"). */
-@property (nonatomic) bool supportsOpenDenyModes FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsOpenDenyModes;
/** Supports the `UF_HIDDEN` file flag */
-@property (nonatomic) bool supportsHiddenFiles FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsHiddenFiles;
-/** Does not support determining values for total data blocks, available blocks, or free blocks, as in f_blocks, f_bavail, and f_bfree in the struct statfs returned by statfs(2). */
-@property (nonatomic) bool supportsNoVolumeSizes FSKIT_API_AVAILABILITY_V1;
+/** Does not support determining values for total data blocks, available blocks, or free blocks, as in f_blocks, f_bavail, and f_bfree in the struct statFS returned by statfs(2). */
+@property (nonatomic) BOOL doesNotSupportVolumeSizes;
/** Supports 64-bit object IDs, Uses object IDs that are 64-bit. */
-@property (nonatomic) bool supports64BitObjectIDs FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supports64BitObjectIDs;
/** Supports document IDs (an ID which persists across object ID changes) for document revisions. */
-@property (nonatomic) bool supportsDocumentID FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsDocumentID;
/** Does not support setting the UF_IMMUTABLE flag */
-@property (nonatomic) bool supportsNoImmutableFiles FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL doesNotSupportImmutableFiles;
/** Does not support setting file permissions */
-@property (nonatomic) bool supportsNoSettingFilePermissions FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL doesNotSupportSettingFilePermissions;
/** Supports having multiple logical filesystems in a single "partition" which share space. */
-@property (nonatomic) bool supportsSharedSpace FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsSharedSpace;
/** Supports having multiple logical filesystems which may be mounted and unmounted together and may present common filesystem identifier information. */
-@property (nonatomic) bool supportsVolumeGroups FSKIT_API_AVAILABILITY_V1;
+@property (nonatomic) BOOL supportsVolumeGroups;
@end
FSKIT_API_AVAILABILITY_V1
-@interface FSVolumeDescription : NSObject <NSSecureCoding>
-
-@property (readonly, copy) FSVolumeIdentifier *volumeID FSKIT_API_AVAILABILITY_V1;
-@property (readonly, copy) NSString *volumeName FSKIT_API_AVAILABILITY_V1;
-@property (readonly) FSVolumeState volumeState FSKIT_API_AVAILABILITY_V1;
-
-+ (instancetype)volumeDescriptionWithID:(FSVolumeIdentifier *)volID
- name:(NSString *)volName
- state:(FSVolumeState)volState FSKIT_API_AVAILABILITY_V1;
-
-@end
-
-FSKIT_API_AVAILABILITY_V1
@interface FSVolume : NSObject
-@property (strong) FSVolumeIdentifier *volumeID FSKIT_API_AVAILABILITY_V1;
+@property (strong, readonly) FSVolumeIdentifier *volumeID;
-@property (readonly, nonatomic) FSVolumeSupportedCapabilities *volumeSupportedCapabilities FSKIT_API_AVAILABILITY_V1;
+@property (copy) FSFileName *name;
-@property (strong) NSString *volumeName FSKIT_API_AVAILABILITY_V1;
+-(instancetype)init NS_UNAVAILABLE;
-/*
- * Volume state (not ready, ready, active)
- */
-@property (nonatomic) FSVolumeState volumeState FSKIT_API_AVAILABILITY_V1;
+-(instancetype)initWithVolumeID:(FSVolumeIdentifier *)volumeID
+ volumeName:(FSFileName *)volumeName NS_DESIGNATED_INITIALIZER;
-/*
- * wasTerminated - set to true when the volume has been terminated
- *
- * Technically a volume can still be active and terminated, which
- * indicates its underlying resource(s) is/are gone but it is still
- * active.
- */
-@property (nonatomic) bool wasTerminated FSKIT_API_AVAILABILITY_V1;
-
-/*
- * pathConfUnlimited - value returned by pathconf limits when no limit is applied
- *
- * Value is -1;
- */
-@property (readonly,class) int32_t pathConfUnlimited FSKIT_API_AVAILABILITY_V1;
-
-/**
- * globalWorkQueue - global queue on which to do work
- *
- * If non-nil, work will be funneled to this queue for all operations other than rename
- */
-@property (nullable,retain) dispatch_queue_t globalWorkQueue FSKIT_API_AVAILABILITY_V1;
-
-/**
- * reanameWorkQueue - queue on which rename operations are dispatched
- *
- * If accessed without being set, will create a serial queue used for rename operations.
- */
-@property (nonatomic,retain) dispatch_queue_t renameWorkQueue FSKIT_API_AVAILABILITY_V1;
@end
-FSKIT_API_AVAILABILITY_V1
-typedef NS_OPTIONS(uint64_t, FSRenameItemOptions) {
- FSRenameItemOptionReserved = 1 // Reserved for now
-};
-
/*
* FSVolumePathConfOperations
*
* This protocol gathers properties related to the pathfonf and fpathconf
* system calls. They are included in FSVolumeOperations and are gathered here as
* they behave differently than the operations added in FSVolumeOperations. These
- * properties return the value imposed by the file sysem for the given property. For
+ * properties return the value imposed by the filesystem for the given property. For
* files, this value applies to the file. For directories, this value applies to
* all of the items in the directory.
*
* Some values are booleans while other values are numeric. Numeric limits
- * use -1 to represent no limit. The class property pathConfUnlimited returns this
- * value. Boolean properties return 0 for false and -1 for true.
+ * use -1 to represent no limit.
*
- * These properties have names taken from the pathconf(2) property names, with
- * the leading underscore removed.
*/
FSKIT_API_AVAILABILITY_V1
+NS_SWIFT_NAME(FSVolume.PathConfOperations)
@protocol FSVolumePathConfOperations <NSObject>
-// The maximum number of hard links to the object
-- (int32_t)PC_LINK_MAX FSKIT_API_AVAILABILITY_V1;
+// The maximum number of hard links to the object.
+@property (readonly) int32_t maxLinkCount;
-// The maximum length of a component of a filename
-- (int32_t)PC_NAME_MAX FSKIT_API_AVAILABILITY_V1;
+// The maximum length of a component of a filename.
+@property (readonly) int32_t maxNameLength;
-// if TRUE, filesystem will reject chown(2) calls if not superuser
-- (int32_t)PC_CHOWN_RESTRICTED FSKIT_API_AVAILABILITY_V1;
+// if TRUE, filesystem will reject chown(2) calls if not superuser.
+@property (readonly, getter = isChownRestricted) BOOL chownRestricted;
-// If TRUE, filesystem will return ENAMETOOLONG if filename is longer then pcr_name_max
-- (int32_t)PC_NO_TRUNC FSKIT_API_AVAILABILITY_V1;
+// If TRUE, filesystem will truncate the filename to maxNameLength if filename is longer than maxNameLength.
+// If FALSE, filesystem will return ENAMETOOLONG if filename is longer than maxNameLength.
+@property (readonly, getter = isLongNameTruncated) BOOL longNameTruncated;
-// if TRUE, filesystem will ignore case when interpreting filenames
-- (int32_t)PC_CASE_SENSITIVE FSKIT_API_AVAILABILITY_V1;
+// The number of bits used to store maximum extended attribute size in bytes.
+@property (readonly) int32_t maxXattrSizeInBits;
-// if TURE, filesystem will preserve case of a filename during CREATE, MKDIR, RENAME, SYMFSKitNK operations
-- (int32_t)PC_CASE_PRESERVING FSKIT_API_AVAILABILITY_V1;
-
-// The number of bits used to store maximum extended attribute size in bytes
-- (int32_t)PC_XATTR_SIZE_BITS FSKIT_API_AVAILABILITY_V1;
-
/*
- * The minimum number of bits needed to represent, as a SIGNED integer value,
+ * The minimum number of bits needed to represent, as a signed integer value,
* the maximum size of a regular file allowed in the specified directory.
+ * The max file size is 2^(maxFileSizeBits - 1).
*
* Maximum file size (bytes) Maximum (in hex) Unsigned bits Signed bits
* 65,535 0xFFFF 16 17
@@ -279,351 +209,749 @@
* 4,294,967,295 0xFFFFFFFF 32 33
* 18,446,744,073,709,551,615 0xFFFFFFFFFFFFFFFF 64 65
*/
-- (int32_t)PC_FILESIZEBITS FSKIT_API_AVAILABILITY_V1;
+@property (readonly) int32_t maxFileSizeInBits;
@end
+/**
+ * FSStatFSResult - An interface used to report `volumeStatistics`.
+ * Names are taken from `struct statfs` in `statfs(2)`.
+ * These values will be reported to `statfs(2)` result.
+ * All properties have a default value of 0. The filesystem should override these values, unless it has no
+ * meaningful values to override with.
+ * One exception is the fsTypeName, which is readonly, and should be set using the designated initializer.
+ */
FSKIT_API_AVAILABILITY_V1
-@interface FSKitStatfsResult : NSObject <NSSecureCoding>
+@interface FSStatFSResult : NSObject <NSSecureCoding>
-/** Block size, in bytes, of the file system */
-@property (readonly) uint64_t blockSize FSKIT_API_AVAILABILITY_V1;
-/** Optimal transfer block size */
-@property (readonly) uint64_t ioSize FSKIT_API_AVAILABILITY_V1;
-/** Total data blocks in file system */
-@property (readonly) uint64_t totalBlocks FSKIT_API_AVAILABILITY_V1;
+/** Block size, in bytes, of the volume */
+@property uint64_t blockSize;
+/** Optimal block size to perform I/O with.
+ * Should be an even multiple of the block size. */
+@property uint64_t ioSize;
+/** Total data blocks in volume */
+@property uint64_t totalBlocks;
/** Free blocks avail to non-superuser */
-@property (readonly) uint64_t availableBlocks FSKIT_API_AVAILABILITY_V1;
-/** Free blocks in file system */
-@property (readonly) uint64_t freeBlocks FSKIT_API_AVAILABILITY_V1;
-/** Total size, in bytes, of the file system */
-@property (readonly) uint64_t totalBytes FSKIT_API_AVAILABILITY_V1;
-/** The amount of space available to users, in bytes, in the file system */
-@property (readonly) uint64_t availableBytes FSKIT_API_AVAILABILITY_V1;
-/** The amount of free space, in bytes, in the file system */
-@property (readonly) uint64_t freeBytes FSKIT_API_AVAILABILITY_V1;
-/** The total number of file slots in the file system */
-@property (readonly) uint64_t totalFiles FSKIT_API_AVAILABILITY_V1;
-/** The total number of free file slots in the file system */
-@property (readonly) uint64_t freeFiles FSKIT_API_AVAILABILITY_V1;
-/** FS sub-type (flavor) */
-@property (readonly) uint32_t fsSubType FSKIT_API_AVAILABILITY_V1;
-/** FS type name*/
-@property (readonly) NSString * fsTypeName FSKIT_API_AVAILABILITY_V1;
+@property uint64_t availableBlocks;
+/** Free blocks in volume */
+@property uint64_t freeBlocks;
+/** Used blocks in volume */
+@property uint64_t usedBlocks;
+/** Total size, in bytes, of the volume */
+@property uint64_t totalBytes;
+/** The amount of space available to users, in bytes, in the volume */
+@property uint64_t availableBytes;
+/** The amount of free space, in bytes, in the volume */
+@property uint64_t freeBytes;
+/** The amount of used space, in bytes, in the volume */
+@property uint64_t usedBytes;
+/** The total number of file slots in the volume */
+@property uint64_t totalFiles;
+/** The total number of free file slots in the volume */
+@property uint64_t freeFiles;
+/** Filesystem sub-type (flavor).
+ * Should match the FSPersonalities's FSSubType attribute, if exists (within the EXAppExtensionAttributes
+ * dictionary of the module\`s Info.plist). */
+@property uint32_t filesystemSubType;
+/** Filesystem type name.
+ * Should match the FSShortName attribute within the EXAppExtensionAttributes dictionary of the module\`s
+ * Info.plist. Maximal allowed length is `MFSTYPENAMELEN`, including NUL. */
+@property (readonly, copy) NSString * filesystemTypeName;
-+ (instancetype)statFSWithBlockSize:(uint64_t)blockSize
- ioSize:(uint64_t)ioSize
- totalBlocks:(uint64_t)totalBlocks
- availableBlocks:(uint64_t)availableBlocks
- freeBlocks:(uint64_t)freeBlocks
- totalFiles:(uint64_t)totalFiles
- freeFiles:(uint64_t)freeFiles
- fsSubType:(uint32_t)fsSubType
- fsTypeName:(NSString *)fsTypeName FSKIT_API_AVAILABILITY_V1;
+- (instancetype)initWithFSTypeName:(NSString *)filesystemTypeName;
+- (instancetype)init NS_UNAVAILABLE;
+
@end
FSKIT_API_AVAILABILITY_V1
+NS_SWIFT_NAME(FSVolume.Operations)
@protocol FSVolumeOperations <NSObject, FSVolumePathConfOperations>
-/*
- * volumeStatistics - report FSKitStatfsResult data
+
+/**
+ * supportedVolumeCapabilities
+ *
+ * report FSVolumeSupportedCapabilities data.
+ * @return an FSVolumeSupportedCapabilities object, with the volume's supported capabilities.
*/
-@property (readonly, nonatomic) FSKitStatfsResult * volumeStatistics FSKIT_API_AVAILABILITY_V1;
+@property (readonly, nonatomic) FSVolumeSupportedCapabilities *supportedVolumeCapabilities;
+/**
+ * volumeStatistics
+ *
+ * report FSKitStatFSResult data.
+ * @return an FSKitStatFSResult object, with up-to-date volume statistics.
+ */
+@property (readonly, nonatomic) FSStatFSResult * volumeStatistics;
-/*
- * setReady:forced:reply: - transition the volume to either the Ready or NotReady state
+/**
+ * mountWithOptions:replyHandler:
+ *
+ * @brief Some process is trying to mount this volume.
+ * @param reply In case of success, should be called with the newly created root item and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, rootItem is ignored.
*/
--(void)setNewState:(FSVolumeState)wantedState
- forced:(bool)forced
- replyHandler:(void(^)(FSVolumeState newState, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)mountWithOptions:(FSTaskParameters *)options
+ replyHandler:(void(^)(FSItem * _Nullable rootItem,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(mount(options:replyHandler:));
+/**
+ * unmountWithReplyHandler:
+ *
+ * @brief filesystem is being unmounted. All cached state should be cleaned and flushed.
+ * @discussion Implementation should check wasTerminated property to determine if I/O is safe.
+ * If the device isn't noted as terminated, the volume should exit in a state in
+ * which it can be immediately mounted again.
+ */
+-(void)unmountWithReplyHandler:(void(^)(void))reply;
-/*
- * mount - some process is trying to mount this volume
+/**
+ * synchronizeWithReplyHandler:
+ *
+ * @brief sync the volume.
+ * After calling this method, FSKit assumes that the volume
+ * has sent all pending IOs or metadata to the underlying resource.
+ * @param reply should be called with the relevant error, or nil in case of success.
*/
--(void)mount:(FSTaskOptionsBundle *)options
-replyHandler:(void(^)(FSItem * _Nullable rootItem, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)synchronizeWithReplyHandler:(void(^)(NSError * _Nullable error))reply;
-/*
- * unmount - file system is being unmounted. All cached state should be cleaned and flushed.
- * A hint is provided that the device may be gone (unexpected disconnect).
- * If the device isn't noted as termianted, the volume should exit in a state which can be
- * immediately mounted again.
+/**
+ * getAttributes:ofItem:replyHandler:
*
- * Implementation should check wasTerminated property to determine if i/o is safe
+ * @brief Fetch the item attributes for the given FSItem.
+ * @param desiredAttributes requested set of attributes to get.
+ * A given attribute, ATTR, is requested In case <ATTR>Wanted is set.
+ * @param item item to get the attributes for.
+ * @param reply In case of success, should be called with the requested attrs and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, attributes is ignored.
+ * @discussion For filesystems that do not support hard links,
+ * linkCount should be 1 for regular files and symbolic links.
+ * In case the item's bsdFlags contain the UF_COMPRESSED flag,
+ * the filesystem should return the uncompressed size of the file.
*/
--(void)unmount:(void(^)(void))reply FSKIT_API_AVAILABILITY_V1;
+-(void)getAttributes:(FSItemGetAttributesRequest *)desiredAttributes
+ ofItem:(FSItem *)item
+ replyHandler:(void(^)(FSItemAttributes * _Nullable attributes,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(getAttributes(_:of:replyHandler:));
--(void)synchronize:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+/**
+ * setAttributes:onItem:replyHandler:
+ *
+ * @brief Set the given set of item attributes to the given FSItem.
+ * @param newAttributes FSItemSetAttributesRequest including the attributes to set
+ * @param item item to set the attributes for.
+ * @param reply In case of success, should be called with the item's updated attrs
+ * (using the same semantics as the getItemAttributes call) and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, attributes is ignored.
+ * @discussion Note that several attributes are considered to be "read-only",
+ * and attempts to set those attributes should result in an error of EINVAL being returned.
+ * If "size" is set beyond the end of file and the underlying filesystem does not support
+ * sparse files, space to fulfill the new file size must be allocated and either zero-filled
+ * or otherwise configured to read as zeros.
+ * If "size" is set below the current end of file, the file shall be truncated and any space
+ * no longer required to fulfill the new file size must be returned to the filesystem as
+ * free space. Attempts to set "size" on directories and symbolic links must
+ * be ignored (and no error should be returned). If the caller attempts to set
+ * an attribute not supported by the on-disk filesystem format, no error should
+ * be returned; instead, that situation will be detected by the upper layers.
+ */
+-(void)setAttributes:(FSItemSetAttributesRequest *)newAttributes
+ onItem:(FSItem *)item
+ replyHandler:(void(^)(FSItemAttributes * _Nullable attributes,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(setAttributes(_:on:replyHandler:));
--(void)getItemAttributes:(FSItem *)item
- requestedAttributes:(FSItemGetAttributesRequest *)desired
- replyHandler:(void(^)(FSItemAttributes * _Nullable attributes, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+/**
+ * lookupItemNamed:inDirectory:replyHandler:
+ *
+ * @brief Lookup an item within a directory.
+ * @param name item name to lookup.
+ * @param directory directory to look the item in.
+ * @param reply In case of success, should be called with the found item,
+ * the item name (as it's saved within the filesystem), and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, theItem and itemName are ignored.
+ * If the entry does not exist, complete the request with an error
+ * with a domain of NSPOSIXErrorDomain and a code of ENOENT.
--(void)setItemAttributes:(FSItem *)item
- requestedAttributes:(FSItemSetAttributesRequest *)newAttributes
- replyHandler:(void(^)(FSItemAttributes * _Nullable attributes, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ */
+-(void)lookupItemNamed:(FSFileName *)name
+ inDirectory:(FSItem *)directory
+ replyHandler:(void(^)(FSItem * _Nullable theItem,
+ FSFileName * _Nullable itemName,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(lookupItem(named:inDirectory:replyHandler:));
--(void)lookupName:(FSFileName *)name
- inDirectory:(FSItem *)directory
- replyHandler:(void(^)(FSItem * _Nullable theItem, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
-
-/*
- * Implementation should check wasTerminated property to determine if i/o is safe
+/**
+ * reclaimItem:replyHandler:
+ *
+ * @brief Reclaim an item. Releases any resources allocated for the item.
+ * @param item item to reclaim.
+ * @param reply In case of success, should be called with error = nil.
+ * Otherwise, should be called with the relevant error.
+ * Anyway, the resources allocated for this item should be released.
+ * @discussion FSKit guarantees that for every FSItem returned by the volume,
+ * a corresponding reclaim operation will occur once the upper layers no longer
+ * reference that item.
+ *
+ * Note: block device filesystems may wish to assess if the underlying resource has been terminated
+ * before processing reclaim operations. On Unary filesystems, it is especially easy to assess. When such
+ * resources are disconnected from the system, the associated volumes are unmounted. Unmount triggers
+ * reclaiming of all items, and some implementations have benefited greatly from short-circuiting reclaim
+ * in such cases. As the resource has been terminated, all I/O will report an error, and it's easiest to just
+ * avoid the work.
*/
--(void)reclaim:(FSItem *)item
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)reclaimItem:(FSItem *)item
+ replyHandler:(void(^)(NSError * _Nullable error))reply
+NS_SWIFT_NAME(reclaim(item:replyHandler:));
+/**
+ * readSymbolicLink:replyHandler:
+ *
+ * Read a symbolic link.
+ *
+ * @param item symbolic link item to read from.
+ * @param reply In case of success, should be called with the link's contents
+ * and error = nil. Otherwise, should be called with the relevant
+ * error. In that case, contents is ignored. If the item does not
+ * refer to a symbolic link, complete the request with an error
+ * with a domain of NSPOSIXErrorDomain and a code of EINVAL.
+ */
-(void)readSymbolicLink:(FSItem *)item
- replyHandler:(void(^)(FSFileName * _Nullable contents, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ replyHandler:(void(^)(FSFileName * _Nullable contents,
+ NSError * _Nullable error))reply;
-// both directory and files vv
+/**
+ * createItemNamed:type:inDirectory:attributes:replyHandler:
+ *
+ * @brief Create a new file or directory item.
+ * @param name new item's name.
+ * @param type new item's type. Valid options are FSItemTypeFile, FSItemTypeDirectory.
+ * @param directory directory to create the item in.
+ * @param newAttributes Desired set of attributes for the new item.
+ * @param reply In case of success, should be called with the created item, the
+ * item name (as it's saved within the filesystem), and error = nil.
+ * Otherwise, should be called with the relevant error. In that
+ * case, newItem and newItemName are ignored. In case there's
+ * already an item named "name" in the directory, complete the
+ * request with an error with a domain of NSPOSIXErrorDomain and a
+ * code of EEXIST.
+ */
-(void)createItemNamed:(FSFileName *)name
type:(FSItemType)type
inDirectory:(FSItem *)directory
attributes:(FSItemSetAttributesRequest *)newAttributes
replyHandler:(void(^)(FSItem * _Nullable newItem,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ FSFileName * _Nullable newItemName,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(createItem(named:type:inDirectory:attributes:replyHandler:));
+/**
+ * createSymbolicLinkNamed:inDirectory:attributes:linkContents:replyHandler:
+ *
+ * @brief Create a new symbolic link.
+ * @param name new item's name.
+ * @param directory directory to create the item in.
+ * @param newAttributes Desired set of attributes for the new item.
+ * @param contents Contents of the new symbolic link.
+ * @param reply In case of success, should be called with the created item, the
+ * item name (as it's saved within the filesystem), and error = nil.
+ * Otherwise, should be called with the relevant error. In that
+ * case, newItem and newItemName are ignored. In case there's
+ * already an item named "name" in the directory, complete the
+ * request with an error with a domain of NSPOSIXErrorDomain and a
+ * code of EEXIST.
+ */
-(void)createSymbolicLinkNamed:(FSFileName *)name
inDirectory:(FSItem *)directory
attributes:(FSItemSetAttributesRequest *)newAttributes
- linkContents:(NSData *)contents
+ linkContents:(FSFileName *)contents
replyHandler:(void(^)(FSItem * _Nullable newItem,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ FSFileName * _Nullable newItemName,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(createSymbolicLink(named:inDirectory:attributes:linkContents:replyHandler:));
--(void)createLinkof:(FSItem *)item
- named:(FSFileName *)name
- inDirectory:(FSItem *)directory
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+/**
+ * createLinkToItem:named:inDirectory:replyHandler:
+ *
+ * @brief Create a new hard link.
+ * @param item existing item to link to.
+ * @param name new link name.
+ * @param directory directory to create the link in.
+ * @param reply In case of success, should be called with the link name (as it's saved within the
+ * filesystem) with error = nil. Otherwise, complete the request with linkName = nil, and an
+ * error with a domain of NSPOSIXErrorDomain, and the following error code:
+ * EEXIST, in case there's already an item named "name" in the directory.
+ * EMLINK, if creating the hard link would result in exceeding the maximum number of hard
+ * links supported on item.
+ * ENOTSUP, if the filesystem does not support creating hard links to the type of filesystem
+ * object represented by item.
+ */
+-(void)createLinkToItem:(FSItem *)item
+ named:(FSFileName *)name
+ inDirectory:(FSItem *)directory
+ replyHandler:(void(^)(FSFileName * _Nullable linkName,
+ NSError * _Nullable error))reply;
+/**
+ * removeItem:named:inDirectory:replyHandler:
+ *
+ * @brief Remove an existing item.
+ * @param item item to remove.
+ * @param name item name.
+ * @param directory directory to remove the item from.
+ * @param reply In case of success, should be called with error = nil.
+ * Otherwise, should be called with the relevant error.
+ * @discussion This method shouldn't actually remove the item object itself, but
+ * only remove the given item name from the given directory.
+ * The item object should be removed (=deallocated) on reclaimItem.
+ */
-(void)removeItem:(FSItem *)item
named:(FSFileName *)name
fromDirectory:(FSItem *)directory
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ replyHandler:(void(^)(NSError * _Nullable error))reply
+NS_SWIFT_NAME(remove(item:named:fromDirectory:replyHandler:));
-/*
+/**
+ * renameItem:inDirectory:named:toNewName:inDirectory:overItem:replyHandler:
*
- * Return EEXIST if we pass overItem nil but there is an item
+ * @brief This method is used to rename a filesystem object from one path in the filesystem to another.
+ * @param item The actual filesystem object being renamed.
+ * @param sourceDirectory The directory that currently contains the filesystem object being renamed.
+ * @param sourceName The name within sourceDirectory of the filesystem object being renamed.
+ * @param destinationName The new name of the filesystem object being renamed within destinationDirectory.
+ * @param destinationDirectory The directory that will contain the renamed filesystem object.
+ * Note that this *may* be equal to sourceDirectory.
+ * @param overItem The filesystem object if destination exists and has been looked-up before. Could be nil.
+ * In case it is non-nil, it should be marked as 'deleted', so we would free its allocated
+ * space on the next reclaim. After doing so, the operation must finish without errors.
+ * @param reply In case of success, should be called with the item name (as it's saved within the filesystem), and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, newName is ignored.
+ * @discussion The basic algorithm is as follows:
*
- * for overItem when present, removeItem semantics apply
+ * If there is already an object at the "to" location, ensure the objects are compatible:
+ * -- If the "from" object is not a directory and the "to" object is a directory,
+ * fail the operation with an error with a domain of NSPOSIXErrorDomain
+ * and a code of EISDIR.
+ * -- If the "from" object is a directory and the "to" object is not a directory,
+ * fail the operation with an error with a domain of NSPOSIXErrorDomain
+ * and a code of ENOTDIR.
*
+ * If a file move:
+ * -- If the destination file exists:
+ * -- Remove the destination file.
+ * -- If source and destination are in the same directory:
+ * -- Rewrite name in existing directory entry.
+ * else:
+ * -- Write new entry in destination directory.
+ * -- Clear old directory entry.
+ *
+ * If a directory move:
+ * -- If destination directory exists:
+ * -- If destination directory is not empty, fail the operation
+ * with an error with a domain of NSPOSIXErrorDomain and a code of ENOTEMPTY.
+ * -- Remove the destination directory.
+ * -- If source and destination are in the same directory:
+ * -- Rewrite name in existing directory entry.
+ * else:
+ * -- Be sure the destination is not a child of the source.
+ * -- Write new entry in destination directory.
+ * -- Update "." and ".." in the moved directory.
+ * -- Clear old directory entry.
*/
-(void)renameItem:(FSItem *)item
inDirectory:(FSItem *)sourceDirectory
named:(FSFileName *)sourceName
- toDirectory:(FSItem *)destinationDirectory
- newName:(FSFileName *)destinationName
+ toNewName:(FSFileName *)destinationName
+ inDirectory:(FSItem *)destinationDirectory
overItem:(FSItem * _Nullable)overItem
- withOptions:(FSRenameItemOptions)options
- replyHandler:(void(^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ replyHandler:(void(^)(FSFileName * _Nullable newName,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(rename(item:inDirectory:named:toNewName:inDirectory:overItem:replyHandler:));
-// Need to define initial cookie and initial verifier values
+/**
+ * enumerateDirectory:startingAtCookie:verifier:providingAttributes:usingBlock:replyHandler:
+ *
+ * @brief Enumerate the given directory. Called on readdir(3) and getattrlistbulk(2).
+ * Directory entries are returned using the FSDirectoryEntryPacker packer block.
+ * Look at FSDirectoryEntryPacker's definition for further explanation.
+ * @param directory directory to enumerate.
+ * @param cookie used to indicate the location within the directory to enumerate from. The cookie values
+ * are chosen by the developer; they're opaque to FSKit. The first enumerateDirectory
+ * call will have cookie = FSDirectoryCookieInitial. The following calls will have
+ * cookie = the "nextCookie" of the last directory entry packed in the previous call.
+ * @param verifier a tool with which the developer can use to detect if the directory has been changed
+ * since the previous call to enumerateDirectory. The verifier values are chosen by the
+ * developer; they're opaque to FSKit. The first enumerateDirectory call will have
+ * verifier = FSDirectoryVerifierInitial. The following calls will have verifier = the
+ * "currentVerifier" returned from the previous call.
+ * @param attributes desired set of attributes to provide. Nil in case no attributes are required.
+ * @param packer packer block to pack the directory entries.
+ * @param reply In case of success, should be called with the current verifier and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, currentVerifier is ignored.
+ * @discussion The general flow of a enumerateDirectory is as follows:
+ * When an enumeration is started, enumerateDirectory will be called with initial cookie and
+ * verifier values. After packing the initial set of directory entries, enumerateDirectory replies
+ * with the new verifier, a non-zero value that reflects the directory's current version.
+ * When next called, the next set of directory entries should be packed, starting with the entry
+ * associated with cookie. If cookie does not resolve to a valid directory entry, complete the
+ * request with an error with a domain of FSVolumeErrorDomain and a code of
+ * FSVolumeErrorBadDirectoryCookie.
+ *
+ * The volume implementation must ensure that the directory entries' names packed
+ * are acceptable and unambiguous input to all file operations that take names
+ * (like lookupName) without additional normalization.
+ *
+ * Note: In case providingAttributes is not nil, there should always be at least two
+ * entries in a directory: "." (an entry representing the current directory)
+ * and ".." (an entry representing the parent directory).
+ * These entries' type is FSItemTypeDirectory. In the case of the root directory
+ * of the filesystem, "." and ".." have identical contents.
+ * In case providingAttributes = nil, "." and ".." should not be returned.
+ */
-(void)enumerateDirectory:(FSItem *)directory
- startingAtCookie:(uint64_t)cookie
- verifier:(uint64_t)verifier
- provideAttributes:(bool)provideAttributes
- attributes:(FSItemGetAttributesRequest * _Nullable)attributes
- usingBlock:(FSDirEntryPacker)packer //??
- replyHandler:(void(^)(uint64_t newVerifier,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ startingAtCookie:(FSDirectoryCookie)cookie
+ verifier:(FSDirectoryVerifier)verifier
+ providingAttributes:(FSItemGetAttributesRequest * _Nullable)attributes
+ usingBlock:(FSDirectoryEntryPacker)packer
+ replyHandler:(void(^)(FSDirectoryVerifier currentVerifier,
+ NSError * _Nullable error))reply;
-// things to make volume properties
-/*
- * volUUID, volName, location, subType, typeName, CName, blockSize, ioSize,
- * others
+/**
+ * activateWithOptions:replyHandler:
+ *
+ * @brief This method is used to activate this volume instance.
+ * @param options activation options. None are currently defined.
+ * @param reply In case of success, should be called with the root FSItem, and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, rootItem is ignored.
+ * @discussion The volume should allocate any in-memory state required to represent the filesystem.
+ * The volume should allocate an item for the root directory of the filesystem, associate the
+ * filesystem state with that item, and pass it to the reply block.
+ * FSKit will cache the root item for the lifetime of the volume
+ * instance and use it as the jumping off point for all file lookups.
*/
+-(void)activateWithOptions:(FSTaskParameters *)options
+ replyHandler:(void (^)(FSItem * _Nullable rootItem,
+ NSError * _Nullable err))reply
+NS_SWIFT_NAME(activate(options:replyHandler:));
--(void)activate:(FSTaskOptionsBundle *)options
- replyHandler:(void (^)(FSItem * _Nullable rootItem,
- NSError * _Nullable err))reply FSKIT_API_AVAILABILITY_V1;
+/**
+ * deactivateWithOptions:replyHandler:
+ *
+ * @brief This method is used to tear down a previously-initialized volume instance.
+ * @param options de-activation options. None are currently defined.
+ * @param reply In case of success, should be called with error = nil.
+ * Otherwise, should be called with the relevant error.
+ * @discussion The volume should release any resources allocated for the volume instance.
+ * FSKit will guarantee that all other file nodes associated with this filesystem
+ * instance will have been released by a reclaim call. This method should not
+ * need to perform any I/O; in cases where that is desired, FSKit will have
+ * already issued a sync call to perform cleanup-related I/O.
+ */
+-(void)deactivateWithOptions:(FSDeactivateOptions)options
+ replyHandler:(void (^)(NSError * _Nullable err))reply
+NS_SWIFT_NAME(deactivate(options:replyHandler:));
--(void)deactivate:(NSUInteger)options
- replyHandler:(void (^)(NSError * _Nullable err))reply FSKIT_API_AVAILABILITY_V1;
-
-@optional
--(void)otherAttributeNamed:(FSFileName *)name
- of:(FSItem *)item
- replyHandler:(void(^)(NSData * _Nullable data,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
-
--(void)setOtherAttributeNamed:(FSFileName *)name
- of:(FSItem *)item
- with:(NSData * _Nullable)newData
- replyHandler:(void(^)(NSData * _Nullable data,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
-
@end
-FSKIT_API_AVAILABILITY_V1
-@protocol FSVolumeXattrOperations <NSObject>
-
-@optional
-@property bool xattrOperationsInhibited FSKIT_API_AVAILABILITY_V1;
-
-@required
/**
- xattrOf:named:requestID:replyHandler:
- Get the specified extended attribute of theItem.
+ * @typedef FSSetXattrPolicy
+ * Different flags to dictate the setxattr policy.
*/
-- (void)xattrOf:(FSItem *)item
- named:(FSFileName * _Nonnull)name
- replyHandler:(void (^)(NSData * _Nullable value, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+FSKIT_API_AVAILABILITY_V1
+typedef NS_ENUM(NSUInteger, FSSetXattrPolicy) {
+ FSSetXattrPolicyAlwaysSet = 0, /* set the value regardless of previous state */
+ FSSetXattrPolicyMustCreate = 1, /* set the value, fail if xattr already exists */
+ FSSetXattrPolicyMustReplace = 2, /* set the value, fail if xattr does not exist */
+ FSSetXattrPolicyDelete = 3 /* delete the value, fail if xattr does not exist */
+} NS_SWIFT_NAME(FSVolume.SetXattrPolicy);
/**
- setXattrOf:named:value:how:requestID:replyHandler:
- Set the specified extended attribute of theItem. If FSVolumeDeleteXattr is set
- in how, the extended attribute is to be deleted. In this case, value will be nil
+ * @protocol FSVolumeXattrOperations
+ * A protocol for volumes which natively (or partially) support extended attributes.
*/
-- (void)setXattrOf:(FSItem *)item
- named:(FSFileName * _Nonnull)name
- value:(NSData * _Nullable)value
- how:(FSKitXattrCreateRequirementAndFlags)how
- replyHandler:(void (^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+FSKIT_API_AVAILABILITY_V1
+NS_SWIFT_NAME(FSVolume.XattrOperations)
+@protocol FSVolumeXattrOperations <NSObject>
/**
- listXattrsOf:requestID:replyHandler:
- Get the FSKitst extended attributes currently set on theItem.
- Reply data is an array of strings.
+ * @property xattrOperationsInhibited
+ * Should be set to 'true' to prevent FSKit from calling this protocol's
+ * methods, even though the volume conforms to it.
+ * FSKit reads this value (if implemented) on mount.
+ * Changing it during the runtime of the volume won't have an effect.
*/
-- (void)listXattrsOf:(FSItem *)item
- replyHandler:(void (^)(NSArray <NSString *> * _Nullable value, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+@optional
+@property BOOL xattrOperationsInhibited;
-@end
-
/**
- * @protocol FSVolumeLimitedXattrOperations
- * A protocol for volumes which only support a limited set of extended attributes.
+ * supportedXattrNamesForItem:
+ * @brief Returns an array that specifies the Xattr names supported by the given item.
+ * If the given item does not support any Xattrs, nil should be returned.
+ * @param item item to get the info for.
+ * @discussion Should only be implemented by volumes which want to have "limited" extended attributes
+ * support (volumes which fundamentally do not support extended attributes, but use
+ * the extended attribute APIs to expose specific filesystem data).
+ * Note: If implemented, FSKit would assume that there's a partial xattr support, and would
+ * only call this protocol's methods for xattr names returned by this method (for each item).
*/
-FSKIT_API_AVAILABILITY_V1
-@protocol FSVolumeLimitedXattrOperations <NSObject>
+-(NSArray<FSFileName *> *)supportedXattrNamesForItem:(FSItem *)item;
-@optional
-@property bool limitedXattrOperationsInhibited FSKIT_API_AVAILABILITY_V1;
-
@required
-/**
- * supportedXattrNamesOf:
- * Returns an array of strings that specifies the Xattr names supported by the given item.
- * If the given item does not support any Xattrs, nil should be returned.
- */
--(NSArray *)supportedXattrNamesOf:(FSItem *)item FSKIT_API_AVAILABILITY_V1;
/**
- xattrOf:named:requestID:replyHandler:
- Get the specified extended attribute of theItem.
+ * xattrNamed:ofItem:replyHandler:
+ *
+ * @brief Get the specified extended attribute of the given item.
+ * @param name extended attribute name.
+ * @param item item to get the extended attribute of.
+ * @param reply In case of success, should be called with the xattr value, and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, value is ignored.
+ * In case the given attribute does not exist, complete the request with an error with
+ * a domain of NSPOSIXErrorDomain and a code of ENOATTR.
+ * @discussion Will only be called for extended attributes supported by the given item.
*/
--(void)xattrOf:(FSItem *)item
- named:(FSFileName * _Nonnull)name
- replyHandler:(void (^)(NSData * _Nullable value, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)xattrNamed:(FSFileName *)name
+ ofItem:(FSItem *)item
+ replyHandler:(void (^)(NSData * _Nullable value,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(xattr(named:ofItem:replyHandler:));
/**
- setXattrOf:named:value:how:requestID:replyHandler:
- Set the specified extended attribute of theItem. If FSVolumeDeleteXattr is set
- in how, the extended attribute is to be deleted. In this case, value will be nil
+ * setXattrNamed:toData:onItem:policy:replyHandler:
+ *
+ * @brief Set the specified extended attribute to item.
+ * @param name extended attribute name.
+ * @param value extended attribute value. It can only be nil in case policy = FSSetXattrPolicyDeleteXattr.
+ * @param item item to set the extended attribute to.
+ * @param policy creation policy. See FSSetXattrPolicy for further documentation.
+ * @param reply In case of success, should be called with error = nil.
+ * Otherwise, should be called with the relevant error.
*/
--(void)setXattrOf:(FSItem *)item
- named:(FSFileName * _Nonnull)name
- value:(NSData * _Nullable)value
- how:(FSKitXattrCreateRequirementAndFlags)how
- replyHandler:(void (^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)setXattrNamed:(FSFileName *)name
+ toData:(NSData * _Nullable)value
+ onItem:(FSItem *)item
+ policy:(FSSetXattrPolicy)policy
+ replyHandler:(void (^)(NSError * _Nullable error))reply
+NS_SWIFT_NAME(setXattr(named:toData:onItem:policy:replyHandler:));
/**
- listXattrsOf:requestID:replyHandler:
- Get the FSKitst extended attributes currently set on theItem.
- Reply data is an array of strings.
+ * listXattrsOfItem:replyHandler:
+ *
+ * @brief Get the list of extended attributes currently set on the given item.
+ * @param item item to get the xattr list for.
+ * @param reply In case of success, should be called with the xattr list, and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, value is ignored.
*/
--(void)listXattrsOf:(FSItem *)item
- replyHandler:(void (^)(NSArray <NSString *> * _Nullable value, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)listXattrsOfItem:(FSItem *)item
+ replyHandler:(void (^)(NSArray <FSFileName *> * _Nullable value,
+ NSError * _Nullable error))reply;
@end
-/*
- * FSVolumeOpenCloseOperations - protocol for open/close
- *
- * File systems which want to receive open and close calls for each
- * item conform to this protocol. If this protocol is not implemented, the
- * kernel layer is free to skip making such calls to the FSModule
+FSKIT_API_AVAILABILITY_V1
+typedef NS_OPTIONS(NSUInteger, FSVolumeOpenModes) {
+ FSVolumeOpenModesRead = FREAD,
+ FSVolumeOpenModesWrite = FWRITE
+} NS_SWIFT_NAME(FSVolume.OpenModes);
+
+/**
+ * @protocol FSVolumeOpenCloseOperations
+ * A protocol for open/close. Filesystems which want to receive open and
+ * close calls for each item should conform to this protocol. If this protocol is not
+ * implemented, the kernel layer is free to skip making such calls to the volume.
*/
FSKIT_API_AVAILABILITY_V1
+NS_SWIFT_NAME(FSVolume.OpenCloseOperations)
@protocol FSVolumeOpenCloseOperations <NSObject>
-- (void)openItem:(FSItem *)item
- withMode:(int)mode
- replyHandler:(void (^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
-
/**
- closeItem:keepingMode:requestID:replyHandler: close a file access
+ * openItem:withMode:replyHandler:
+ *
+ * @brief open a file for access.
+ * @param mode The set of mode flags to open the item with.
+ * @param reply In case of success, should be called with error = nil.
+ * Otherwise, should be called with the relevant error.
+ */
+-(void)openItem:(FSItem *)item
+ withModes:(FSVolumeOpenModes)mode
+ replyHandler:(void (^)(NSError * _Nullable error))reply
+NS_SWIFT_NAME(openItem(_:modes:replyHandler:));
- mode is the set of mode flags (FREAD, FWRITE) to keep after this close. Upper layers
- keep track of how many read-only, write-only, and read-write opens are active, and send
- flags representing the still-open results.
+/**
+ * closeItem:keepingMode:replyHandler:
+ *
+ * @brief close a file access
+ * @param mode The set of mode flags to keep after this close.
+ * @param reply In case of success, should be called with error = nil.
+ * Otherwise, should be called with the relevant error.
*/
-- (void)closeItem:(FSItem *)item
- keepingMode:(int)mode
- replyHandler:(void (^)(NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+-(void)closeItem:(FSItem *)item
+ keepingModes:(FSVolumeOpenModes)mode
+ replyHandler:(void (^)(NSError * _Nullable error))reply;
@end
-/*
- * FSVolumeReadWriteOperations
- *
- * Read and Write operations where we deliver data to/from the extension
+/**
+ * @protocol FSVolumeReadWriteOperations
+ * A protocol for read and write operations where we deliver data to/from the extension.
*/
FSKIT_API_AVAILABILITY_V1
+NS_SWIFT_NAME(FSVolume.ReadWriteOperations)
@protocol FSVolumeReadWriteOperations <NSObject>
+/**
+ * readFromFile:offset:length:intoBuffer:replyHandler:
+ *
+ * @brief Read the contents of the given file item.
+ * @param item item to read the contents of.
+ * @param offset offset in file to start reading from.
+ * @param length amount of bytes to read.
+ * @param buffer buffer to store the result in.
+ * @param reply In case of success, should be called with the amount of bytes read, and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, actuallyRead should
+ * still contain the amount of bytes read before the error.
+ * In case of the following errors, complete the request with an error with
+ * a domain of NSPOSIXErrorDomain and the following error code:
+ * EISDIR, if the item refers to a directory.
+ * EINVAL, if the item refers to something other than a file or a
+ * directory.
+ * @discussion If the number of bytes requested exceeds the number of bytes available
+ * before the end of the file, then only those bytes are returned. If offset points
+ * beyond the last valid byte of the file, the method exit with error = nil and
+ * actuallyRead = 0.
+ */
-(void)readFromFile:(FSItem *)item
offset:(uint64_t)offset
length:(size_t)length
- buffer:(FSMutableFileDataBuffer *)buffer
- replyHandler:(void(^)(size_t actuallyRead, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+ intoBuffer:(NSMutableData *)buffer
+ replyHandler:(void(^)(size_t actuallyRead,
+ NSError * _Nullable error))reply;
--(void)writeToFile:(FSItem *)item
- offset:(uint64_t)offset
- buffer:(NSData *)buffer
- replyHandler:(void(^)(size_t actuallyWritten, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
-// Document that both methods above need to return correct actually values even if returning an error
+/**
+ * writeContents:toFile:atOffset:replyHandler:
+ *
+ * @brief Write contents to the given file item.
+ * @param item item to write contents to
+ * @param offset offset in file to start writing from.
+ * @param contents buffer containing the contents.
+ * @param reply In case of success, should be called with the amount of bytes
+ * written, and error = nil. Otherwise, should be called with the
+ * relevant error. In that case, actuallyWritten should still
+ * contain the amount of bytes written before the error. In case
+ * of the following errors, complete the request with an error with
+ * a domain of NSPOSIXErrorDomain and the following error code:
+ * EISDIR, if the item refers to a directory.
+ * EINVAL, if the item refers to something other than a file or a
+ * directory.
+ * ENOSPC, if no part of the range was successfully written in an
+ * out-of-space condition.
+ * @discussion This routine is expected to allocate space in the filesystem to extend the file as necessary.
+ * If the filesystem runs out of space, but succeeds in writing any part of the requested range,
+ * the method should succeed and actuallyWritten should reflect the number of bytes successfully
+ * written before space was exhausted.
+ */
+- (void)writeContents:(NSData *)contents
+ toFile:(FSItem *)item
+ atOffset:(uint64_t)offset
+ replyHandler:(void(^)(size_t actuallyWritten,
+ NSError * _Nullable error))reply;
@end
+/**
+ * @typedef FSAccessMask
+ * A bitmask of access rights.
+ */
FSKIT_API_AVAILABILITY_V1
-@protocol FSVolumeAccessCheckOperations <NSObject>
+typedef NS_OPTIONS(NSUInteger, FSAccessMask) {
+ FSAccessReadData = (1<<1),
+ FSAccessListDirectory = FSAccessReadData,
+ FSAccessWriteData = (1<<2),
+ FSAccessAddFile = FSAccessWriteData,
+ FSAccessExecute = (1<<3),
+ FSAccessSearch = FSAccessExecute,
+ FSAccessDelete = (1<<4),
+ FSAccessAppendData = (1<<5),
+ FSAccessAddSubdirectory = FSAccessAppendData,
+ FSAccessDeleteChild = (1<<6),
+ FSAccessReadAttributes = (1<<7),
+ FSAccessWriteAttributes = (1<<8),
+ FSAccessReadXattr = (1<<9),
+ FSAccessWriteXattr = (1<<10),
+ FSAccessReadSecurity = (1<<11),
+ FSAccessWriteSecurity = (1<<12),
+ FSAccessTakeOwnership = (1<<13),
+} NS_SWIFT_NAME(FSVolume.AccessMask);
-- (void)checkAccessTo:(FSItem *)theItem
- requestedAccess:(FSKitAccessMask)access
- replyHandler:(void(^)(int result, NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
-
-@end
-
-/*
- * FSVolumeCloneOperations
+/**
+ * @protocol FSVolumeAccessCheckOperations
+ * A protocol for access check operations.
*/
FSKIT_API_AVAILABILITY_V1
-@protocol FSVolumeCloneOperations <NSObject>
+NS_SWIFT_NAME(FSVolume.AccessCheckOperations)
+@protocol FSVolumeAccessCheckOperations <NSObject>
-- (void)makeCloneOf:(FSItem *)sourceFile
- inDirectory:(FSItem *)theDirectory
- named:(FSFileName *)name
- attributes:(FSItemSetAttributesRequest *)attrs
- usingFlags:(uint32_t)flags
- replyHandler:(void (^)(FSItem * _Nullable newItem,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+/**
+ * @property accessCheckOperationsInhibited
+ * Should be set to 'true' to prevert FSKit from calling this protocol's
+ * methods, even though the volume conforms to it.
+ * FSKit reads this value (if implemented) on mount.
+ * Changing it during the runtime of the volume won't have an effect.
+ */
+@optional
+@property BOOL accessCheckOperationsInhibited;
+@required
+/**
+ * checkAccessToItem:requestedAccess:replyHandler:
+ *
+ * @brief Check if the requested access for the given item is allowed.
+ * @param theItem item to check access for.
+ * @param access requested set of access types to check.
+ * @param reply In case of success, should be called with the result, and error = nil.
+ * result = 0: access is allowed
+ * result = EACCES: access is denied.
+ * Otherwise, should be called with the relevant error. In that case, result is ignored.
+ */
+-(void)checkAccessToItem:(FSItem *)theItem
+ requestedAccess:(FSAccessMask)access
+ replyHandler:(void(^)(BOOL shouldAllowAccess,
+ NSError * _Nullable error))reply;
+
@end
-/*
- * FSVolumeRenameOperations
+/**
+ * @protocol FSVolumeRenameOperations
+ * A protocol for volume rename operations.
*/
FSKIT_API_AVAILABILITY_V1
+NS_SWIFT_NAME(FSVolume.RenameOperations)
@protocol FSVolumeRenameOperations <NSObject>
-@property bool renameOperationsInhibited FSKIT_API_AVAILABILITY_V1;
+/**
+ * @property volumeRenameOperationsInhibited
+ * Should be set to 'true' to prevert FSKit from calling this protocol's
+ * methods, even though the volume conforms to it.
+ * FSKit reads this value (if implemented) on mount.
+ * Changing it during the runtime of the volume won't have an effect.
+ */
+@optional
+@property BOOL volumeRenameOperationsInhibited;
--(void)renameVolume:(FSFileName *)name
- replyHandler:(void(^)(FSFileName *newName,
- NSError * _Nullable error))reply FSKIT_API_AVAILABILITY_V1;
+@required
+/**
+ * setVolumeName:replyHandler:
+ *
+ * @brief Set a new name for the volume.
+ * @param name New volume name.
+ * @param reply In case of success, should be called with the new name, and error = nil.
+ * Otherwise, should be called with the relevant error. In that case, newName is ignored.
+ */
+-(void)setVolumeName:(FSFileName *)name
+ replyHandler:(void(^)(FSFileName *newName,
+ NSError * _Nullable error))reply;
@end
diff -ruN /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSVolumeExtent.h /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSVolumeExtent.h
--- /Applications/Xcode_16.0.0-beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSVolumeExtent.h 2024-07-13 05:25:27
+++ /Applications/Xcode_16.0.0-beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/FSKit.framework/Headers/FSVolumeExtent.h 2024-07-31 00:44:36
@@ -10,63 +10,161 @@
NS_ASSUME_NONNULL_BEGIN
+typedef uint64_t FSOperationID;
+
+/**
+ * @typedef FSBlockmapFlags
+ * Different flags for the blockmap operation.
+ */
FSKIT_API_AVAILABILITY_V1
+typedef NS_OPTIONS(uint32_t, FSBlockmapFlags) {
+ FSBlockmapFlagsRead = 0x000100,
+ FSBlockmapFlagsWrite = 0x000200,
+ FSBlockmapFlagsAsync = 0x000400,
+ FSBlockmapFlagsNoCache = 0x000800,
+ FSBlockmapFlagsFileIssued = 0x001000,
+};
+
+/**
+ * @typedef FSExtentType
+ * Different flags for an extent type:
+ * - FSExtentTypeData means that the extent contains valid data
+ * - FSExtentTypeZero means that the extent contains no data
+ */
+FSKIT_API_AVAILABILITY_V1
typedef NS_ENUM(int, FSExtentType) {
FSExtentTypeData = 0,
FSExtentTypeZero = 1,
};
+/**
+ Extents are used to describe to the kernel parts of the space on disk assigned
+ to a specific file. That space is described by a physical offset on disk, a
+ length and a logical offset within the file.
+ The extent packer takes this information and packs the extent so it can be
+ passed to the kernel.
+ @return YES if the backend needs to continue supplying extents, NO otherwise
+ */
FSKIT_API_AVAILABILITY_V1
-typedef int (^FSExtentPacker)(FSBlockDeviceResource * resource, FSExtentType type,
- uint64_t logOffset, uint64_t phyOffset, uint32_t length);
+typedef BOOL (^FSExtentPacker)(FSBlockDeviceResource * resource, FSExtentType type,
+ uint64_t logicalOffset, uint64_t physicalOffset, uint32_t length);
/*
- * FSVolumeKernelOffloadedIOOperations - protocol of Kernel Offloaded IO operations
+ * FSVolumeKOIOOperations - protocol of Kernel Offloaded IO operations
*/
-@protocol FSVolumeKernelOffloadedIOOperations <NSObject>
+FSKIT_API_AVAILABILITY_V1
+@protocol FSVolumeKOIOOperations <NSObject>
+/**
+ Map a file's disk space into extents for kernel-offloaded I/O
+ @param item The item that its disk space will be mapped
+ @param theRange The range defining the disk space to map, contains a start point
+ and length
+ @param firstIO YES if this is the first call for this range. The packer can only
+ allocate a certain number of extents internally. When it is out
+ of space, it will return YES, meaning a new blockmapFile is
+ required with a new packer
+ @param operationID A unique identifier of the blockmap call, will be 0 in case
+ it will be called more than once
+ @param reply A reply block to report back the result
+ */
- (void)blockmapFile:(FSItem *)item
range:(NSRange)theRange
- startIO:(boolean_t)starting
- flags:(FSKitBlockmapFlags)flags
- operationID:(uint64_t)operationID
+ startIO:(BOOL)firstIO
+ flags:(FSBlockmapFlags)flags
+ operationID:(FSOperationID)operationID
usingPacker:(FSExtentPacker)packer
replyHandler:(void (^)(NSError * _Nullable error))reply;
+/**
+ Update a file's metadata such as its size and modification time after a
+ kernel-offloaded I/O operation.
+ @param item The item for which I/O was done
+ @param originalRange The range on which the I/O was done
+ @param ioStatus If nil, I/O was successfull. Else, it indicates the error
+ @param flags An enum value indicating the operation type
+ @param operationID A unique identifier of the specific I/O operation
+ */
- (void)endIO:(FSItem *)item
range:(NSRange)originalRange
- status:(int)ioStatus
- flags:(FSKitBlockmapFlags)flags
- operationID:(uint64_t)operationID
+ status:(NSError *)ioStatus
+ flags:(FSBlockmapFlags)flags
+ operationID:(FSOperationID)operationID
replyHandler:(void (^)(NSError * _Nullable error))reply;
--(void)createItemNamed:(FSFileName *)name
- type:(FSItemType)type
+/**
+ Create a file with the given attributes in the given directory using an extent packer.
+ If `newAttributes` define a size > 0, the packer can be used by the implementing
+ backend to map this space and make it ready to use by the kernel, thus saving
+ a call to `blockmapFile` later on.
+ @param name The file's name
+ @param directory The parent directory of the file
+ @param newAttributes Attributes describing the file's properties
+ @param packer An extent packer to be called on the newly allocated space, optional
+ @param reply Reply block to report the new item and the result
+ */
+-(void)createFileNamed:(FSFileName *)name
inDirectory:(FSItem *)directory
attributes:(FSItemSetAttributesRequest *)newAttributes
usingPacker:(FSExtentPacker)packer
replyHandler:(void(^)(FSItem * _Nullable newItem,
- NSError * _Nullable error))reply;
+ FSFileName * _Nullable newItemName,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(createFile(named:inDirectory:attributes:packer:replyHandler:));
--(void)lookupName:(FSFileName *)name
- inDirectory:(FSItem *)directory
- usingPacker:(FSExtentPacker)packer
- replyHandler:(void(^)(FSItem * _Nullable theItem,
- NSError * _Nullable error))reply;
+/**
+ Look up an item of a given name in a given directory, map its disk-space if it
+ is found and it is a file.
+ @param name The item's name
+ @param directory The directory to search the item in
+ @param packer An extent packer to pack the item's allocated disk space if it is a file, optional
+ @param reply A reply block to report back the item and the search result.
+ */
+-(void)lookupItemNamed:(FSFileName *)name
+ inDirectory:(FSItem *)directory
+ usingPacker:(FSExtentPacker)packer
+ replyHandler:(void(^)(FSItem * _Nullable theItem,
+ FSFileName * _Nullable itemName,
+ NSError * _Nullable error))reply
+NS_SWIFT_NAME(lookupItem(named:inDirectory:packer:replyHandler:));
@end
+/**
+ * @typedef FSPreallocateFlags
+ * Different flags for the preallocate operations.
+ */
+FSKIT_API_AVAILABILITY_V1
+typedef NS_OPTIONS(uint32_t, FSPreallocateFlags) {
+ FSPreallocateAll = 0x00000002, /*!Allocate all requested space or no space at all*/
+ FSPreallocateContig = 0x00000004, /*!Allocate contiguous space*/
+ FSPreallocateFromEOF = 0x00000010, /*!Allocate from the physical end of file*/
+ FSPreallocateFromVol = 0x00000020, /*!Allocate from the volume offset*/
+};
+
/*
- * FSVolumePreallocOperations
+ * FSVolumePreallocateOperations
*/
+FSKIT_API_AVAILABILITY_V1
@protocol FSVolumePreallocateOperations <NSObject>
-@property bool preallocateOperationsInhibited;
+@optional
+@property BOOL preallocateOperationsInhibited;
+/**
+ Preallocate disk space for an item.
+ @param item The item for which to preallocate space
+ @param offset The offset from which to allocate
+ @param length The length of the space in bytes
+ @param flags Preallocate flags from the `FSPreallocateFlags` described above
+ @param packer If given, used to pack the preallocated space and report it to the kernel
+ @param reply Reply block to report back the result
+ */
+@required
-(void)preallocate:(FSItem *)item
offset:(uint64_t)offset
length:(size_t)length
- flags:(FSKitPreallocateFlags)flags
+ flags:(FSPreallocateFlags)flags
usingPacker:(FSExtentPacker)packer
replyHandler:(void(^)(size_t bytesAllocated,
NSError * _Nullable error))reply;
- README
- xcode13.0 Binding Status
- xcode13.1 Binding Status
- xcode13.2 Binding Status
- xcode13.3 Binding Status
- xcode13.4 Binding Status
- xcode14.0 Binding Status
- xcode14.1 Binding Status
- xcode14.2 Binding Status
- xcode14.3 Binding Status
- xcode15.0 Binding Status
- xcode15.1 Binding Status
- xcode15.3 Binding Status
- xcode15.4 Binding Status
- xcode16.0 Binding Status
- xcode16.1 Binding Status
- xcode16.2 Binding Status