From 2f0b0c5eb22ac64fe6e394aa438aece740f6f802 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 --- include/fcntl.h | 6 ++++++ lib/sys.c | 22 ++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/include/fcntl.h b/include/fcntl.h index 34a6484..0615790 100644 --- a/include/fcntl.h +++ b/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/lib/sys.c b/lib/sys.c index 13096d1..3e325b1 100644 --- a/lib/sys.c +++ b/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