From 1add612bf58d6c49a4fe8d93190dea514d6dc7d8 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 18 Mar 2008 11:26:21 +0000 Subject: [PATCH] Stubdom: add support for file creation. Signed-off-by: Samuel Thibault --- extras/mini-os/include/fcntl.h | 6 ++++++ extras/mini-os/lib/sys.c | 22 ++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/extras/mini-os/include/fcntl.h b/extras/mini-os/include/fcntl.h index 34a6484d35..0615790e53 100644 --- a/extras/mini-os/include/fcntl.h +++ b/extras/mini-os/include/fcntl.h @@ -1,6 +1,10 @@ #ifndef _I386_FCNTL_H #define _I386_FCNTL_H +#ifdef HAVE_LIBC +#include_next +#else + /* open/fcntl - O_SYNC is only implemented on blocks devices and on files located on an ext2 file system */ #define O_ACCMODE 0003 @@ -90,3 +94,5 @@ struct flock64 { int open(const char *path, int flags, ...); int fcntl(int fd, int cmd, ...); #endif + +#endif diff --git a/extras/mini-os/lib/sys.c b/extras/mini-os/lib/sys.c index 13096d1eca..3e325b10a1 100644 --- a/extras/mini-os/lib/sys.c +++ b/extras/mini-os/lib/sys.c @@ -171,8 +171,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; -- 2.39.5