Skip to contentSkip to conversation

stubdom: support file creation

PATCH New Samuel Thibault 1 participant 1 message Mar 11, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 stubdom: support file creation

Stubdom: add support for file creation.

extras/mini-os/include/fcntl.h +6 -0
diff -r 73ec21ad5dc7 extras/mini-os/include/fcntl.h
@@ -1,5 +1,9 @@
 #ifndef _I386_FCNTL_H
 #define _I386_FCNTL_H
+
+#ifdef HAVE_LIBC
+#include_next <fcntl.h>
+#else
 
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
@@ -90,3 +94,5 @@ int open(const char *path, int flags, ..
 int open(const char *path, int flags, ...);
 int fcntl(int fd, int cmd, ...);
 #endif
+
+#endif
extras/mini-os/lib/sys.c +20 -2
diff -r 73ec21ad5dc7 extras/mini-os/lib/sys.c
@@ -172,8 +172,26 @@ int open(const char *pathname, int flags
         printk("open(%s) -> %d\n", pathname, fd);
         return fd;
     }
-    printk("open(%s)", pathname);
-    fs_fd = fs_open(fs_import, (void *) pathname);
+    printk("open(%s, %x)", pathname, flags);
+    switch (flags & ~O_ACCMODE) {
+        case 0:
+            fs_fd = fs_open(fs_import, (void *) pathname);
+            break;
+        case O_CREAT|O_TRUNC:
+        {
+            va_list ap;
+            mode_t mode;
+            va_start(ap, flags);
+            mode = va_arg(ap, mode_t);
+            va_end(ap);
+            fs_fd = fs_create(fs_import, (void *) pathname, 0, mode);
+            break;
+        }
+        default:
+            printk(" unsupported flags\n");
+            stack_walk();
+            do_exit();
+    }
     if (fs_fd < 0) {
 	errno = EIO;
 	return -1;