kernel: change signatures for vfs interfaces to match reality

This commit is contained in:
K. Lange 2021-06-06 20:25:34 +09:00
parent 5106daf9f6
commit 698a3c0cb7
19 changed files with 153 additions and 156 deletions

View File

@ -42,29 +42,29 @@
struct fs_node; struct fs_node;
typedef uint64_t (*read_type_t) (struct fs_node *, uint64_t, uint64_t, uint8_t *); typedef ssize_t (*read_type_t) (struct fs_node *, off_t, size_t, uint8_t *);
typedef uint64_t (*write_type_t) (struct fs_node *, uint64_t, uint64_t, uint8_t *); typedef ssize_t (*write_type_t) (struct fs_node *, off_t, size_t, uint8_t *);
typedef void (*open_type_t) (struct fs_node *, unsigned int flags); typedef void (*open_type_t) (struct fs_node *, unsigned int flags);
typedef void (*close_type_t) (struct fs_node *); typedef void (*close_type_t) (struct fs_node *);
typedef struct dirent *(*readdir_type_t) (struct fs_node *, uint64_t); typedef struct dirent *(*readdir_type_t) (struct fs_node *, unsigned long);
typedef struct fs_node *(*finddir_type_t) (struct fs_node *, char *name); typedef struct fs_node *(*finddir_type_t) (struct fs_node *, char *name);
typedef int (*create_type_t) (struct fs_node *, char *name, uint16_t permission); typedef int (*create_type_t) (struct fs_node *, char *name, mode_t permission);
typedef int (*unlink_type_t) (struct fs_node *, char *name); typedef int (*unlink_type_t) (struct fs_node *, char *name);
typedef int (*mkdir_type_t) (struct fs_node *, char *name, uint16_t permission); typedef int (*mkdir_type_t) (struct fs_node *, char *name, mode_t permission);
typedef int (*ioctl_type_t) (struct fs_node *, int request, void * argp); typedef int (*ioctl_type_t) (struct fs_node *, unsigned long request, void * argp);
typedef int (*get_size_type_t) (struct fs_node *); typedef int (*get_size_type_t) (struct fs_node *);
typedef int (*chmod_type_t) (struct fs_node *, int mode); typedef int (*chmod_type_t) (struct fs_node *, mode_t mode);
typedef int (*symlink_type_t) (struct fs_node *, char * name, char * value); typedef int (*symlink_type_t) (struct fs_node *, char * name, char * value);
typedef int (*readlink_type_t) (struct fs_node *, char * buf, size_t size); typedef ssize_t (*readlink_type_t) (struct fs_node *, char * buf, size_t size);
typedef int (*selectcheck_type_t) (struct fs_node *); typedef int (*selectcheck_type_t) (struct fs_node *);
typedef int (*selectwait_type_t) (struct fs_node *, void * process); typedef int (*selectwait_type_t) (struct fs_node *, void * process);
typedef int (*chown_type_t) (struct fs_node *, int, int); typedef int (*chown_type_t) (struct fs_node *, uid_t, gid_t);
typedef void (*truncate_type_t) (struct fs_node *); typedef int (*truncate_type_t) (struct fs_node *);
typedef struct fs_node { typedef struct fs_node {
char name[256]; /* The filename. */ char name[256]; /* The filename. */
void * device; /* Device object (optional) */ void * device; /* Device object (optional) */
uint64_t mask; /* The permissions mask. */ mode_t mask; /* The permissions mask. */
uid_t uid; /* The owning user. */ uid_t uid; /* The owning user. */
uid_t gid; /* The owning group. */ uid_t gid; /* The owning group. */
uint64_t flags; /* Flags (node type, etc). */ uint64_t flags; /* Flags (node type, etc). */
@ -74,9 +74,9 @@ typedef struct fs_node {
uint64_t open_flags; /* Flags passed to open (read/write/append, etc.) */ uint64_t open_flags; /* Flags passed to open (read/write/append, etc.) */
/* times */ /* times */
uint64_t atime; /* Accessed */ time_t atime; /* Accessed */
uint64_t mtime; /* Modified */ time_t mtime; /* Modified */
uint64_t ctime; /* Created */ time_t ctime; /* Created */
/* File operations */ /* File operations */
read_type_t read; read_type_t read;
@ -116,26 +116,26 @@ extern fs_node_t *fs_root;
extern int pty_create(void *size, fs_node_t ** fs_master, fs_node_t ** fs_slave); extern int pty_create(void *size, fs_node_t ** fs_master, fs_node_t ** fs_slave);
int has_permission(fs_node_t *node, int permission_bit); int has_permission(fs_node_t *node, int permission_bit);
uint64_t read_fs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer); ssize_t read_fs(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer);
uint64_t write_fs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer); ssize_t write_fs(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer);
void open_fs(fs_node_t *node, unsigned int flags); void open_fs(fs_node_t *node, unsigned int flags);
void close_fs(fs_node_t *node); void close_fs(fs_node_t *node);
struct dirent *readdir_fs(fs_node_t *node, uint64_t index); struct dirent *readdir_fs(fs_node_t *node, unsigned long index);
fs_node_t *finddir_fs(fs_node_t *node, char *name); fs_node_t *finddir_fs(fs_node_t *node, char *name);
int mkdir_fs(char *name, uint16_t permission); int mkdir_fs(char *name, mode_t permission);
int create_file_fs(char *name, uint16_t permission); int create_file_fs(char *name, mode_t permission);
fs_node_t *kopen(const char *filename, uint64_t flags); fs_node_t *kopen(const char *filename, unsigned int flags);
char *canonicalize_path(const char *cwd, const char *input); char *canonicalize_path(const char *cwd, const char *input);
fs_node_t *clone_fs(fs_node_t * source); fs_node_t *clone_fs(fs_node_t * source);
int ioctl_fs(fs_node_t *node, int request, void * argp); int ioctl_fs(fs_node_t *node, unsigned long request, void * argp);
int chmod_fs(fs_node_t *node, int mode); int chmod_fs(fs_node_t *node, mode_t mode);
int chown_fs(fs_node_t *node, int uid, int gid); int chown_fs(fs_node_t *node, uid_t uid, gid_t gid);
int unlink_fs(char * name); int unlink_fs(char * name);
int symlink_fs(char * value, char * name); int symlink_fs(char * value, char * name);
int readlink_fs(fs_node_t * node, char * buf, size_t size); ssize_t readlink_fs(fs_node_t * node, char * buf, size_t size);
int selectcheck_fs(fs_node_t * node); int selectcheck_fs(fs_node_t * node);
int selectwait_fs(fs_node_t * node, void * process); int selectwait_fs(fs_node_t * node, void * process);
void truncate_fs(fs_node_t * node); int truncate_fs(fs_node_t * node);
void vfs_install(void); void vfs_install(void);
void * vfs_mount(const char * path, fs_node_t * local_root); void * vfs_mount(const char * path, fs_node_t * local_root);

View File

@ -223,7 +223,7 @@ static void ps2_mouse_handle(uint8_t data_byte) {
} }
} }
static int ioctl_mouse(fs_node_t * node, int request, void * argp) { static int ioctl_mouse(fs_node_t * node, unsigned long request, void * argp) {
if (request == 1) { if (request == 1) {
mouse_cycle = 0; mouse_cycle = 0;
return 0; return 0;

View File

@ -217,7 +217,7 @@ static void mouse_on_off(unsigned int status) {
outportl(vbox_port, vbox_phys_mouse); outportl(vbox_port, vbox_phys_mouse);
} }
static int ioctl_mouse(fs_node_t * node, int request, void * argp) { static int ioctl_mouse(fs_node_t * node, unsigned long request, void * argp) {
if (request == 1) { if (request == 1) {
/* Disable */ /* Disable */
mouse_on_off(VBOX_MOUSE_OFF); mouse_on_off(VBOX_MOUSE_OFF);
@ -234,7 +234,7 @@ static int ioctl_mouse(fs_node_t * node, int request, void * argp) {
return -1; return -1;
} }
uint64_t write_pointer(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t write_pointer(fs_node_t * node, off_t offset, size_t size, uint8_t *buffer) {
if (!mouse_state) { if (!mouse_state) {
return -1; return -1;
} }
@ -245,7 +245,7 @@ uint64_t write_pointer(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t
return size; return size;
} }
uint64_t write_rectpipe(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t write_rectpipe(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
(void)node; (void)node;
(void)offset; (void)offset;

View File

@ -465,7 +465,7 @@ static void vmware_resize(void * data, char * name) {
} }
} }
static int ioctl_mouse(fs_node_t * node, int request, void * argp) { static int ioctl_mouse(fs_node_t * node, unsigned long request, void * argp) {
switch (request) { switch (request) {
case 1: case 1:
/* Disable */ /* Disable */

View File

@ -32,12 +32,12 @@
#define SND_BUF_SIZE 0x4000 #define SND_BUF_SIZE 0x4000
static uint64_t snd_dsp_write(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t *buffer); static ssize_t snd_dsp_write(fs_node_t * node, off_t offset, size_t size, uint8_t *buffer);
static int snd_dsp_ioctl(fs_node_t * node, int request, void * argp); static int snd_dsp_ioctl(fs_node_t * node, unsigned long request, void * argp);
static void snd_dsp_open(fs_node_t * node, unsigned int flags); static void snd_dsp_open(fs_node_t * node, unsigned int flags);
static void snd_dsp_close(fs_node_t * node); static void snd_dsp_close(fs_node_t * node);
static int snd_mixer_ioctl(fs_node_t * node, int request, void * argp); static int snd_mixer_ioctl(fs_node_t * node, unsigned long request, void * argp);
static void snd_mixer_open(fs_node_t * node, unsigned int flags); static void snd_mixer_open(fs_node_t * node, unsigned int flags);
static void snd_mixer_close(fs_node_t * node); static void snd_mixer_close(fs_node_t * node);
@ -105,7 +105,7 @@ snd_unregister_cleanup:
return rv; return rv;
} }
static uint64_t snd_dsp_write(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t snd_dsp_write(fs_node_t * node, off_t offset, size_t size, uint8_t *buffer) {
if (!_devices.length) return -1; /* No sink available. */ if (!_devices.length) return -1; /* No sink available. */
struct dsp_node * dsp = node->device; struct dsp_node * dsp = node->device;
@ -122,7 +122,7 @@ static uint64_t snd_dsp_write(fs_node_t * node, uint64_t offset, uint64_t size,
return out; return out;
} }
static int snd_dsp_ioctl(fs_node_t * node, int request, void * argp) { static int snd_dsp_ioctl(fs_node_t * node, unsigned long request, void * argp) {
/* Potentially use this to set sample rates in the future */ /* Potentially use this to set sample rates in the future */
struct dsp_node * dsp = node->device; struct dsp_node * dsp = node->device;
if (request == 4) { if (request == 4) {
@ -178,7 +178,7 @@ static snd_device_t * snd_device_by_id(uint32_t device_id) {
return out; return out;
} }
static int snd_mixer_ioctl(fs_node_t * node, int request, void * argp) { static int snd_mixer_ioctl(fs_node_t * node, unsigned long request, void * argp) {
switch (request) { switch (request) {
case SND_MIXER_GET_KNOBS: { case SND_MIXER_GET_KNOBS: {
snd_knob_list_t * list = argp; snd_knob_list_t * list = argp;

View File

@ -285,7 +285,7 @@ static void init_tx(struct e1000_nic * device) {
read_command(device, E1000_REG_TCTRL)); read_command(device, E1000_REG_TCTRL));
} }
static int ioctl_e1000(fs_node_t * node, int request, void * argp) { static int ioctl_e1000(fs_node_t * node, unsigned long request, void * argp) {
struct e1000_nic * nic = node->device; struct e1000_nic * nic = node->device;
switch (request) { switch (request) {
@ -310,14 +310,14 @@ static int ioctl_e1000(fs_node_t * node, int request, void * argp) {
} }
} }
static uint64_t write_e1000(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t write_e1000(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
struct e1000_nic * nic = node->device; struct e1000_nic * nic = node->device;
/* write packet */ /* write packet */
send_packet(nic, buffer, size); send_packet(nic, buffer, size);
return size; return size;
} }
static uint64_t read_e1000(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t read_e1000(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
if (size != 8092) return 0; if (size != 8092) return 0;
struct e1000_nic * nic = node->device; struct e1000_nic * nic = node->device;

View File

@ -123,7 +123,7 @@ static pex_client_t * create_client(pex_ex_t * p) {
return out; return out;
} }
static uint64_t read_server(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t * buffer) { static ssize_t read_server(fs_node_t * node, off_t offset, size_t size, uint8_t * buffer) {
pex_ex_t * p = (pex_ex_t *)node->device; pex_ex_t * p = (pex_ex_t *)node->device;
debug_print(INFO, "[pex] server read(...)"); debug_print(INFO, "[pex] server read(...)");
@ -141,13 +141,13 @@ static uint64_t read_server(fs_node_t * node, uint64_t offset, uint64_t size, ui
} }
memcpy(buffer, packet, packet->size + sizeof(packet_t)); memcpy(buffer, packet, packet->size + sizeof(packet_t));
uint64_t out = packet->size + sizeof(packet_t); ssize_t out = packet->size + sizeof(packet_t);
free(packet); free(packet);
return out; return out;
} }
static uint64_t write_server(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t * buffer) { static ssize_t write_server(fs_node_t * node, off_t offset, size_t size, uint8_t * buffer) {
pex_ex_t * p = (pex_ex_t *)node->device; pex_ex_t * p = (pex_ex_t *)node->device;
debug_print(INFO, "[pex] server write(...)"); debug_print(INFO, "[pex] server write(...)");
@ -176,7 +176,7 @@ static uint64_t write_server(fs_node_t * node, uint64_t offset, uint64_t size, u
return send_to_client(p, head->target, size - sizeof(header_t), head->data) + sizeof(header_t); return send_to_client(p, head->target, size - sizeof(header_t), head->data) + sizeof(header_t);
} }
static int ioctl_server(fs_node_t * node, int request, void * argp) { static int ioctl_server(fs_node_t * node, unsigned long request, void * argp) {
pex_ex_t * p = (pex_ex_t *)node->device; pex_ex_t * p = (pex_ex_t *)node->device;
switch (request) { switch (request) {
@ -187,7 +187,7 @@ static int ioctl_server(fs_node_t * node, int request, void * argp) {
} }
} }
static uint64_t read_client(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t * buffer) { static ssize_t read_client(fs_node_t * node, off_t offset, size_t size, uint8_t * buffer) {
pex_client_t * c = (pex_client_t *)node->inode; pex_client_t * c = (pex_client_t *)node->inode;
if (c->parent != node->device) { if (c->parent != node->device) {
printf("pex: Invalid device endpoint on client read?\n"); printf("pex: Invalid device endpoint on client read?\n");
@ -208,7 +208,7 @@ static uint64_t read_client(fs_node_t * node, uint64_t offset, uint64_t size, ui
} }
memcpy(buffer, &packet->data, packet->size); memcpy(buffer, &packet->data, packet->size);
uint32_t out = packet->size; ssize_t out = packet->size;
debug_print(INFO, "[pex] Client received packet of size %zu", packet->size); debug_print(INFO, "[pex] Client received packet of size %zu", packet->size);
if (out == 0) { if (out == 0) {
@ -219,7 +219,7 @@ static uint64_t read_client(fs_node_t * node, uint64_t offset, uint64_t size, ui
return out; return out;
} }
static uint64_t write_client(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t * buffer) { static ssize_t write_client(fs_node_t * node, off_t offset, size_t size, uint8_t * buffer) {
pex_client_t * c = (pex_client_t *)node->inode; pex_client_t * c = (pex_client_t *)node->inode;
if (c->parent != node->device) { if (c->parent != node->device) {
debug_print(WARNING, "[pex] Invalid device endpoint on client write?"); debug_print(WARNING, "[pex] Invalid device endpoint on client write?");
@ -239,7 +239,7 @@ static uint64_t write_client(fs_node_t * node, uint64_t offset, uint64_t size, u
return size; return size;
} }
static int ioctl_client(fs_node_t * node, int request, void * argp) { static int ioctl_client(fs_node_t * node, unsigned long request, void * argp) {
pex_client_t * c = (pex_client_t *)node->inode; pex_client_t * c = (pex_client_t *)node->inode;
switch (request) { switch (request) {
@ -414,7 +414,7 @@ static fs_node_t * finddir_packetfs(fs_node_t * node, char * name) {
return NULL; return NULL;
} }
static int create_packetfs(fs_node_t *parent, char *name, uint16_t permission) { static int create_packetfs(fs_node_t *parent, char *name, mode_t permission) {
if (!name) return -EINVAL; if (!name) return -EINVAL;
pex_t * p = (pex_t *)parent->device; pex_t * p = (pex_t *)parent->device;

View File

@ -108,7 +108,7 @@ static void pipe_alert_waiters(pipe_device_t * pipe) {
spin_unlock(pipe->alert_lock); spin_unlock(pipe->alert_lock);
} }
uint64_t read_pipe(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { ssize_t read_pipe(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
/* Retreive the pipe object associated with this file node */ /* Retreive the pipe object associated with this file node */
pipe_device_t * pipe = (pipe_device_t *)node->device; pipe_device_t * pipe = (pipe_device_t *)node->device;
@ -138,7 +138,7 @@ uint64_t read_pipe(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buf
return collected; return collected;
} }
uint64_t write_pipe(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { ssize_t write_pipe(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
/* Retreive the pipe object associated with this file node */ /* Retreive the pipe object associated with this file node */
pipe_device_t * pipe = (pipe_device_t *)node->device; pipe_device_t * pipe = (pipe_device_t *)node->device;

View File

@ -15,7 +15,7 @@
#include <kernel/string.h> #include <kernel/string.h>
#include <kernel/arch/x86_64/ports.h> #include <kernel/arch/x86_64/ports.h>
static uint64_t read_port(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t read_port(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
switch (size) { switch (size) {
case 1: case 1:
buffer[0] = inportb(offset); buffer[0] = inportb(offset);
@ -36,7 +36,7 @@ static uint64_t read_port(fs_node_t *node, uint64_t offset, uint64_t size, uint8
return size; return size;
} }
static uint64_t write_port(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t write_port(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
switch (size) { switch (size) {
case 1: case 1:
outportb(offset, buffer[0]); outportb(offset, buffer[0]);

View File

@ -56,7 +56,7 @@ static fs_node_t * procfs_generic_create(const char * name, read_type_t read_fun
return fnode; return fnode;
} }
static uint64_t proc_cmdline_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t proc_cmdline_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char buf[1024]; char buf[1024];
process_t * proc = process_from_pid(node->inode); process_t * proc = process_from_pid(node->inode);
@ -69,7 +69,7 @@ static uint64_t proc_cmdline_func(fs_node_t *node, uint64_t offset, uint64_t siz
snprintf(buf, 100, "%s", proc->name); snprintf(buf, 100, "%s", proc->name);
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
@ -92,14 +92,14 @@ static uint64_t proc_cmdline_func(fs_node_t *node, uint64_t offset, uint64_t siz
} }
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
return size; return size;
} }
static uint64_t proc_status_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t proc_status_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char buf[2048]; char buf[2048];
process_t * proc = process_from_pid(node->inode); process_t * proc = process_from_pid(node->inode);
process_t * parent = process_get_parent(proc); process_t * parent = process_get_parent(proc);
@ -173,7 +173,7 @@ static uint64_t proc_status_func(fs_node_t *node, uint64_t offset, uint64_t size
); );
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
@ -252,7 +252,7 @@ static fs_node_t * procfs_procdir_create(process_t * process) {
return fnode; return fnode;
} }
static uint64_t cpuinfo_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t cpuinfo_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char buf[4096]; char buf[4096];
size_t _bsize = 0; size_t _bsize = 0;
@ -278,14 +278,14 @@ static uint64_t cpuinfo_func(fs_node_t *node, uint64_t offset, uint64_t size, ui
} }
#endif #endif
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
return size; return size;
} }
static uint64_t meminfo_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t meminfo_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char buf[1024]; char buf[1024];
size_t total = mmu_total_memory(); size_t total = mmu_total_memory();
size_t free = total - mmu_used_memory(); size_t free = total - mmu_used_memory();
@ -298,7 +298,7 @@ static uint64_t meminfo_func(fs_node_t *node, uint64_t offset, uint64_t size, ui
, total, free, kheap); , total, free, kheap);
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
@ -306,7 +306,7 @@ static uint64_t meminfo_func(fs_node_t *node, uint64_t offset, uint64_t size, ui
} }
#ifdef __x86_64__ #ifdef __x86_64__
static uint64_t pat_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t pat_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char buf[1024]; char buf[1024];
uint32_t pat_value_low, pat_value_high; uint32_t pat_value_low, pat_value_high;
@ -353,7 +353,7 @@ static uint64_t pat_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_
); );
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
@ -361,27 +361,27 @@ static uint64_t pat_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_
} }
#endif #endif
static uint64_t uptime_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t uptime_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char buf[1024]; char buf[1024];
unsigned long timer_ticks, timer_subticks; unsigned long timer_ticks, timer_subticks;
relative_time(0,0,&timer_ticks,&timer_subticks); relative_time(0,0,&timer_ticks,&timer_subticks);
snprintf(buf, 100, "%lu.%06lu\n", timer_ticks, timer_subticks); snprintf(buf, 100, "%lu.%06lu\n", timer_ticks, timer_subticks);
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
return size; return size;
} }
static uint64_t cmdline_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t cmdline_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char buf[1024]; char buf[1024];
const char * cmdline = arch_get_cmdline(); const char * cmdline = arch_get_cmdline();
snprintf(buf, 1000, "%s\n", cmdline ? cmdline : ""); snprintf(buf, 1000, "%s\n", cmdline ? cmdline : "");
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
@ -389,7 +389,7 @@ static uint64_t cmdline_func(fs_node_t *node, uint64_t offset, uint64_t size, ui
return 0; return 0;
} }
static uint64_t version_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t version_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char buf[1024]; char buf[1024];
char version_number[512]; char version_number[512];
snprintf(version_number, 510, snprintf(version_number, 510,
@ -407,19 +407,19 @@ static uint64_t version_func(fs_node_t *node, uint64_t offset, uint64_t size, ui
__kernel_arch); __kernel_arch);
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
return size; return size;
} }
static uint64_t compiler_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t compiler_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char buf[1024]; char buf[1024];
snprintf(buf, 1000, "%s\n", __kernel_compiler_version); snprintf(buf, 1000, "%s\n", __kernel_compiler_version);
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) return 0; if ((size_t)offset > _bsize) return 0;
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
@ -455,7 +455,7 @@ static void mount_recurse(char * buf, tree_node_t * node, size_t height) {
} }
} }
static uint64_t mounts_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t mounts_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char * buf = malloc(4096); char * buf = malloc(4096);
buf[0] = '\0'; buf[0] = '\0';
@ -463,7 +463,7 @@ static uint64_t mounts_func(fs_node_t *node, uint64_t offset, uint64_t size, uin
mount_recurse(buf, fs_tree->root, 0); mount_recurse(buf, fs_tree->root, 0);
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) { if ((size_t)offset > _bsize) {
free(buf); free(buf);
return 0; return 0;
} }
@ -474,7 +474,7 @@ static uint64_t mounts_func(fs_node_t *node, uint64_t offset, uint64_t size, uin
return size; return size;
} }
static uint64_t modules_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t modules_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
#if 0 #if 0
list_t * hash_keys = hashmap_keys(modules_get_list()); list_t * hash_keys = hashmap_keys(modules_get_list());
char * buf = malloc(hash_keys->length * 512); char * buf = malloc(hash_keys->length * 512);
@ -506,7 +506,7 @@ static uint64_t modules_func(fs_node_t *node, uint64_t offset, uint64_t size, ui
free(hash_keys); free(hash_keys);
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) { if ((size_t)offset > _bsize) {
free(buf); free(buf);
return 0; return 0;
} }
@ -521,7 +521,7 @@ static uint64_t modules_func(fs_node_t *node, uint64_t offset, uint64_t size, ui
extern hashmap_t * fs_types; /* from kernel/fs/vfs.c */ extern hashmap_t * fs_types; /* from kernel/fs/vfs.c */
static uint64_t filesystems_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t filesystems_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
list_t * hash_keys = hashmap_keys(fs_types); list_t * hash_keys = hashmap_keys(fs_types);
char * buf = malloc(hash_keys->length * 512); char * buf = malloc(hash_keys->length * 512);
unsigned int soffset = 0; unsigned int soffset = 0;
@ -532,7 +532,7 @@ static uint64_t filesystems_func(fs_node_t *node, uint64_t offset, uint64_t size
free(hash_keys); free(hash_keys);
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) { if ((size_t)offset > _bsize) {
free(buf); free(buf);
return 0; return 0;
} }
@ -543,13 +543,13 @@ static uint64_t filesystems_func(fs_node_t *node, uint64_t offset, uint64_t size
return size; return size;
} }
static uint64_t loader_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t loader_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char * buf = malloc(512); char * buf = malloc(512);
snprintf(buf, 511, "%s\n", arch_get_loader()); snprintf(buf, 511, "%s\n", arch_get_loader());
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) { if ((size_t)offset > _bsize) {
free(buf); free(buf);
return 0; return 0;
} }
@ -563,7 +563,7 @@ static uint64_t loader_func(fs_node_t *node, uint64_t offset, uint64_t size, uin
#ifdef __x86_64__ #ifdef __x86_64__
#include <kernel/arch/x86_64/irq.h> #include <kernel/arch/x86_64/irq.h>
#include <kernel/arch/x86_64/ports.h> #include <kernel/arch/x86_64/ports.h>
static uint64_t irq_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t irq_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char * buf = malloc(4096); char * buf = malloc(4096);
unsigned int soffset = 0; unsigned int soffset = 0;
@ -588,7 +588,7 @@ static uint64_t irq_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_
soffset += snprintf(&buf[soffset], 100, "imr=0x%04x\n", (inportb(0xA1) << 8) | inportb(0x21)); soffset += snprintf(&buf[soffset], 100, "imr=0x%04x\n", (inportb(0xA1) << 8) | inportb(0x21));
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) { if ((size_t)offset > _bsize) {
free(buf); free(buf);
return 0; return 0;
} }
@ -637,7 +637,7 @@ static void scan_count(uint32_t device, uint16_t vendorid, uint16_t deviceid, vo
(*count)++; (*count)++;
} }
static uint64_t pci_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t pci_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
size_t count = 0; size_t count = 0;
pci_scan(&scan_count, -1, &count); pci_scan(&scan_count, -1, &count);
@ -647,7 +647,7 @@ static uint64_t pci_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_
pci_scan(&scan_hit_list, -1, &b); pci_scan(&scan_hit_list, -1, &b);
size_t _bsize = b.offset; size_t _bsize = b.offset;
if (offset > _bsize) { if ((size_t)offset > _bsize) {
free(b.buffer); free(b.buffer);
return 0; return 0;
} }
@ -659,7 +659,7 @@ static uint64_t pci_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_
} }
#endif #endif
static uint64_t smp_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t smp_func(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
char * buf = malloc(4096); char * buf = malloc(4096);
unsigned int soffset = 0; unsigned int soffset = 0;
@ -668,7 +668,7 @@ static uint64_t smp_func(fs_node_t *node, uint64_t offset, uint64_t size, uint8_
} }
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) { if ((size_t)offset > _bsize) {
free(buf); free(buf);
return 0; return 0;
} }
@ -794,7 +794,7 @@ static struct dirent * readdir_procfs_root(fs_node_t *node, uint64_t index) {
return out; return out;
} }
static int readlink_self(fs_node_t * node, char * buf, size_t size) { static ssize_t readlink_self(fs_node_t * node, char * buf, size_t size) {
char tmp[30]; char tmp[30];
size_t req; size_t req;
snprintf(tmp, 100, "/proc/%d", this_core->current_process->id); snprintf(tmp, 100, "/proc/%d", this_core->current_process->id);

View File

@ -26,19 +26,19 @@
#include <kernel/process.h> #include <kernel/process.h>
#include <kernel/mmu.h> #include <kernel/mmu.h>
static uint64_t read_ramdisk(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer); static ssize_t read_ramdisk(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer);
static uint64_t write_ramdisk(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer); static ssize_t write_ramdisk(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer);
static void open_ramdisk(fs_node_t *node, unsigned int flags); static void open_ramdisk(fs_node_t *node, unsigned int flags);
static void close_ramdisk(fs_node_t *node); static void close_ramdisk(fs_node_t *node);
static uint64_t read_ramdisk(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t read_ramdisk(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
if (offset > node->length) { if ((size_t)offset > node->length) {
return 0; return 0;
} }
if (offset + size > node->length) { if ((size_t)offset + size > node->length) {
unsigned int i = node->length - offset; size_t i = node->length - offset;
size = i; size = i;
} }
@ -47,8 +47,8 @@ static uint64_t read_ramdisk(fs_node_t *node, uint64_t offset, uint64_t size, ui
return size; return size;
} }
static uint64_t write_ramdisk(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t write_ramdisk(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
if (offset > node->length) { if ((size_t)offset > node->length) {
return 0; return 0;
} }
@ -69,7 +69,7 @@ static void close_ramdisk(fs_node_t * node) {
return; return;
} }
static int ioctl_ramdisk(fs_node_t * node, int request, void * argp) { static int ioctl_ramdisk(fs_node_t * node, unsigned long request, void * argp) {
switch (request) { switch (request) {
case 0x4001: case 0x4001:
if (this_core->current_process->user != 0) { if (this_core->current_process->user != 0) {

View File

@ -26,7 +26,7 @@ static uint32_t rand(void) {
return w = w ^ (w >> 19) ^ t ^ (t >> 8); return w = w ^ (w >> 19) ^ t ^ (t >> 8);
} }
static uint64_t read_random(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t read_random(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
size_t s = 0; size_t s = 0;
while (s < size) { while (s < size) {
buffer[s] = rand() % 0xFF; buffer[s] = rand() % 0xFF;

View File

@ -134,7 +134,7 @@ static int count_slashes(char * string) {
return i; return i;
} }
static struct dirent * readdir_tar_root(fs_node_t *node, uint64_t index) { static struct dirent * readdir_tar_root(fs_node_t *node, unsigned long index) {
if (index == 0) { if (index == 0) {
struct dirent * out = malloc(sizeof(struct dirent)); struct dirent * out = malloc(sizeof(struct dirent));
memset(out, 0x00, sizeof(struct dirent)); memset(out, 0x00, sizeof(struct dirent));
@ -198,13 +198,13 @@ static struct dirent * readdir_tar_root(fs_node_t *node, uint64_t index) {
return NULL; return NULL;
} }
static uint64_t read_tarfs(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t * buffer) { static ssize_t read_tarfs(fs_node_t * node, off_t offset, size_t size, uint8_t * buffer) {
struct tarfs * self = node->device; struct tarfs * self = node->device;
struct ustar * file = malloc(sizeof(struct ustar)); struct ustar * file = malloc(sizeof(struct ustar));
ustar_from_offset(self, node->inode, file); ustar_from_offset(self, node->inode, file);
size_t file_size = interpret_size(file); size_t file_size = interpret_size(file);
if (offset > file_size) return 0; if ((size_t)offset > file_size) return 0;
if (offset + size > file_size) { if (offset + size > file_size) {
size = file_size - offset; size = file_size - offset;
} }
@ -214,7 +214,7 @@ static uint64_t read_tarfs(fs_node_t * node, uint64_t offset, uint64_t size, uin
return read_fs(self->device, offset + node->inode + 512, size, buffer); return read_fs(self->device, offset + node->inode + 512, size, buffer);
} }
static struct dirent * readdir_tarfs(fs_node_t *node, uint64_t index) { static struct dirent * readdir_tarfs(fs_node_t *node, unsigned long index) {
if (index == 0) { if (index == 0) {
struct dirent * out = malloc(sizeof(struct dirent)); struct dirent * out = malloc(sizeof(struct dirent));
memset(out, 0x00, sizeof(struct dirent)); memset(out, 0x00, sizeof(struct dirent));
@ -338,7 +338,7 @@ static fs_node_t * finddir_tarfs(fs_node_t *node, char *name) {
return NULL; return NULL;
} }
static int readlink_tarfs(fs_node_t * node, char * buf, size_t size) { static ssize_t readlink_tarfs(fs_node_t * node, char * buf, size_t size) {
struct tarfs * self = node->device; struct tarfs * self = node->device;
struct ustar * file = malloc(sizeof(struct ustar)); struct ustar * file = malloc(sizeof(struct ustar));
ustar_from_offset(self, node->inode, file); ustar_from_offset(self, node->inode, file);

View File

@ -92,7 +92,7 @@ static int symlink_tmpfs(fs_node_t * parent, char * target, char * name) {
return 0; return 0;
} }
static int readlink_tmpfs(fs_node_t * node, char * buf, size_t size) { static ssize_t readlink_tmpfs(fs_node_t * node, char * buf, size_t size) {
struct tmpfs_file * t = (struct tmpfs_file *)(node->device); struct tmpfs_file * t = (struct tmpfs_file *)(node->device);
if (t->type != TMPFS_TYPE_LINK) { if (t->type != TMPFS_TYPE_LINK) {
printf("tmpfs: not a symlink?\n"); printf("tmpfs: not a symlink?\n");
@ -176,13 +176,13 @@ static char * tmpfs_file_getset_block(struct tmpfs_file * t, size_t blockid, int
} }
static uint64_t read_tmpfs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t read_tmpfs(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
struct tmpfs_file * t = (struct tmpfs_file *)(node->device); struct tmpfs_file * t = (struct tmpfs_file *)(node->device);
t->atime = now(); t->atime = now();
uint64_t end; uint64_t end;
if (offset + size > t->length) { if ((size_t)offset + size > t->length) {
end = t->length; end = t->length;
} else { } else {
end = offset + size; end = offset + size;
@ -191,7 +191,7 @@ static uint64_t read_tmpfs(fs_node_t *node, uint64_t offset, uint64_t size, uint
uint64_t end_block = end / BLOCKSIZE; uint64_t end_block = end / BLOCKSIZE;
uint64_t end_size = end - end_block * BLOCKSIZE; uint64_t end_size = end - end_block * BLOCKSIZE;
uint64_t size_to_read = end - offset; uint64_t size_to_read = end - offset;
if (start_block == end_block && offset == end) return 0; if (start_block == end_block && (size_t)offset == end) return 0;
if (start_block == end_block) { if (start_block == end_block) {
void *buf = tmpfs_file_getset_block(t, start_block, 0); void *buf = tmpfs_file_getset_block(t, start_block, 0);
memcpy(buffer, (uint8_t *)(((uintptr_t)buf) + ((uintptr_t)offset % BLOCKSIZE)), size_to_read); memcpy(buffer, (uint8_t *)(((uintptr_t)buf) + ((uintptr_t)offset % BLOCKSIZE)), size_to_read);
@ -220,14 +220,14 @@ static uint64_t read_tmpfs(fs_node_t *node, uint64_t offset, uint64_t size, uint
return size_to_read; return size_to_read;
} }
static uint64_t write_tmpfs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t write_tmpfs(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
struct tmpfs_file * t = (struct tmpfs_file *)(node->device); struct tmpfs_file * t = (struct tmpfs_file *)(node->device);
t->atime = now(); t->atime = now();
t->mtime = t->atime; t->mtime = t->atime;
uint64_t end; uint64_t end;
if (offset + size > t->length) { if ((size_t)offset + size > t->length) {
t->length = offset + size; t->length = offset + size;
} }
end = offset + size; end = offset + size;
@ -281,7 +281,7 @@ static int chown_tmpfs(fs_node_t * node, int uid, int gid) {
return 0; return 0;
} }
static void truncate_tmpfs(fs_node_t * node) { static int truncate_tmpfs(fs_node_t * node) {
struct tmpfs_file * t = (struct tmpfs_file *)(node->device); struct tmpfs_file * t = (struct tmpfs_file *)(node->device);
for (size_t i = 0; i < t->block_count; ++i) { for (size_t i = 0; i < t->block_count; ++i) {
mmu_frame_clear((uintptr_t)t->blocks[i] * 0x1000); mmu_frame_clear((uintptr_t)t->blocks[i] * 0x1000);
@ -290,6 +290,7 @@ static void truncate_tmpfs(fs_node_t * node) {
t->block_count = 0; t->block_count = 0;
t->length = 0; t->length = 0;
t->mtime = node->atime; t->mtime = node->atime;
return 0;
} }
static void open_tmpfs(fs_node_t * node, unsigned int flags) { static void open_tmpfs(fs_node_t * node, unsigned int flags) {
@ -432,7 +433,7 @@ static int unlink_tmpfs(fs_node_t * node, char * name) {
return 0; return 0;
} }
static int create_tmpfs(fs_node_t *parent, char *name, uint16_t permission) { static int create_tmpfs(fs_node_t *parent, char *name, mode_t permission) {
if (!name) return -EINVAL; if (!name) return -EINVAL;
struct tmpfs_dir * d = (struct tmpfs_dir *)parent->device; struct tmpfs_dir * d = (struct tmpfs_dir *)parent->device;
@ -459,7 +460,7 @@ static int create_tmpfs(fs_node_t *parent, char *name, uint16_t permission) {
return 0; return 0;
} }
static int mkdir_tmpfs(fs_node_t * parent, char * name, uint16_t permission) { static int mkdir_tmpfs(fs_node_t * parent, char * name, mode_t permission) {
if (!name) return -EINVAL; if (!name) return -EINVAL;
if (!strlen(name)) return -EINVAL; if (!strlen(name)) return -EINVAL;

View File

@ -261,7 +261,7 @@ static void tty_fill_name(pty_t * pty, char * out) {
snprintf((char*)out, 100, "/dev/pts/%zd", pty->name); snprintf((char*)out, 100, "/dev/pts/%zd", pty->name);
} }
int pty_ioctl(pty_t * pty, int request, void * argp) { int pty_ioctl(pty_t * pty, unsigned long request, void * argp) {
switch (request) { switch (request) {
case IOCTLDTYPE: case IOCTLDTYPE:
/* /*
@ -328,13 +328,13 @@ int pty_ioctl(pty_t * pty, int request, void * argp) {
} }
} }
uint64_t read_pty_master(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t *buffer) { ssize_t read_pty_master(fs_node_t * node, off_t offset, size_t size, uint8_t *buffer) {
pty_t * pty = (pty_t *)node->device; pty_t * pty = (pty_t *)node->device;
/* Standard pipe read */ /* Standard pipe read */
return ring_buffer_read(pty->out, size, buffer); return ring_buffer_read(pty->out, size, buffer);
} }
uint64_t write_pty_master(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t *buffer) { ssize_t write_pty_master(fs_node_t * node, off_t offset, size_t size, uint8_t *buffer) {
pty_t * pty = (pty_t *)node->device; pty_t * pty = (pty_t *)node->device;
size_t l = 0; size_t l = 0;
@ -351,7 +351,7 @@ void close_pty_master(fs_node_t * node) {
return; return;
} }
uint64_t read_pty_slave(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t *buffer) { ssize_t read_pty_slave(fs_node_t * node, off_t offset, size_t size, uint8_t *buffer) {
pty_t * pty = (pty_t *)node->device; pty_t * pty = (pty_t *)node->device;
if (pty->tios.c_lflag & ICANON) { if (pty->tios.c_lflag & ICANON) {
@ -365,7 +365,7 @@ uint64_t read_pty_slave(fs_node_t * node, uint64_t offset, uint64_t size, uint8
} }
} }
uint64_t write_pty_slave(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t *buffer) { ssize_t write_pty_slave(fs_node_t * node, off_t offset, size_t size, uint8_t *buffer) {
pty_t * pty = (pty_t *)node->device; pty_t * pty = (pty_t *)node->device;
size_t l = 0; size_t l = 0;
@ -390,12 +390,12 @@ void close_pty_slave(fs_node_t * node) {
* These are separate functions just in case I ever feel the need to do * These are separate functions just in case I ever feel the need to do
* things differently in the slave or master. * things differently in the slave or master.
*/ */
int ioctl_pty_master(fs_node_t * node, int request, void * argp) { int ioctl_pty_master(fs_node_t * node, unsigned long request, void * argp) {
pty_t * pty = (pty_t *)node->device; pty_t * pty = (pty_t *)node->device;
return pty_ioctl(pty, request, argp); return pty_ioctl(pty, request, argp);
} }
int ioctl_pty_slave(fs_node_t * node, int request, void * argp) { int ioctl_pty_slave(fs_node_t * node, unsigned long request, void * argp) {
pty_t * pty = (pty_t *)node->device; pty_t * pty = (pty_t *)node->device;
return pty_ioctl(pty, request, argp); return pty_ioctl(pty, request, argp);
} }
@ -502,7 +502,7 @@ static int isatty(fs_node_t * node) {
return ioctl_fs(node, IOCTLDTYPE, NULL) == IOCTL_DTYPE_TTY; return ioctl_fs(node, IOCTLDTYPE, NULL) == IOCTL_DTYPE_TTY;
} }
static int readlink_dev_tty(fs_node_t * node, char * buf, size_t size) { static ssize_t readlink_dev_tty(fs_node_t * node, char * buf, size_t size) {
pty_t * pty = NULL; pty_t * pty = NULL;
for (unsigned int i = 0; i < ((this_core->current_process->fds->length < 3) ? this_core->current_process->fds->length : 3); ++i) { for (unsigned int i = 0; i < ((this_core->current_process->fds->length < 3) ? this_core->current_process->fds->length : 3); ++i) {
@ -552,7 +552,7 @@ static fs_node_t * create_dev_tty(void) {
return fnode; return fnode;
} }
static struct dirent * readdir_pty(fs_node_t *node, uint64_t index) { static struct dirent * readdir_pty(fs_node_t *node, unsigned long index) {
if (index == 0) { if (index == 0) {
struct dirent * out = malloc(sizeof(struct dirent)); struct dirent * out = malloc(sizeof(struct dirent));
memset(out, 0x00, sizeof(struct dirent)); memset(out, 0x00, sizeof(struct dirent));

View File

@ -36,7 +36,7 @@ static void close_complete(struct unix_pipe * self) {
ring_buffer_destroy(self->buffer); ring_buffer_destroy(self->buffer);
} }
static uint64_t read_unixpipe(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t read_unixpipe(fs_node_t * node, off_t offset, size_t size, uint8_t *buffer) {
struct unix_pipe * self = node->device; struct unix_pipe * self = node->device;
size_t read = 0; size_t read = 0;
@ -54,7 +54,7 @@ static uint64_t read_unixpipe(fs_node_t * node, uint64_t offset, uint64_t size,
return read; return read;
} }
static uint64_t write_unixpipe(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t write_unixpipe(fs_node_t * node, off_t offset, size_t size, uint8_t *buffer) {
struct unix_pipe * self = node->device; struct unix_pipe * self = node->device;
size_t written = 0; size_t written = 0;

View File

@ -61,7 +61,7 @@ int has_permission(fs_node_t * node, int permission_bit) {
} }
static struct dirent * readdir_mapper(fs_node_t *node, uint64_t index) { static struct dirent * readdir_mapper(fs_node_t *node, unsigned long index) {
tree_node_t * d = (tree_node_t *)node->device; tree_node_t * d = (tree_node_t *)node->device;
if (!d) return NULL; if (!d) return NULL;
@ -79,7 +79,7 @@ static struct dirent * readdir_mapper(fs_node_t *node, uint64_t index) {
} }
index -= 2; index -= 2;
unsigned int i = 0; unsigned long i = 0;
foreach(child, d->children) { foreach(child, d->children) {
if (i == index) { if (i == index) {
/* Recursively print the children */ /* Recursively print the children */
@ -145,12 +145,10 @@ int selectwait_fs(fs_node_t * node, void * process) {
* @param buffer A buffer to copy of the read data into * @param buffer A buffer to copy of the read data into
* @returns Bytes read * @returns Bytes read
*/ */
uint64_t read_fs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { ssize_t read_fs(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
if (!node) return -ENOENT; if (!node) return -ENOENT;
if (node->read) { if (node->read) {
uint64_t ret = node->read(node, offset, size, buffer); return node->read(node, offset, size, buffer);
return ret;
} else { } else {
return -EINVAL; return -EINVAL;
} }
@ -165,12 +163,10 @@ uint64_t read_fs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffe
* @param buffer A buffer to copy from * @param buffer A buffer to copy from
* @returns Bytes written * @returns Bytes written
*/ */
uint64_t write_fs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { ssize_t write_fs(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
if (!node) return -ENOENT; if (!node) return -ENOENT;
if (node->write) { if (node->write) {
uint64_t ret = node->write(node, offset, size, buffer); return node->write(node, offset, size, buffer);
return ret;
} else { } else {
return -EROFS; return -EROFS;
} }
@ -181,12 +177,14 @@ uint64_t write_fs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buff
* *
* @param node File to resize * @param node File to resize
*/ */
void truncate_fs(fs_node_t * node) { int truncate_fs(fs_node_t * node) {
if (!node) return; if (!node) return -ENOENT;
if (node->truncate) { if (node->truncate) {
node->truncate(node); return node->truncate(node);
} }
return -EINVAL;
} }
//volatile uint8_t tmp_refcount_lock = 0; //volatile uint8_t tmp_refcount_lock = 0;
@ -254,7 +252,7 @@ void close_fs(fs_node_t *node) {
* @param node Node to change permissions for * @param node Node to change permissions for
* @param mode New mode bits * @param mode New mode bits
*/ */
int chmod_fs(fs_node_t *node, int mode) { int chmod_fs(fs_node_t *node, mode_t mode) {
if (node->chmod) { if (node->chmod) {
return node->chmod(node, mode); return node->chmod(node, mode);
} }
@ -264,7 +262,7 @@ int chmod_fs(fs_node_t *node, int mode) {
/** /**
* @brief Change ownership for a file system node. * @brief Change ownership for a file system node.
*/ */
int chown_fs(fs_node_t *node, int uid, int gid) { int chown_fs(fs_node_t *node, uid_t uid, gid_t gid) {
if (node->chown) { if (node->chown) {
return node->chown(node, uid, gid); return node->chown(node, uid, gid);
} }
@ -278,14 +276,13 @@ int chown_fs(fs_node_t *node, int uid, int gid) {
* @param index Offset to look for * @param index Offset to look for
* @returns A dirent object. * @returns A dirent object.
*/ */
struct dirent *readdir_fs(fs_node_t *node, uint64_t index) { struct dirent *readdir_fs(fs_node_t *node, unsigned long index) {
if (!node) return NULL; if (!node) return NULL;
if ((node->flags & FS_DIRECTORY) && node->readdir) { if ((node->flags & FS_DIRECTORY) && node->readdir) {
struct dirent *ret = node->readdir(node, index); return node->readdir(node, index);
return ret;
} else { } else {
return (struct dirent *)NULL; return NULL;
} }
} }
@ -300,12 +297,11 @@ fs_node_t *finddir_fs(fs_node_t *node, char *name) {
if (!node) return NULL; if (!node) return NULL;
if ((node->flags & FS_DIRECTORY) && node->finddir) { if ((node->flags & FS_DIRECTORY) && node->finddir) {
fs_node_t *ret = node->finddir(node, name); return node->finddir(node, name);
return ret;
} else { } else {
debug_print(WARNING, "Node passed to finddir_fs isn't a directory!"); debug_print(WARNING, "Node passed to finddir_fs isn't a directory!");
debug_print(WARNING, "node = %p, name = %s", (void*)node, name); debug_print(WARNING, "node = %p, name = %s", (void*)node, name);
return (fs_node_t *)NULL; return NULL;
} }
} }
@ -317,7 +313,7 @@ fs_node_t *finddir_fs(fs_node_t *node, char *name) {
* @param argp Depends on `request` * @param argp Depends on `request`
* @returns Depends on `request` * @returns Depends on `request`
*/ */
int ioctl_fs(fs_node_t *node, int request, void * argp) { int ioctl_fs(fs_node_t *node, unsigned long request, void * argp) {
if (!node) return -ENOENT; if (!node) return -ENOENT;
if (node->ioctl) { if (node->ioctl) {
@ -335,7 +331,7 @@ int ioctl_fs(fs_node_t *node, int request, void * argp) {
* and a file, thus, the use of flag sets should suffice * and a file, thus, the use of flag sets should suffice
*/ */
int create_file_fs(char *name, uint16_t permission) { int create_file_fs(char *name, mode_t permission) {
fs_node_t * parent; fs_node_t * parent;
char *cwd = (char *)(this_core->current_process->wd_name); char *cwd = (char *)(this_core->current_process->wd_name);
char *path = canonicalize_path(cwd, name); char *path = canonicalize_path(cwd, name);
@ -434,7 +430,7 @@ int unlink_fs(char * name) {
return ret; return ret;
} }
int mkdir_fs(char *name, uint16_t permission) { int mkdir_fs(char *name, mode_t permission) {
fs_node_t * parent; fs_node_t * parent;
char *cwd = (char *)(this_core->current_process->wd_name); char *cwd = (char *)(this_core->current_process->wd_name);
char *path = canonicalize_path(cwd, name); char *path = canonicalize_path(cwd, name);
@ -552,7 +548,7 @@ int symlink_fs(char * target, char * name) {
return ret; return ret;
} }
int readlink_fs(fs_node_t *node, char * buf, uint64_t size) { ssize_t readlink_fs(fs_node_t *node, char * buf, size_t size) {
if (!node) return -ENOENT; if (!node) return -ENOENT;
if (node->readlink) { if (node->readlink) {
@ -1095,7 +1091,7 @@ fs_node_t *kopen_recur(const char *filename, uint64_t flags, uint64_t symlink_de
* @param flags Flag bits for read/write mode. * @param flags Flag bits for read/write mode.
* @returns A file system node element that the caller can free. * @returns A file system node element that the caller can free.
*/ */
fs_node_t *kopen(const char *filename, uint64_t flags) { fs_node_t *kopen(const char *filename, unsigned int flags) {
debug_print(NOTICE, "kopen(%s)", filename); debug_print(NOTICE, "kopen(%s)", filename);
return kopen_recur(filename, flags, 0, (char *)(this_core->current_process->wd_name)); return kopen_recur(filename, flags, 0, (char *)(this_core->current_process->wd_name));

View File

@ -14,11 +14,11 @@
#include <kernel/vfs.h> #include <kernel/vfs.h>
#include <kernel/string.h> #include <kernel/string.h>
static uint64_t read_null(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t read_null(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
return 0; return 0;
} }
static uint64_t write_null(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t write_null(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
return 0; return 0;
} }
@ -30,12 +30,12 @@ static void close_null(fs_node_t * node) {
return; return;
} }
static uint64_t read_zero(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t read_zero(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
memset(buffer, 0x00, size); memset(buffer, 0x00, size);
return 1; return 1;
} }
static uint64_t write_zero(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer) { static ssize_t write_zero(fs_node_t *node, off_t offset, size_t size, uint8_t *buffer) {
return 0; return 0;
} }

View File

@ -69,7 +69,7 @@ extern void ptr_validate(void * ptr, const char * syscall);
* Used by the compositor to get display sizes and by the * Used by the compositor to get display sizes and by the
* resolution changer to initiate modesetting. * resolution changer to initiate modesetting.
*/ */
static int ioctl_vid(fs_node_t * node, int request, void * argp) { static int ioctl_vid(fs_node_t * node, unsigned long request, void * argp) {
switch (request) { switch (request) {
case IO_VID_WIDTH: case IO_VID_WIDTH:
/* Get framebuffer width */ /* Get framebuffer width */
@ -147,7 +147,7 @@ static fs_node_t * lfb_video_device_create(void /* TODO */) {
return fnode; return fnode;
} }
static uint64_t framebuffer_func(fs_node_t * node, uint64_t offset, uint64_t size, uint8_t * buffer) { static ssize_t framebuffer_func(fs_node_t * node, off_t offset, size_t size, uint8_t * buffer) {
char * buf = malloc(4096); char * buf = malloc(4096);
if (lfb_driver_name) { if (lfb_driver_name) {
@ -169,11 +169,11 @@ static uint64_t framebuffer_func(fs_node_t * node, uint64_t offset, uint64_t siz
} }
size_t _bsize = strlen(buf); size_t _bsize = strlen(buf);
if (offset > _bsize) { if ((size_t)offset > _bsize) {
free(buf); free(buf);
return 0; return 0;
} }
if (size > _bsize - offset) size = _bsize - offset; if (size > _bsize - (size_t)offset) size = _bsize - offset;
memcpy(buffer, buf + offset, size); memcpy(buffer, buf + offset, size);
free(buf); free(buf);