Make /dev open in the 9 space, not the vfs.
authorRonald G. Minnich <rminnich@gmail.com>
Wed, 20 Apr 2016 14:48:58 +0000 (07:48 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 20 Apr 2016 23:20:18 +0000 (16:20 -0700)
Another stopgap. Let's hope we kill this one in < 2 3/4 years :-)

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/syscall.c

index c06643e..852ad4e 100644 (file)
@@ -1513,10 +1513,24 @@ static intreg_t sys_openat(struct proc *p, int fromfd, const char *path,
        mode &= ~p->fs_env.umask;
        /* Only check the VFS for legacy opens.  It doesn't support openat.  Actual
         * openats won't check here, and file == 0. */
+#define REMOVE_BEFORE_FLIGHT 1
+#if REMOVE_BEFORE_FLIGHT
+       /*
+        * HACK. This is another stopgap until we move away from the
+        * vfs. People need to see /dev. This is written in such a way
+        * as to fail quickly, be easily removed, and still do what we
+        * want.
+        */
+       if ((fromfd == AT_FDCWD) && (path_l == 4) && (t_path[0] == '/')
+               && (t_path[1] == 'd') && (t_path[2] == 'e') && (t_path[3] == 'v')) {
+               set_errno(ENOENT);
+       } else {
+#endif
        if ((t_path[0] == '/') || (fromfd == AT_FDCWD))
                file = do_file_open(t_path, oflag, mode);
        else
                set_errno(ENOENT);      /* was not in the VFS. */
+       }
        if (file) {
                /* VFS lookup succeeded */
                /* stores the ref to file */