From 2f89686df87d2ae7d87ba48be9fa1e6884a871c6 Mon Sep 17 00:00:00 2001 From: Marian Ohligs Date: Thu, 11 Aug 2011 17:11:48 +0200 Subject: [PATCH] - change close(node) in close(file) - disable close in netchar, for testing --- drivers/char/null.c | 2 +- drivers/netchar/netchar.c | 33 ++++++++++++++------------------- drivers/stderr/stderr.c | 2 +- drivers/stdin/stdin.c | 2 +- drivers/stdout/stdout.c | 2 +- fs/fs.c | 12 ++++++------ include/metalsvm/fs.h | 4 ++-- kernel/syscall.c | 14 +++++++------- 8 files changed, 33 insertions(+), 38 deletions(-) diff --git a/drivers/char/null.c b/drivers/char/null.c index c1fc9e69..771a8a18 100644 --- a/drivers/char/null.c +++ b/drivers/char/null.c @@ -44,7 +44,7 @@ static int null_open(fildes_t* file, const char* name) return 0; } -static int null_close(vfs_node_t* node) +static int null_close(fildes_t* file) { return 0; } diff --git a/drivers/netchar/netchar.c b/drivers/netchar/netchar.c index 13ac0d6d..87d27339 100755 --- a/drivers/netchar/netchar.c +++ b/drivers/netchar/netchar.c @@ -23,8 +23,9 @@ #include #include #include +#include -//#if defined(CONFIG_LWIP) && LWIP_SOCKET +#if defined(CONFIG_LWIP) && LWIP_SOCKET #include #include #include @@ -36,36 +37,32 @@ #include #include #include -//#endif +#endif /* Implementation of a simple stdout device */ static ssize_t netchar_read(fildes_t* file, uint8_t* buffer, size_t size) { - //kprintf("\nlwip_read: %p with lenght %i and Socket %i", buffer, size, file->offset); - - int ret; -//#if defined(CONFIG_LWIP) && LWIP_SOCKET + int ret = 0; +#if defined(CONFIG_LWIP) && LWIP_SOCKET ret = lwip_read((int)file->offset, buffer, size); if (ret < 0) ret = -errno; -//#else -//#endif +#endif kprintf("return size: %i", ret); return ret; } static ssize_t netchar_write(fildes_t* file, uint8_t* buffer, size_t size) { - int ret; -//#if defined(CONFIG_LWIP) && LWIP_SOCKET + int ret = 0; +#if defined(CONFIG_LWIP) && LWIP_SOCKET ret = lwip_write(file->offset, buffer, size); if (ret < 0) ret = -errno; -//#else -//#endif +#endif return ret; } @@ -74,16 +71,14 @@ static int netchar_open(fildes_t* file, const char* name) return 0; } -static int netchar_close(vfs_node_t* node) //////////////change this in File!!! +static int netchar_close(fildes_t* file) { - int ret; -//#if defined(CONFIG_LWIP) && LWIP_SOCKET -// ret = lwip_close(file->offset); + int ret = 0; +#if defined(CONFIG_LWIP) && LWIP_SOCKET + //ret = lwip_close(file->offset); if (ret < 0) ret = -errno; -//#else - ret = 0; -//#endif +#endif return ret; } diff --git a/drivers/stderr/stderr.c b/drivers/stderr/stderr.c index 5ee63ec7..aab7473e 100644 --- a/drivers/stderr/stderr.c +++ b/drivers/stderr/stderr.c @@ -48,7 +48,7 @@ static int stderr_open(fildes_t* file, const char* name) return 0; } -static int stderr_close(vfs_node_t* node) +static int stderr_close(fildes_t* file) { return 0; } diff --git a/drivers/stdin/stdin.c b/drivers/stdin/stdin.c index c657e9fb..58005b09 100644 --- a/drivers/stdin/stdin.c +++ b/drivers/stdin/stdin.c @@ -59,7 +59,7 @@ static int stdin_open(fildes_t* file, const char* name) return 0; } -static int stdin_close(vfs_node_t* node) +static int stdin_close(fildes_t* file) { return 0; } diff --git a/drivers/stdout/stdout.c b/drivers/stdout/stdout.c index e0082934..563220d3 100755 --- a/drivers/stdout/stdout.c +++ b/drivers/stdout/stdout.c @@ -47,7 +47,7 @@ static int stdout_open(fildes_t* file, const char* name) return 0; } -static int stdout_close(vfs_node_t* node) +static int stdout_close(fildes_t* file) { return 0; } diff --git a/fs/fs.c b/fs/fs.c index db60b718..85689aa8 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -105,18 +105,18 @@ int open_fs(fildes_t* file, const char* name) return ret; } -int close_fs(vfs_node_t* node) +int close_fs(fildes_t* file) { int ret = -EINVAL; - if (BUILTIN_EXPECT(!node, 0)) + if (BUILTIN_EXPECT(!(file->node), 0)) return ret; - spinlock_lock(&node->lock); + spinlock_lock(&file->node->lock); // Has the node got a close callback? - if (node->close != 0) - ret = node->close(node); - spinlock_unlock(&node->lock); + if (file->node->close != 0) + ret = file->node->close(file); + spinlock_unlock(&file->node->lock); return ret; } diff --git a/include/metalsvm/fs.h b/include/metalsvm/fs.h index dfcb9506..855dc830 100644 --- a/include/metalsvm/fs.h +++ b/include/metalsvm/fs.h @@ -85,7 +85,7 @@ typedef ssize_t (*write_type_t) (struct fildes *, uint8_t*, size_t); /** @brief Open function pointer */ typedef int (*open_type_t) (struct fildes *, const char *name); /** @brief Close function pointer */ -typedef int (*close_type_t) (struct vfs_node *); +typedef int (*close_type_t) (struct fildes *); /** @brief Read directory function pointer */ typedef struct dirent *(*readdir_type_t) (struct vfs_node *, uint32_t); /** @brief Find directory function pointer */ @@ -202,7 +202,7 @@ ssize_t write_fs(fildes_t* file, uint8_t* buffer, size_t size); /** @brief Yet to be documented */ int open_fs(fildes_t* file, const char* fname); /** @brief Yet to be documented */ -int close_fs(vfs_node_t * node); +int close_fs(fildes_t * file); /** @brief Get dir entry at index * @param node VFS node to get dir entry from diff --git a/kernel/syscall.c b/kernel/syscall.c index 57b49a88..bb0dc6b2 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -27,7 +27,7 @@ #include #include -//#if defined(CONFIG_LWIP) && LWIP_SOCKET +#if defined(CONFIG_LWIP) && LWIP_SOCKET #include #include #include @@ -40,7 +40,7 @@ #include #include -//#endif +#endif static int sys_open(const char* name, int flags, int mode) { @@ -69,7 +69,7 @@ static int sys_open(const char* name, int flags, int mode) return fd; } -//#if defined(CONFIG_LWIP) && LWIP_SOCKET +#if defined(CONFIG_LWIP) && LWIP_SOCKET static int sys_socket(int domain, int type, int protocol) { int fd; @@ -114,13 +114,13 @@ static int sys_accept(int s, struct sockaddr* addr, socklen_t* addrlen) return fd; } -//#endif +#endif static int sys_close(int fd) { fildes_t* file = &(per_core(current_task)->fildes_table[fd]); - close_fs(file->node); + close_fs(file); file->node = NULL; file->offset = 0; file->mode = 0; @@ -275,7 +275,7 @@ int syscall_handler(uint32_t sys_nr, ...) ret = sys_times(buffer, clock); break; } -//#if defined(CONFIG_LWIP) && LWIP_SOCKET +#if defined(CONFIG_LWIP) && LWIP_SOCKET case __NR_closesocket: { int fd = va_arg(vl, int); @@ -356,7 +356,7 @@ int syscall_handler(uint32_t sys_nr, ...) ret = -errno; break; } -//#endif +#endif default: kputs("invalid system call\n"); ret = -ENOSYS;