8typedef struct VFSDirEnt {
15typedef struct VFSSearch {
26typedef struct VFSMount VFSMount;
29typedef struct VFSCand {
37#define SType_VFSCand VFSCand*
38#define STStorageType_VFSCand VFSCand
39#define STypeArg_VFSCand(type, val) stgeneric(opaque, &(val))
40#define STypeArgPtr_VFSCand(type, val) &stgeneric(opaque, (val))
41#define STypeCheckedArg_VFSCand(type, val) stType(type), stArg(type, val)
42#define STypeCheckedPtrArg_VFSCand(type, val) stType(type), stArgPtr(type, val)
45typedef struct VFSPendEnt {
53#define SType_VFSPendEnt VFSPendEnt*
54#define STStorageType_VFSPendEnt VFSPendEnt
55#define STypeArg_VFSPendEnt(type, val) stgeneric(opaque, &(val))
56#define STypeArgPtr_VFSPendEnt(type, val) &stgeneric(opaque, (val))
57#define STypeCheckedArg_VFSPendEnt(type, val) stType(type), stArg(type, val)
58#define STypeCheckedPtrArg_VFSPendEnt(type, val) stType(type), stArgPtr(type, val)
60typedef struct VFSCacheEnt {
64VFSCacheEnt* _vfsCacheEntCreate(VFSMount* m, strref opath);
65extern STypeOps VFSCacheEnt_ops;
67typedef struct VFSDir VFSDir;
68typedef struct VFSDir {
78 atomic(uint64) touched;
81_Ret_valid_ VFSDir* _vfsDirCreate(_Inout_
VFS* vfs, _In_opt_ VFSDir* parent);
86#define SType_VFSDir VFSDir*
87#define STStorageType_VFSDir VFSDir*
88#define STypeArg_VFSDir(type, val) stgeneric(ptr, val)
89#define STypeArgPtr_VFSDir(type, val) (stgeneric*)stCheckPtr(ptr, (void**)(val))
90#define STypeCheckedArg_VFSDir(type, val) stType(type), stArg(type, val)
91#define STypeCheckedPtrArg_VFSDir(type, val) stType(type), stArgPtr(type, val)
94#define SType_VFSCacheEnt VFSCacheEnt*
95#define STStorageType_VFSCacheEnt VFSCacheEnt*
96#define STypeArg_VFSCacheEnt(type, val) stgeneric(ptr, val)
97#define STypeArgPtr_VFSCacheEnt(type, val) (stgeneric*)stCheckPtr(ptr, (void**)(val))
98#define STypeCheckedArg_VFSCacheEnt(type, val) stType(type), stArg(type, val)
99#define STypeCheckedPtrArg_VFSCacheEnt(type, val) stType(type), stArgPtr(type, val)
104_Ret_valid_ _When_(!exclusive, _Requires_shared_lock_held_(vfs->vfslock)) VFSDir*
105_vfsGetDir(_Inout_
VFS* vfs, _In_opt_ strref path,
bool isfile,
bool cache,
bool exclusive);
108_Ret_valid_ _When_(!exclusive, _Requires_shared_lock_held_(vfs->vfslock)) VFSCacheEnt*
109_vfsGetFile(_Inout_
VFS* vfs, _In_opt_ strref path,
bool exclusive);
111enum VFS_FIND_PROVIDER_ENUM {
112 VFS_FindWriteFile = 0x0100,
113 VFS_FindCreate = 0x0200,
114 VFS_FindDelete = 0x0400,
115 VFS_FindCache = 0x1000,
117_Ret_opt_valid_ VFSMount*
118_vfsFindMount(_Inout_
VFS* vfs, _Inout_
string* rpath, _In_opt_ strref path,
119 _Out_opt_ VFSMount** cowmount, _Inout_opt_
string* cowrpath, flags_t flags);
122_Ret_opt_valid_ VFSMount* _vfsFindSelfMount(_Inout_
VFS* vfs, _In_opt_ strref abspath);
123void _vfsInvalidateCache(_Inout_
VFS* vfs, _In_opt_ strref path);
124void _vfsInvalidateRecursive(_Inout_
VFS* vfs, _In_ VFSDir* dir,
bool havelock);
126_Requires_shared_lock_held_(vfs->vfslock) void _vfsAbsPath(_Inout_
VFS* vfs, _Inout_
string* out,
127 _In_opt_ strref path);
131_Requires_shared_lock_held_(vfs->vfslock)
void _vfsSnapshot(_Inout_
VFS* vfs,
132 _Inout_ sa_VFSCand* out,
133 _In_opt_ strref abspath,
bool isfile);
136_Requires_exclusive_lock_held_(vfs->vfslock)
void _vfsFlushPending(_Inout_
VFS* vfs,
137 _In_ sa_VFSPendEnt* pending);
145int _vfsFindCIHelper(_Inout_
string* out, _In_opt_ strref mountpath, _In_ sa_string components,
146 _Inout_ VFSMount* mount, _Inout_ VFSProvider* provif,
147 _Inout_ sa_VFSPendEnt* pending);
151void _vfsMaybeEvict(_Inout_
VFS* vfs);
153bool _vfsAddPlatformSpecificMounts(_Inout_
VFS* vfs);
154bool _vfsIsPlatformCaseSensitive();
Generic type-safe containers with runtime type system integration.
Copy-on-write strings with automatic memory management and rope optimization.