diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/string.c | 12 | ||||
-rw-r--r-- | src/lib/syscall_msg.C | 26 |
2 files changed, 30 insertions, 8 deletions
diff --git a/src/lib/string.c b/src/lib/string.c index fb4d435ae..eb8fe3d1c 100644 --- a/src/lib/string.c +++ b/src/lib/string.c @@ -10,6 +10,18 @@ void* memset(void* s, int c, size_t n) } } +char* strcpy(char* d, const char* s) +{ + char* d1 = d; + + do + { + *d1 = *s; + if (*s == '\0') return d; + d1++; s++; + } while(1); +} + int strcmp(const char* a, const char* b) { while((*a != '\0') && (*b != '\0')) diff --git a/src/lib/syscall_msg.C b/src/lib/syscall_msg.C index 774ddb0bb..66eaa1679 100644 --- a/src/lib/syscall_msg.C +++ b/src/lib/syscall_msg.C @@ -1,12 +1,11 @@ #include <sys/msg.h> #include <sys/syscall.h> +#include <sys/vfs.h> #include <string.h> using namespace Systemcalls; -const char* VFS_ROOT = "/"; // TODO. - msg_q_t msg_q_create() { return (msg_q_t) _syscall0(MSGQ_CREATE); @@ -17,7 +16,7 @@ int msg_q_destroy(msg_q_t q) return (int64_t)_syscall1(MSGQ_DESTROY, q); } -int msg_q_register(msg_q_t q, char* name) +int msg_q_register(msg_q_t q, const char* name) { if (0 == strcmp(VFS_ROOT, name)) { @@ -25,12 +24,17 @@ int msg_q_register(msg_q_t q, char* name) } else { - // TODO. - return -1; + msg_q_t vfsQ = (msg_q_t)_syscall0(MSGQ_RESOLVE_ROOT); + msg_t* msg = msg_allocate(); + msg->type = VFS_MSG_REGISTER_MSGQ; + msg->extra_data = (void*) name; + int rc = msg_sendrecv(vfsQ, msg); + msg_free(msg); + return rc; } } -msg_q_t msg_q_resolve(char* name) +msg_q_t msg_q_resolve(const char* name) { if (0 == strcmp(VFS_ROOT, name)) { @@ -38,8 +42,14 @@ msg_q_t msg_q_resolve(char* name) } else { - // TODO. - return NULL; + msg_q_t vfsQ = (msg_q_t)_syscall0(MSGQ_RESOLVE_ROOT); + msg_t* msg = msg_allocate(); + msg->type = VFS_MSG_RESOLVE_MSGQ; + msg->extra_data = (void*) name; + msg_sendrecv(vfsQ, msg); + msg_q_t rc = (msg_q_t) msg->data[0]; + msg_free(msg); + return rc; } } |