fs Add mount subcommand

This commit is contained in:
2025-10-14 00:40:17 +02:00
parent 25cb309105
commit c895c5db3e
7 changed files with 76 additions and 4 deletions

View File

@ -2,9 +2,9 @@
#include <stddef.h>
#include <ulib.h>
#define CMDS(X) \
X(fetch) X(mkf) X(mkd) \
X(tree)
#define CMDS(X) \
X(fetch) X(mkf) X(mkd) \
X(tree) X(mount)
void main(void) {
if (argslen() == 0) {

View File

@ -27,6 +27,10 @@ void fs_mkf(void) {
}
IOH ioh = ioctl(IOCTL_NOHANDLE, IOCTL_OPENF, (uint64_t)path, IOCTL_F_MAKE | IOCTL_F_WRITE, 0);
if (ioh < 0) {
uprintf("fs mkf: could not create %s\n", path);
return;
}
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);

56
user/fs/mount.c Normal file
View File

@ -0,0 +1,56 @@
#include <stddef.h>
#include <stdint.h>
#include <ulib.h>
struct {
char *mountpoint;
char *fstype;
char *devname;
bool format;
} FS_MOUNT_CONFIG = {0};
static Arg ARGS[] = {
ARG("-mp", ARG_STRING, &FS_MOUNT_CONFIG.mountpoint),
ARG("-fs", ARG_STRING, &FS_MOUNT_CONFIG.fstype),
ARG("-dev", ARG_STRING, &FS_MOUNT_CONFIG.devname),
ARG("-fmt", ARG_BOOL, &FS_MOUNT_CONFIG.format),
ARG_END(),
};
void fs_mount(void) {
int32_t ret;
if ((ret = parse_args(args()+1, argslen()-1, ARGS)) < 0) {
uprintf("fs: could not parse args: %d\n", ret);
return;
}
if (FS_MOUNT_CONFIG.mountpoint == NULL) {
uprintf("fs: mountpoint missing\n");
return;
}
if (FS_MOUNT_CONFIG.fstype == NULL) {
uprintf("fs: filesystem type missing\n");
return;
}
if (FS_MOUNT_CONFIG.devname == NULL) {
uprintf("fs: device name missing\n");
return;
}
Dev_t dev;
ret = devctl(&dev, DEVCTL_GET_HANDLE, (uint8_t *)FS_MOUNT_CONFIG.devname, 0, 0);
if (ret != E_OK) {
uprintf("fs: device %s not found\n", FS_MOUNT_CONFIG.devname);
return;
}
ret = vfsmount(FS_MOUNT_CONFIG.mountpoint, FS_MOUNT_CONFIG.fstype, &dev, FS_MOUNT_CONFIG.format);
if (ret != E_OK) {
uprintf("fs: mount error %s\n", ERRSTRING(ret));
return;
} else {
uprintf("OK %s\n", FS_MOUNT_CONFIG.mountpoint);
}
}