25 case (eOsAccessRead | eOsAccessWrite):
28 case (eOsAccessWrite | eOsAccessTruncate):
29 case (eOsAccessRead | eOsAccessWrite | eOsAccessTruncate):
42 if (access(path, F_OK) == 0)
52 return fopen(path, get_access(access));
78 return fclose(file) == 0;
89 size_t read = fread(buffer, 1,
size, file->
impl);
93 if (ferror(file->
impl))
111 size_t written = fwrite(buffer, 1,
size, file->
impl);
115 if (ferror(file->
impl))
132 int result = fstat(fileno(file->
impl), &info);
138 *actual = info.st_size;
148 long pos = ftell(file->
impl);
152 int result = ftruncate(fileno(file->
impl),
size);
157 result = fseek(file->
impl, pos, SEEK_SET);
171 int result = fseek(file->
impl, (
long)offset, SEEK_SET);
187 long pos = ftell(file->
impl);
200 int result = PROT_NONE;
202 if (protect & eOsProtectRead)
207 if (protect & eOsProtectWrite)
209 result |= PROT_WRITE;
212 if (protect & eOsProtectExecute)
224 int prot = get_mmap_prot(protect);
226 int fd = fileno(file->
impl);
227 return mmap(NULL,
size, prot, MAP_PRIVATE, fd, 0);
232 if (munmap(map->
view, map->
size) != 0)
os_protect_t
file mapping memory protection
CT_NODISCARD CT_CONSTFN STA_RET_STRING CT_OS_API const char * os_access_string(os_access_t access)
get the string representation of a file access mode
os_access_t
file access mode
#define STA_DECL
sal2 annotation on function implementations to copy annotations from the declaration
#define CT_UNUSED(x)
mark a variable as unused
#define CT_NEVER(...)
assert that a code path is never reached
#define CTASSERT(expr)
assert a condition, prints the condition as a message
STA_DECL os_error_t os_file_resize(os_file_t *file, size_t size)
truncate/expand a file to a specific size
CT_LOCAL os_error_t impl_unmap(os_mapping_t *map)
STA_DECL os_error_t os_file_read(os_file_t *file, void *buffer, size_t size, size_t *actual)
STA_DECL os_error_t os_file_seek(os_file_t *file, size_t offset, size_t *actual)
STA_DECL os_error_t os_file_write(os_file_t *file, const void *buffer, size_t size, size_t *actual)
STA_DECL os_error_t os_file_size(os_file_t *file, size_t *actual)
STA_DECL os_error_t os_tmpfile_open(os_file_t *file)
STA_DECL os_error_t os_file_exists(const char *path)
check if a file exists
STA_DECL os_error_t os_file_tell(os_file_t *file, size_t *actual)
CT_LOCAL bool impl_file_close(os_file_impl_t file)
CT_LOCAL void * impl_file_map(os_file_t *file, os_protect_t protect, size_t size, os_mapping_t *mapping)
CT_LOCAL os_file_impl_t impl_file_open(const char *path, os_access_t access)