SYS_wstat, fwstat, rename, and fchdir stubs (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 16 Jul 2014 00:28:14 +0000 (17:28 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 16 Jul 2014 00:44:11 +0000 (17:44 -0700)
Reinstall your kernel headers.

kern/include/ros/bits/syscall.h
kern/src/syscall.c

index b42510f..83de5ae 100644 (file)
 #define SYS_rmdir                              119
 #define SYS_pipe                               120
 
+#define SYS_wstat                              121
+#define SYS_fwstat                             122
+#define SYS_rename                             123
+#define SYS_fchdir                             124
+
 /* Misc syscalls */
 #define SYS_gettimeofday               140
 #define SYS_tcgetattr                  141
 // for system calls that pass filenames
 #define MAX_PATH_LEN 256
 
+/* wstat flags, so the kernel knows what M fields to look at */
+#define WSTAT_MODE                             0x001
+#define WSTAT_ATIME                            0x002
+#define WSTAT_MTIME                            0x004
+#define WSTAT_LENGTH                   0x008
+#define WSTAT_NAME                             0x010
+#define WSTAT_UID                              0x020
+#define WSTAT_GID                              0x040
+#define WSTAT_MUID                             0x080
+
 #endif /* !ROS_INCLUDE_SYSCALL_H */
index c2b741f..963792f 100644 (file)
@@ -1544,6 +1544,11 @@ intreg_t sys_chdir(struct proc *p, const char *path, size_t path_l)
        return 0;
 }
 
+intreg_t sys_fchdir(struct proc *p, int fd)
+{
+       return -1;
+}
+
 /* Note cwd_l is not a strlen, it's an absolute size */
 intreg_t sys_getcwd(struct proc *p, char *u_cwd, size_t cwd_l)
 {
@@ -1776,7 +1781,7 @@ intreg_t sys_nunmount(struct proc *p, char *name, int name_l, char *old_path, in
        return ret;
 }
 
-static intreg_t sys_fd2path(struct proc *p, int fd, void *u_buf, size_t len)
+intreg_t sys_fd2path(struct proc *p, int fd, void *u_buf, size_t len)
 {
        int ret;
        struct chan *ch;
@@ -1799,6 +1804,26 @@ static intreg_t sys_fd2path(struct proc *p, int fd, void *u_buf, size_t len)
        return ret;
 }
 
+intreg_t sys_wstat(struct proc *p, char *path, size_t path_l,
+                   uint8_t *stat_m, size_t stat_sz, int flags)
+{
+       return -1;
+}
+
+intreg_t sys_fwstat(struct proc *p, int fd, uint8_t *stat_m, size_t stat_sz,
+                    int flags)
+{
+       return -1;
+}
+
+intreg_t sys_rename(struct proc *p, char *old_path, size_t old_path_l,
+                    char *new_path, size_t new_path_l)
+{
+       /* this might trick userspace code to fallback to copying, for now */
+       set_errno(EXDEV);
+       return -1;
+}
+
 /************** Syscall Invokation **************/
 
 const struct sys_table_entry syscall_table[] = {
@@ -1856,6 +1881,7 @@ const struct sys_table_entry syscall_table[] = {
        [SYS_symlink] = {(syscall_t)sys_symlink, "symlink"},
        [SYS_readlink] = {(syscall_t)sys_readlink, "readlink"},
        [SYS_chdir] = {(syscall_t)sys_chdir, "chdir"},
+       [SYS_fchdir] = {(syscall_t)sys_fchdir, "fchdir"},
        [SYS_getcwd] = {(syscall_t)sys_getcwd, "getcwd"},
        [SYS_mkdir] = {(syscall_t)sys_mkdir, "mkdir"},
        [SYS_rmdir] = {(syscall_t)sys_rmdir, "rmdir"},
@@ -1870,7 +1896,9 @@ const struct sys_table_entry syscall_table[] = {
        [SYS_nmount] ={(syscall_t)sys_nmount, "nmount"},
        [SYS_nunmount] ={(syscall_t)sys_nunmount, "nunmount"},
        [SYS_fd2path] ={(syscall_t)sys_fd2path, "fd2path"},
-
+       [SYS_wstat] ={(syscall_t)sys_wstat, "wstat"},
+       [SYS_fwstat] ={(syscall_t)sys_fwstat, "fwstat"},
+       [SYS_rename] ={(syscall_t)sys_rename, "rename"},
 };
 const int max_syscall = sizeof(syscall_table)/sizeof(syscall_table[0]);
 /* Executes the given syscall.