add type FS_SOCKET, change locking rules, it's now possible to use more then one mshell at the same time.
This commit is contained in:
parent
242738a3b8
commit
d90d962201
3 changed files with 21 additions and 10 deletions
|
@ -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;
|
||||
|
|
22
fs/fs.c
22
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;
|
||||
}
|
||||
|
|
|
@ -29,12 +29,13 @@
|
|||
#include <metalsvm/stddef.h>
|
||||
#include <metalsvm/spinlock_types.h>
|
||||
|
||||
#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?
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue