106#define PATH_DEFER(path) __attribute__((cleanup(path_defer_cleanup))) path_t* CONCAT(i, __COUNTER__) = (path)
113#define PATH_MAX_DOTDOT 1000
120#define PATH_MAX_SYMLINK 40
138typedef struct pathname
166 .mount = NULL, .dentry = NULL \
176#define PATH_CREATE(inMount, inDentry) \
179 .mount = REF(inMount), .dentry = REF(inDentry), \
188#define PATH_IS_EMPTY(path) ((path).mount == NULL && (path).dentry == NULL)
196#define PATH_IS_VALID(path) ((path) != NULL && (path)->mount != NULL && (path)->dentry != NULL)
#define MAX_PATH
Maximum length of filepaths.
static void path_defer_cleanup(path_t **path)
mode_t
Path flags and permissions.
void path_put(path_t *path)
Put a path.
uint64_t mode_check(mode_t *mode, mode_t maxPerms)
Check and adjust mode permissions.
uint64_t mode_to_string(mode_t mode, char *out, uint64_t length)
Convert a mode to a string representation.
uint64_t path_step(path_t *path, mode_t mode, const char *name, namespace_t *ns)
Walk a single path component.
void path_set(path_t *path, mount_t *mount, dentry_t *dentry)
Set a path.
uint64_t path_walk_parent(path_t *path, const pathname_t *pathname, char *outLastName, namespace_t *ns)
Walk a pathname to its parent and get the name of the last component.
uint64_t path_walk_parent_and_child(const path_t *from, path_t *outParent, path_t *outChild, const pathname_t *pathname, namespace_t *ns)
Traverse a pathname to its parent and child paths.
uint64_t path_walk(path_t *path, const pathname_t *pathname, namespace_t *ns)
Walk a pathname to a path.
uint64_t pathname_init(pathname_t *pathname, const char *string)
Initialize a pathname.
void path_copy(path_t *dest, const path_t *src)
Copy a path.
uint64_t path_to_name(const path_t *path, pathname_t *pathname)
Convert a path to a pathname.
uint64_t mount(const char *mountpoint, const char *fs, const char *options)
System call for mounting a filesystem.
#define NULL
Pointer error value.
Directory entry structure.