From c0178a140511de5ddec4ab3aea37e375399446fd Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Fri, 3 Oct 2025 22:05:28 +0200 Subject: [PATCH] fs mkf subcommand --- user/fs/main.c | 3 +++ user/fs/mkf.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 user/fs/mkf.c diff --git a/user/fs/main.c b/user/fs/main.c index 434b5d0..9ab759b 100644 --- a/user/fs/main.c +++ b/user/fs/main.c @@ -3,6 +3,7 @@ #include extern void fs_fetch(void); +extern void fs_mkf(void); void main(void) { if (argslen() == 0) { @@ -13,6 +14,8 @@ void main(void) { if (string_strcmp(cmd, "fetch") == 0) { fs_fetch(); + } else if (string_strcmp(cmd, "mkf") == 0) { + fs_mkf(); } else { uprintf("fs: unknown command %s\n", cmd); } diff --git a/user/fs/mkf.c b/user/fs/mkf.c new file mode 100644 index 0000000..3da1f59 --- /dev/null +++ b/user/fs/mkf.c @@ -0,0 +1,36 @@ +#include +#include +#include + +struct { + char *write; +} FS_MKF_CONFIG = { + .write = NULL, +}; + +static Arg ARGS[] = { + ARG("-write", ARG_STRING, &FS_MKF_CONFIG.write), + ARG_END(), +}; + +void fs_mkf(void) { + if (argslen() < 2) { + uprintf("fs: Not enough arguments\n"); + return; + } + + char *path = *(args()+1); + + int32_t ret; + if ((ret = parse_args(args()+2, argslen()-1, ARGS)) < 0) { + uprintf("fs mkf: Could not parse args: %d\n", ret); + } + + IOH ioh = ioctl(IOCTL_NOHANDLE, IOCTL_OPENF, (uint64_t)path, IOCTL_F_MAKE | IOCTL_F_WRITE, 0); + if (FS_MKF_CONFIG.write != NULL) { + if (ioctl(ioh, IOCTL_WRITE, (uint64_t)FS_MKF_CONFIG.write, string_len(FS_MKF_CONFIG.write), 0) < 0) { + uprintf("fs mkf: could not write to %s\n", path); + } + } + ioctl(ioh, IOCTL_CLOSEF, 0, 0, 0); +}