|
PatchworkOS
19e446b
A non-POSIX operating system.
|
Filesystem header. More...
Filesystem header.
Data Structures | |
| struct | pollfd_t |
| Poll file descriptor structure. More... | |
| struct | vattr_t |
| Vnode attributes structure. More... | |
| struct | stat_t |
| Stat type. More... | |
| struct | dirent_t |
| Directory entry struct. More... | |
Macros | |
| #define | STDIN_FILENO 0 |
| Standard input file descriptor. | |
| #define | STDOUT_FILENO 1 |
| Standard output file descriptor. | |
| #define | STDERR_FILENO 2 |
| Standard error file descriptor. | |
| #define | PIPE_READ 0 |
| Pipe read end. | |
| #define | PIPE_WRITE 1 |
| Pipe write end. | |
| #define | F_MAX_SIZE 512 |
Maximum buffer size for the F() macro. | |
| #define | F(format, ...) |
| Allocates a formatted string on the stack. | |
| #define | POLL_SPECIAL (POLLERR | POLLHUP | POLLNVAL) |
| Poll event values that will always be checked and included even if not specified. | |
| #define | KEY_MAX 128 |
Maximum size of a key generated by share(). | |
| #define | KEY_128BIT 25 |
| The size of a buffer needed to hold a 128-bit key. | |
| #define | KEY_256BIT 45 |
| The size of a buffer needed to hold a 256-bit key. | |
| #define | KEY_512BIT 89 |
| The size of a buffer needed to hold a 512-bit key. | |
| #define | RETRY_EINTR(expr) |
Macro to automatically retry a function that returns an integer if it errors and errno == EINTR. | |
| #define | RETRY_EINTR_PTR(expr) |
Macro to automatically retry a function that returns a pointer if it errors and errno == EINTR. | |
Typedefs | |
| typedef uint8_t | seek_origin_t |
Type for the seek() origin argument. | |
| typedef uint64_t | sbid_t |
| A suberblock identifier that uniquely identifies a superblock within the system. | |
Enumerations | |
| enum | poll_events_t { POLLNONE = 0 , POLLIN = (1 << 0) , POLLOUT = (1 << 1) , POLLERR = (1 << 2) , POLLHUP = (1 << 3) , POLLNVAL = (1 << 4) } |
| Poll events type. More... | |
| enum | vtype_t { VREG , VDIR , VSYMLINK } |
| Vnode type enum. More... | |
| enum | dirent_flags_t { DIRENT_NONE = 0 , DIRENT_MOUNTED = 1 << 0 } |
| Directory entry flags. More... | |
Functions | |
| fd_t | open (const char *path) |
| System call for opening files. | |
| uint64_t | open2 (const char *path, fd_t fd[2]) |
| System call for opening 2 file descriptors from one file. | |
| fd_t | openat (fd_t from, const char *path) |
| System call for opening files relative to another file descriptor. | |
| uint64_t | close (fd_t fd) |
| System call for closing files. | |
| size_t | read (fd_t fd, void *buffer, size_t count) |
| System call for reading from files. | |
| char * | reads (fd_t fd) |
| Wrapper for reading a file directly into a null-terminated string. | |
| size_t | readfile (const char *path, void *buffer, size_t count, size_t offset) |
| Wrapper for reading a file directly using a path. | |
| char * | readfiles (const char *path) |
| Wrapper for reading an entire file directly into a null-terminated string. | |
| size_t | write (fd_t fd, const void *buffer, size_t count) |
| System call for writing to files. | |
| size_t | writes (fd_t fd, const char *string) |
| Wrapper for writing a null-terminated string to a file. | |
| size_t | writefile (const char *path, const void *buffer, size_t count, size_t offset) |
| Wrapper for writing to a file directly using a path. | |
| size_t | writefiles (const char *path, const char *string) |
| Wrapper for writing a null-terminated string directly to a file using a path. | |
| uint64_t | scan (fd_t fd, const char *format,...) |
| Wrapper for reading from a file descriptor using scan formatting. | |
| uint64_t | vscan (fd_t fd, const char *format, va_list args) |
Wrapper for reading from a file descriptor using scan formatting with va_list. | |
| uint64_t | scanfile (const char *path, const char *format,...) |
| Wrapper for reading from a file path using scan formatting. | |
| uint64_t | vscanfile (const char *path, const char *format, va_list args) |
Wrapper for reading from a file path using scan formatting with va_list. | |
| size_t | seek (fd_t fd, ssize_t offset, seek_origin_t origin) |
| System call for changing the file offset. | |
| uint64_t | chdir (const char *path) |
| System call for changing the cwd. | |
| uint64_t | poll (pollfd_t *fds, uint64_t amount, clock_t timeout) |
| System call for polling files. | |
| poll_events_t | poll1 (fd_t fd, poll_events_t events, clock_t timeout) |
| Wrapper for polling one file. | |
| uint64_t | stat (const char *path, stat_t *stat) |
| System call for retrieving info about a file or directory. | |
| uint64_t | ioctl (fd_t fd, uint64_t request, void *argp, size_t size) |
| System call for extended driver behaviour. | |
| fd_t | dup (fd_t oldFd) |
| System call for duplicating file descriptors. | |
| fd_t | dup2 (fd_t oldFd, fd_t newFd) |
| System call for duplicating file descriptors, with a destination. | |
| size_t | getdents (fd_t fd, dirent_t *buffer, uint64_t count) |
| System call for reading directory entires. | |
| size_t | readdir (fd_t fd, dirent_t **buffer, uint64_t *count) |
| Helper for reading all directory entries. | |
| uint64_t | mkdir (const char *path) |
| Wrapper for creating a directory. | |
| uint64_t | rmdir (const char *path) |
| Wrapper for removing a directory. | |
| uint64_t | link (const char *oldPath, const char *newPath) |
| System call for creating a hardlink. | |
| uint64_t | unlink (const char *path) |
| Wrapper for removing a file. | |
| uint64_t | share (char *key, uint64_t size, fd_t fd, clock_t timeout) |
| System call for sharing a file descriptor with another process. | |
| uint64_t | sharefile (char *key, uint64_t size, const char *path, clock_t timeout) |
| Helper for sharing a file by its path. | |
| fd_t | claim (const char *key) |
| System call for claiming a shared file descriptor. | |
| uint64_t | bind (const char *mountpoint, fd_t source) |
| System call for binding a file descriptor to a mountpoint. | |
| uint64_t | mount (const char *mountpoint, const char *fs, const char *options) |
| System call for mounting a filesystem. | |
| uint64_t | unmount (const char *mountpoint) |
| System call for unmounting a filesystem. | |
| size_t | readlink (const char *path, char *buffer, uint64_t count) |
| System call for reading the target of a symbolic link. | |
| uint64_t | symlink (const char *target, const char *linkpath) |
| System call for creating a symbolic link. | |
| #define PIPE_READ 0 |
| #define PIPE_WRITE 1 |
| #define F | ( | format, | |
| ... | |||
| ) |
Allocates a formatted string on the stack.
| #define KEY_MAX 128 |
| #define KEY_128BIT 25 |
| #define KEY_256BIT 45 |
| #define KEY_512BIT 89 |
| #define RETRY_EINTR | ( | expr | ) |
Macro to automatically retry a function that returns an integer if it errors and errno == EINTR.
| expr | The expression to evaluate. |
| #define RETRY_EINTR_PTR | ( | expr | ) |
Macro to automatically retry a function that returns a pointer if it errors and errno == EINTR.
| expr | The expression to evaluate. |
| typedef uint8_t seek_origin_t |
| enum poll_events_t |
| enum vtype_t |
| enum dirent_flags_t |
| fd_t open | ( | const char * | path | ) |
System call for opening files.
The open() function opens a file located at a given path.
| path | The path to the desired file. |
ERR and errno is set. Definition at line 8 of file open.c.
System call for opening 2 file descriptors from one file.
This is intended as a more generic implementation of system calls like pipe() in POSIX systems. One example use case of this system call is pipes, if open2 is called on /dev/pipe then fd[0] will store the read end of the pipe and fd[1] will store the write end of the pipe. But if open() is called on /dev/pipe then the returned file descriptor would be both ends.
| path | The path to the desired file. |
| fd | An array of two fd_t where the new file descriptors will be stored. |
ERR and errno is set. Definition at line 8 of file open2.c.
System call for opening files relative to another file descriptor.
| from | The file descriptor to open the file relative to, or FD_NONE to open from the current working directory. |
| path | The path to the desired file. |
ERR and errno is set. Definition at line 8 of file openat.c.
System call for reading from files.
| fd | The file descriptor to read from. |
| buffer | A pointer to the buffer where the data will be stored. |
| count | The maximum number of bytes to read. |
ERR and errno is set. Definition at line 8 of file read.c.
| char * reads | ( | fd_t | fd | ) |
Wrapper for reading a file directly into a null-terminated string.
The reads() function reads the entire contents of a file into a newly allocated null-terminated string. The caller is responsible for freeing the returned string.
| fd | The file descriptor to read from. |
NULL and errno is set. Definition at line 5 of file sread.c.
Wrapper for reading a file directly using a path.
Equivalent to calling open(), seek(), read(), and close() in sequence.
| path | The path to the file. |
| buffer | A pointer to the buffer where the data will be stored. |
| count | The maximum number of bytes to read. |
| offset | The offset in the file to start reading from. |
ERR and errno is set. Definition at line 3 of file readfile.c.
| char * readfiles | ( | const char * | path | ) |
Wrapper for reading an entire file directly into a null-terminated string.
The readfiles() function reads the entire contents of a file into a newly allocated null-terminated string. The caller is responsible for freeing the returned string.
Equivalent to calling open(), reads(), and close() in sequence.
| path | The path to the file. |
NULL and errno is set. Definition at line 3 of file sreadfile.c.
System call for writing to files.
| fd | The file descriptor to write to. |
| buffer | A pointer to the buffer containing the data to write. |
| count | The number of bytes to write. |
ERR and errno is set. Definition at line 8 of file write.c.
Wrapper for writing a null-terminated string to a file.
| fd | The file descriptor to write to. |
| string | The null-terminated string to write. |
ERR and errno is set. Definition at line 4 of file swrite.c.
Wrapper for writing to a file directly using a path.
Equivalent to calling open(), seek(), write(), and close() in sequence.
| path | The path to the file. |
| buffer | A pointer to the buffer containing the data to write. |
| count | The number of bytes to write. |
| offset | The offset in the file to start writing to. |
ERR and errno is set. Definition at line 3 of file writefile.c.
| size_t writefiles | ( | const char * | path, |
| const char * | string | ||
| ) |
Wrapper for writing a null-terminated string directly to a file using a path.
Equivalent to calling open(), writes(), and close() in sequence.
| path | The path to the file. |
| string | The null-terminated string to write. |
ERR and errno is set. Definition at line 4 of file swritefile.c.
Wrapper for reading from a file descriptor using scan formatting.
| fd | The file descriptor to read from. |
| format | The format string. |
ERR. Definition at line 6 of file scan.c.
Wrapper for reading from a file descriptor using scan formatting with va_list.
| fd | The file descriptor to read from. |
| format | The format string. |
| args | The va_list of arguments. |
ERR. Definition at line 29 of file vscan.c.
| uint64_t scanfile | ( | const char * | path, |
| const char * | format, | ||
| ... | |||
| ) |
Wrapper for reading from a file path using scan formatting.
Equivalent to calling open(), scan(), and close() in sequence.
| path | The path to the file. |
| format | The format string. |
ERR. Definition at line 6 of file scanfile.c.
Wrapper for reading from a file path using scan formatting with va_list.
Equivalent to calling open(), vscan(), and close() in sequence.
| path | The path to the file. |
| format | The format string. |
| args | The va_list of arguments. |
ERR. Definition at line 6 of file vscanfile.c.
| size_t seek | ( | fd_t | fd, |
| ssize_t | offset, | ||
| seek_origin_t | origin | ||
| ) |
System call for changing the file offset.
| fd | The file descriptor. |
| offset | The offset to move the file pointer. |
| origin | The origin that the offset is relative to (e.g., SEEK_SET, SEEK_CUR, SEEK_END). |
ERR and errno is set. Definition at line 8 of file seek.c.
| uint64_t chdir | ( | const char * | path | ) |
System call for polling files.
| fds | An array of pollfd_t structures, each specifying a file descriptor to poll in pollfd_t::fd and the events to wait for in pollfd_t::events. |
| amount | The number of pollfd_t structures in the fds array. |
| timeout | The maximum time (in clock ticks) to wait for an event. If CLOCKS_NEVER, it waits forever. |
ERR and errno is set. Definition at line 8 of file poll.c.
| poll_events_t poll1 | ( | fd_t | fd, |
| poll_events_t | events, | ||
| clock_t | timeout | ||
| ) |
Wrapper for polling one file.
The poll1() function waits for events on a single file descriptor. Otherwise it is identical to poll() and exists simply for convenience.
| fd | The file descriptor to poll. |
| events | The events to wait for (e.g., POLLIN, POLLOUT). |
| timeout | The maximum time (in clock ticks) to wait for an event. If CLOCKS_NEVER, it waits forever. |
POLLERR event bit is set and errno is set. Definition at line 8 of file poll1.c.
System call for retrieving info about a file or directory.
| path | The path to the file or directory. |
| stat | A pointer to a stat_t structure where the file information will be stored. |
ERR and errno is set. Definition at line 8 of file stat.c.
System call for extended driver behaviour.
The ioctl() function allows drivers to implement unusual behaviour that would be impossible or impractical with a normal file-based API.
| fd | The file descriptor of the file. |
| request | The driver-dependent request code. |
| argp | A pointer to an argument that depends on the request, can be NULL if size is 0. |
| size | The size of the argument pointed to by argp. |
ERR and errno is set. Definition at line 8 of file ioctl.c.
System call for duplicating file descriptors.
| oldFd | The open file descriptor to duplicate. |
ERR and errno is set. Definition at line 8 of file dup.c.
System call for duplicating file descriptors, with a destination.
| oldFd | The open file descriptor to duplicate. |
| newFd | The desired new file descriptor. |
ERR and errno is set. Definition at line 8 of file dup2.c.
System call for reading directory entires.
| fd | The file descriptor of the directory to read. |
| buffer | The destination buffer. |
| count | The size of the buffer in bytes. |
ERR and errno is set. Definition at line 8 of file getdents.c.
Helper for reading all directory entries.
The caller is responsible for freeing the returned pointer.
| fd | The file descriptor of the directory to read. |
| buffer | Output pointer to store the allocated buffer containing the directory entries. |
| count | Output pointer to store the number of bytes written to the buffer. |
0. On failure, ERR and errno is set. Definition at line 8 of file readdir.c.
| uint64_t mkdir | ( | const char * | path | ) |
| uint64_t rmdir | ( | const char * | path | ) |
| uint64_t link | ( | const char * | oldPath, |
| const char * | newPath | ||
| ) |
| uint64_t unlink | ( | const char * | path | ) |
System call for sharing a file descriptor with another process.
| key | Output buffer to store the generated key. |
| size | The size of the output buffer. |
| fd | The file descriptor to share. |
| timeout | The time until the shared file descriptor expires. If CLOCKS_NEVER, it never expires. |
0. On failure, ERR and errno is set. Definition at line 6 of file share.c.
Helper for sharing a file by its path.
| key | Output buffer to store the generated key. |
| size | The size of the output buffer. |
| path | The path to the file to share. |
| timeout | The time until the shared file descriptor expires. If CLOCKS_NEVER, it never expires. |
0. On failure, ERR and errno is set. Definition at line 4 of file sharefile.c.
| fd_t claim | ( | const char * | key | ) |
System call for claiming a shared file descriptor.
After claiming a shared file descriptor, the key is no longer valid and cannot be used again.
| key | The key identifying the shared file descriptor. |
ERR and errno is set. Definition at line 6 of file claim.c.
System call for binding a file descriptor to a mountpoint.
The created mount will inherit permissions from the source while the mount behaviour will follow the flags specified in mountpoint.
| mountpoint | The mountpoint path. |
| source | The file descriptor to bind, must represent a directory. |
0. On failure, ERR and errno is set. Definition at line 5 of file bind.c.
| uint64_t mount | ( | const char * | mountpoint, |
| const char * | fs, | ||
| const char * | options | ||
| ) |
System call for mounting a filesystem.
| mountpoint | The target path to mount to. |
| fs | The path to the desired filesystem in the fs sysfs directory. |
| options | A string containing filesystem defined key=value pairs, with multiple options separated by commas, or NULL. |
0. On failure, ERR and errno is set. Definition at line 5 of file mount.c.
| uint64_t unmount | ( | const char * | mountpoint | ) |
System call for reading the target of a symbolic link.
| path | The path to the symbolic link. |
| buffer | A buffer to store the target path. |
| count | The size of the buffer. |
ERR and errno is set. Definition at line 8 of file readlink.c.
| uint64_t symlink | ( | const char * | target, |
| const char * | linkpath | ||
| ) |
System call for creating a symbolic link.
| target | The target path of the symbolic link. |
| linkpath | The path where the symbolic link will be created. |
ERR and errno is set. Definition at line 8 of file symlink.c.