Fix wonky tail queue swap in condition variables code.
[akaros.git] / user / parlib / syscall.c
index 802d10f..2be1b91 100644 (file)
@@ -1,7 +1,8 @@
 // System call stubs.
 
 // System call stubs.
 
-#include <parlib.h>
-#include <vcore.h>
+#include <parlib/parlib.h>
+#include <parlib/vcore.h>
+#include <parlib/serialize.h>
 
 int sys_proc_destroy(int pid, int exitcode)
 {
 
 int sys_proc_destroy(int pid, int exitcode)
 {
@@ -18,16 +19,6 @@ size_t sys_getpcoreid(void)
         return ros_syscall(SYS_getpcoreid, 0, 0, 0, 0, 0, 0);
 }
 
         return ros_syscall(SYS_getpcoreid, 0, 0, 0, 0, 0, 0);
 }
 
-ssize_t sys_cputs(const uint8_t *s, size_t len)
-{
-    return ros_syscall(SYS_cputs, s,  len, 0, 0, 0, 0);
-}
-
-uint16_t sys_cgetc(void)
-{
-    return ros_syscall(SYS_cgetc, 0, 0, 0, 0, 0, 0);
-}
-
 int sys_null(void)
 {
     return ros_syscall(SYS_null, 0, 0, 0, 0, 0, 0);
 int sys_null(void)
 {
     return ros_syscall(SYS_null, 0, 0, 0, 0, 0, 0);
@@ -56,15 +47,18 @@ void sys_yield(bool being_nice)
        ros_syscall(SYS_yield, being_nice, 0, 0, 0, 0, 0);
 }
 
        ros_syscall(SYS_yield, being_nice, 0, 0, 0, 0, 0);
 }
 
-int sys_proc_create(char *path, size_t path_l, char *argv[], char *envp[],
-                    int flags)
+int sys_proc_create(const char *path, size_t path_l, char *const argv[],
+                    char *const envp[], int flags)
 {
 {
-       struct procinfo pi;
-       if (procinfo_pack_args(&pi, argv, envp)) {
+       struct serialized_data *sd = serialize_argv_envp(argv, envp);
+       if (!sd) {
                errno = ENOMEM;
                return -1;
        }
                errno = ENOMEM;
                return -1;
        }
-       return ros_syscall(SYS_proc_create, path, path_l, &pi, flags, 0, 0);
+       int ret = ros_syscall(SYS_proc_create, path, path_l,
+                             sd->buf, sd->len, flags, 0);
+       free_serialized_data(sd);
+       return ret;
 }
 
 int sys_proc_run(int pid)
 }
 
 int sys_proc_run(int pid)
@@ -72,8 +66,8 @@ int sys_proc_run(int pid)
        return ros_syscall(SYS_proc_run, pid, 0, 0, 0, 0, 0);
 }
 
        return ros_syscall(SYS_proc_run, pid, 0, 0, 0, 0, 0);
 }
 
-void *CT(length) sys_mmap(void *SNT addr, size_t length, int prot, int flags,
-                          int fd, size_t offset)
+void *sys_mmap(void *addr, size_t length, int prot, int flags,
+               int fd, size_t offset)
 {
        return (void*)ros_syscall(SYS_mmap, addr, length, prot, flags, fd, offset);
 }
 {
        return (void*)ros_syscall(SYS_mmap, addr, length, prot, flags, fd, offset);
 }
@@ -173,7 +167,12 @@ int sys_abort_sysc_fd(int fd)
        return ros_syscall(SYS_abort_sysc_fd, fd, 0, 0, 0, 0, 0);
 }
 
        return ros_syscall(SYS_abort_sysc_fd, fd, 0, 0, 0, 0, 0);
 }
 
-long syscall_async(struct syscall *sysc, unsigned long num, ...)
+int sys_tap_fds(struct fd_tap_req *tap_reqs, size_t nr_reqs)
+{
+       return ros_syscall(SYS_tap_fds, tap_reqs, nr_reqs, 0, 0, 0, 0);
+}
+
+void syscall_async(struct syscall *sysc, unsigned long num, ...)
 {
        va_list args;
 
 {
        va_list args;