libcute 0.1
Loading...
Searching...
No Matches
file.h
1#pragma once
2#include "io/dir.h"
3#include "io/error.h"
4#include "object/optional.h"
5
6#ifndef CU_FREESTANDING
7#include "io/error.h"
8#include "io/fd.h"
9#include "nostd.h"
10#include "object/result.h"
11#include <stdbool.h>
12#include <stddef.h>
13
14typedef struct {
15 cu_Handle handle;
16 cu_File_Stat stat;
17} cu_File;
18
20
21typedef struct {
22 bool read;
23 bool write;
24 bool create;
25 bool append;
26 bool truncate;
28
29// Seek operations
30typedef enum {
31 CU_FILE_SEEK_START,
32 CU_FILE_SEEK_CURRENT,
33 CU_FILE_SEEK_END
34} cu_File_Seek;
35
36typedef struct {
37 cu_File_Seek whence;
38 Size_Optional offset;
40
41// Option setters
42static inline void cu_File_Options_read(cu_File_Options *options) {
43 options->read = true;
44}
45
46static inline void cu_File_Options_write(cu_File_Options *options) {
47 options->write = true;
48}
49
50static inline void cu_File_Options_create(cu_File_Options *options) {
51 options->create = true;
52}
53
54static inline void cu_File_Options_append(cu_File_Options *options) {
55 options->append = true;
56}
57
58static inline void cu_File_Options_truncate(cu_File_Options *options) {
59 options->truncate = true;
60}
61
62cu_File_Result cu_File_open(
63 cu_Slice path, cu_File_Options options, cu_Allocator allocator);
64cu_File_Result cu_Dir_openat(
65 cu_Dir *dir, cu_Slice path, cu_File_Options options);
66
67void cu_File_close(cu_File *file);
68cu_Io_Error_Optional cu_File_read(cu_File *file, cu_Slice buffer);
69cu_Io_Error_Optional cu_File_write(cu_File *file, cu_Slice data);
70cu_Io_Error_Optional cu_File_seek(cu_File *file, cu_File_SeekTo seek_to);
71cu_IoSize_Result cu_File_tell(cu_File *file);
72
73#endif // CU_FREESTANDING
#define CU_RESULT_DECL(NAME, T, E)
Definition result.h:23
Definition allocator.h:24
Definition dir.h:10
Definition file.h:21
Definition file.h:36
Definition fd.h:47
Definition file.h:14
Definition error.h:27
Definition nostd.h:27