From d90d962201ad7be2f2818788eed64cc1b0ffa6e1 Mon Sep 17 00:00:00 2001 From: Marian Ohligs Date: Tue, 1 Nov 2011 20:11:52 +0100 Subject: [PATCH] add type FS_SOCKET, change locking rules, it's now possible to use more then one mshell at the same time. --- drivers/char/socket.c | 2 +- fs/fs.c | 22 ++++++++++++++++------ include/metalsvm/fs.h | 7 ++++--- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/drivers/char/socket.c b/drivers/char/socket.c index d8af0ba3..8210c249 100755 --- a/drivers/char/socket.c +++ b/drivers/char/socket.c @@ -116,7 +116,7 @@ int socket_init(vfs_node_t* node, const char* name) return -ENOMEM; memset(new_node, 0x00, sizeof(vfs_node_t)); - new_node->type = FS_CHARDEVICE; + new_node->type = FS_SOCKET; new_node->open = &socket_open; new_node->close = &socket_close; new_node->read = &socket_read; diff --git a/fs/fs.c b/fs/fs.c index ae55c137..3ee533dc 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -34,11 +34,16 @@ ssize_t read_fs(fildes_t* file, uint8_t* buffer, size_t size) if (BUILTIN_EXPECT(!node || !buffer, 0)) return ret; - spinlock_lock(&node->lock); - // Has the node got a read callback? + if (node->type != FS_SOCKET) { + spinlock_lock(&node->lock); + // Has the node got a read callback? + if (node->read != 0) + ret = node->read(file, buffer, size); + spinlock_unlock(&node->lock); + } else { if (node->read != 0) ret = node->read(file, buffer, size); - spinlock_unlock(&node->lock); + } return ret; } @@ -51,11 +56,16 @@ ssize_t write_fs(fildes_t* file, uint8_t* buffer, size_t size) if (BUILTIN_EXPECT(!node || !buffer, 0)) return ret; - spinlock_lock(&node->lock); - // Has the node got a write callback? + if (node->type != FS_SOCKET) { + spinlock_lock(&node->lock); + // Has the node got a write callback? + if (node->write != 0) + ret = node->write(file, buffer, size); + spinlock_unlock(&node->lock); + } else { if (node->write != 0) ret = node->write(file, buffer, size); - spinlock_unlock(&node->lock); + } return ret; } diff --git a/include/metalsvm/fs.h b/include/metalsvm/fs.h index 8d3736fd..1665b4ad 100644 --- a/include/metalsvm/fs.h +++ b/include/metalsvm/fs.h @@ -29,12 +29,13 @@ #include #include -#define FS_FILE 0x01 -#define FS_DIRECTORY 0x02 -#define FS_CHARDEVICE 0x03 +#define FS_FILE 0x01 +#define FS_DIRECTORY 0x02 +#define FS_CHARDEVICE 0x03 //#define FS_BLOCKDEVICE 0x04 //#define FS_PIPE 0x05 //#define FS_SYMLINK 0x06 +#define FS_SOCKET 0x06 //#define FS_MOUNTPOINT 0x08 // Is the file an active mountpoint?