// Function pointers for operations (Polymorphism in C)
uint32_t (*read)(struct fs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer);
- uint32_t (*write)(struct fs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer);
+ uint32_t (*write)(struct fs_node* node, uint32_t offset, uint32_t size, const uint8_t* buffer);
void (*open)(struct fs_node* node);
void (*close)(struct fs_node* node);
- struct fs_node* (*finddir)(struct fs_node* node, char* name);
+ struct fs_node* (*finddir)(struct fs_node* node, const char* name);
} fs_node_t;
// Standard VFS functions
uint32_t vfs_read(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer);
-uint32_t vfs_write(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer);
+uint32_t vfs_write(fs_node_t* node, uint32_t offset, uint32_t size, const uint8_t* buffer);
void vfs_open(fs_node_t* node);
void vfs_close(fs_node_t* node);
return size;
}
-static struct fs_node* initrd_finddir(struct fs_node* node, char* name) {
+static struct fs_node* initrd_finddir(struct fs_node* node, const char* name) {
if (!node || !name) return 0;
int parent = (int)node->inode;
if (parent < 0 || parent >= entry_count) return 0;
return 0;
}
-static uint32_t dev_null_write(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer) {
+static uint32_t dev_null_write(fs_node_t* node, uint32_t offset, uint32_t size, const uint8_t* buffer) {
(void)node;
(void)offset;
(void)buffer;
return (uint32_t)rc;
}
-static uint32_t dev_tty_write(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer) {
+static uint32_t dev_tty_write(fs_node_t* node, uint32_t offset, uint32_t size, const uint8_t* buffer) {
(void)node;
(void)offset;
- int rc = tty_write_kbuf(buffer, size);
+ int rc = tty_write_kbuf((const uint8_t*)buffer, size);
if (rc < 0) return 0;
return (uint32_t)rc;
}
-static struct fs_node* devfs_finddir_impl(struct fs_node* node, char* name) {
+static struct fs_node* devfs_finddir_impl(struct fs_node* node, const char* name) {
(void)node;
if (!name || name[0] == 0) return 0;
return 0;
}
-uint32_t vfs_write(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer) {
+uint32_t vfs_write(fs_node_t* node, uint32_t offset, uint32_t size, const uint8_t* buffer) {
if (node->write)
return node->write(node, offset, size, buffer);
return 0;
char path[256];
};
-static struct fs_node* overlay_finddir_impl(struct fs_node* node, char* name);
+static struct fs_node* overlay_finddir_impl(struct fs_node* node, const char* name);
static void overlay_str_copy_n(char* dst, size_t dst_sz, const char* src, size_t src_n) {
if (!dst || dst_sz == 0) return;
return created;
}
-static uint32_t overlay_write_impl(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer) {
+static uint32_t overlay_write_impl(fs_node_t* node, uint32_t offset, uint32_t size, const uint8_t* buffer) {
if (!node) return 0;
struct overlay_node* on = (struct overlay_node*)node;
return &c->vfs;
}
-static struct fs_node* overlay_finddir_impl(struct fs_node* node, char* name) {
+static struct fs_node* overlay_finddir_impl(struct fs_node* node, const char* name) {
if (!node || !name) return 0;
if (node->flags != FS_DIRECTORY) return 0;
return to_read;
}
-static uint32_t pipe_write(fs_node_t* n, uint32_t offset, uint32_t size, uint8_t* buffer) {
+static uint32_t pipe_write(fs_node_t* n, uint32_t offset, uint32_t size, const uint8_t* buffer) {
(void)offset;
struct pipe_node* pn = (struct pipe_node*)n;
if (!pn || !pn->ps || !buffer) return 0;
static uint32_t g_tmpfs_next_inode = 1;
-static struct fs_node* tmpfs_finddir_impl(struct fs_node* node, char* name);
-static uint32_t tmpfs_write_impl(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer);
+static struct fs_node* tmpfs_finddir_impl(struct fs_node* node, const char* name);
+static uint32_t tmpfs_write_impl(fs_node_t* node, uint32_t offset, uint32_t size, const uint8_t* buffer);
static struct tmpfs_node* tmpfs_node_alloc(const char* name, uint32_t flags) {
struct tmpfs_node* n = (struct tmpfs_node*)kmalloc(sizeof(*n));
return size;
}
-static uint32_t tmpfs_write_impl(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer) {
+static uint32_t tmpfs_write_impl(fs_node_t* node, uint32_t offset, uint32_t size, const uint8_t* buffer) {
if (!node || !buffer) return 0;
if (node->flags != FS_FILE) return 0;
return size;
}
-static struct fs_node* tmpfs_finddir_impl(struct fs_node* node, char* name) {
+static struct fs_node* tmpfs_finddir_impl(struct fs_node* node, const char* name) {
if (!node || !name) return 0;
if (node->flags != FS_DIRECTORY) return 0;