Cthulhu  0.2.10
Cthulhu compiler collection
common.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-only
2 
3 #pragma once
4 
5 #include "fs/fs.h"
6 
7 #include <stddef.h>
8 
9 typedef struct map_t map_t;
10 typedef struct arena_t arena_t;
11 
12 typedef struct fs_inode_t
13 {
15  const char *name;
16  char data[];
17 } fs_inode_t;
18 
19 typedef struct fs_iter_t
20 {
21  fs_t *fs;
22  const fs_inode_t *dir;
24  char data[];
25 } fs_iter_t;
26 
27 typedef struct inode_result_t
28 {
30  os_error_t error;
32 
33 typedef fs_inode_t *(*fs_query_node_t)(fs_t *fs, const fs_inode_t *node, const char *name);
34 typedef io_t *(*fs_query_file_t)(fs_t *fs, fs_inode_t *node, os_access_t flags);
35 
36 typedef inode_result_t (*fs_file_create_t)(fs_t *fs, fs_inode_t *node, const char *name);
37 typedef os_error_t (*fs_file_delete_t)(fs_t *fs, fs_inode_t *node, const char *name);
38 
39 typedef inode_result_t (*fs_dir_create_t)(fs_t *fs, fs_inode_t *node, const char *name);
40 typedef os_error_t (*fs_dir_delete_t)(fs_t *fs, fs_inode_t *node, const char *name);
41 
42 typedef os_error_t (*fs_iter_begin_t)(fs_t *fs, const fs_inode_t *dir, fs_iter_t *iter);
43 typedef os_error_t (*fs_iter_next_t)(fs_iter_t *iter);
44 typedef os_error_t (*fs_iter_end_t)(fs_iter_t *iter);
45 
49 typedef void (*fs_delete_t)(fs_t *fs);
50 
51 typedef struct fs_callbacks_t
52 {
54 
56 
59 
62 
66 
67  size_t iter_size;
68  size_t inode_size;
70 
71 typedef struct fs_t
72 {
73  const fs_callbacks_t *cb;
76 
77  char data[];
78 } fs_t;
79 
80 // inode api
81 
83 
84 CT_LOCAL fs_inode_t *inode_file(fs_t *fs, const char *name, const void *data);
85 CT_LOCAL fs_inode_t *inode_dir(fs_t *fs, const char *name, const void *data);
86 CT_LOCAL fs_inode_t *inode_new(fs_t *fs, os_dirent_t type, const char *name, const void *data);
87 
88 CT_LOCAL void *inode_data(fs_inode_t *inode);
89 CT_LOCAL CT_CONSTFN bool inode_is(const fs_inode_t *inode, os_dirent_t type);
90 CT_LOCAL CT_CONSTFN const char *inode_name(const fs_inode_t *inode);
91 
92 CT_LOCAL void *iter_data(fs_iter_t *iter);
93 
94 // helpers
95 CT_LOCAL os_error_t mkdir_recursive(const char *path, arena_t *arena);
96 
97 // fs api
98 
100  void *root,
101  const fs_callbacks_t *cb,
102  const void *data,
103  size_t size,
104  arena_t *arena);
105 
106 CT_LOCAL void *fs_data(fs_t *fs);
void(* fs_delete_t)(fs_t *fs)
fs callback to delete the fs
Definition: common.h:49
inode_result_t(* fs_dir_create_t)(fs_t *fs, fs_inode_t *node, const char *name)
Definition: common.h:39
CT_LOCAL void * iter_data(fs_iter_t *iter)
Definition: common.c:48
os_error_t(* fs_dir_delete_t)(fs_t *fs, fs_inode_t *node, const char *name)
Definition: common.h:40
os_error_t(* fs_iter_end_t)(fs_iter_t *iter)
Definition: common.h:44
CT_LOCAL fs_inode_t * inode_new(fs_t *fs, os_dirent_t type, const char *name, const void *data)
Definition: common.c:19
os_error_t(* fs_iter_next_t)(fs_iter_t *iter)
Definition: common.h:43
os_error_t(* fs_iter_begin_t)(fs_t *fs, const fs_inode_t *dir, fs_iter_t *iter)
Definition: common.h:42
CT_LOCAL os_error_t mkdir_recursive(const char *path, arena_t *arena)
Definition: common.c:72
CT_LOCAL fs_inode_t gInvalidFileNode
Definition: common.c:15
os_error_t(* fs_file_delete_t)(fs_t *fs, fs_inode_t *node, const char *name)
Definition: common.h:37
CT_LOCAL fs_inode_t * inode_dir(fs_t *fs, const char *name, const void *data)
Definition: common.c:36
io_t *(* fs_query_file_t)(fs_t *fs, fs_inode_t *node, os_access_t flags)
Definition: common.h:34
CT_LOCAL fs_t * fs_new(void *root, const fs_callbacks_t *cb, const void *data, size_t size, arena_t *arena)
Definition: common.c:93
inode_result_t(* fs_file_create_t)(fs_t *fs, fs_inode_t *node, const char *name)
Definition: common.h:36
fs_inode_t *(* fs_query_node_t)(fs_t *fs, const fs_inode_t *node, const char *name)
Definition: common.h:33
CT_LOCAL CT_CONSTFN const char * inode_name(const fs_inode_t *inode)
Definition: common.c:63
CT_LOCAL fs_inode_t * inode_file(fs_t *fs, const char *name, const void *data)
Definition: common.c:31
CT_LOCAL void * fs_data(fs_t *fs)
Definition: common.c:108
CT_LOCAL void * inode_data(fs_inode_t *inode)
Definition: common.c:41
CT_LOCAL CT_CONSTFN bool inode_is(const fs_inode_t *inode, os_dirent_t type)
Definition: common.c:55
CT_NODISCARD size_t size
Definition: scan.h:128
os_dirent_t
directory entry type
Definition: core.h:56
os_access_t
file access mode
Definition: core.h:38
#define CT_CONSTFN
mark a function as const, has no side effects and always returns the same value for the same argument...
Definition: analyze.h:227
#define CT_LOCAL
Definition: compiler.h:166
CT_NODISCARD OUT_NOTNULL os_inode_t * dir
Definition: os.h:245
an allocator object
Definition: arena.h:86
fs_dir_create_t pfn_create_dir
Definition: common.h:57
fs_iter_next_t pfn_iter_next
Definition: common.h:64
size_t iter_size
Definition: common.h:67
fs_file_create_t pfn_create_file
Definition: common.h:60
fs_iter_begin_t pfn_iter_begin
Definition: common.h:63
fs_query_file_t pfn_query_file
Definition: common.h:55
fs_dir_delete_t pfn_delete_dir
Definition: common.h:58
size_t inode_size
Definition: common.h:68
fs_file_delete_t pfn_delete_file
Definition: common.h:61
fs_iter_end_t pfn_iter_end
Definition: common.h:65
fs_query_node_t pfn_query_node
Definition: common.h:53
os_dirent_t type
Definition: common.h:14
char data[]
Definition: common.h:16
const char * name
Definition: common.h:15
fs_inode_t * current
Definition: common.h:23
const fs_inode_t * dir
Definition: common.h:22
fs_t * fs
Definition: common.h:21
char data[]
Definition: common.h:24
Definition: common.h:72
arena_t * arena
Definition: common.h:74
const fs_callbacks_t * cb
callbacks
Definition: common.h:73
fs_inode_t * root
root inode
Definition: common.h:75
char data[]
Definition: common.h:77
fs_inode_t * node
Definition: common.h:29
os_error_t error
Definition: common.h:30
io object implementation
Definition: impl.h:122
an unordered hash map
Definition: map.h:38