summaryrefslogtreecommitdiff
path: root/src/user/app
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/app')
-rw-r--r--src/user/app/init/driver/tmpfs.c9
-rw-r--r--src/user/app/shell/builtins.c18
2 files changed, 26 insertions, 1 deletions
diff --git a/src/user/app/init/driver/tmpfs.c b/src/user/app/init/driver/tmpfs.c
index 96fdf39..7414320 100644
--- a/src/user/app/init/driver/tmpfs.c
+++ b/src/user/app/init/driver/tmpfs.c
@@ -15,7 +15,9 @@ struct node {
};
struct node *root = NULL;
-static struct node special_root;
+static struct node special_root = {
+ .size = 0,
+};
static struct node *lookup(const char *path, size_t len) {
for (struct node *iter = root; iter; iter = iter->next) {
@@ -109,6 +111,11 @@ void tmpfs_drv(void) {
_syscall_fs_respond(NULL, res.len, 0);
break;
+ case VFSOP_GETSIZE:
+ ptr = (void*)res.id;
+ _syscall_fs_respond(NULL, ptr->size, 0);
+ break;
+
default:
_syscall_fs_respond(NULL, -1, 0);
break;
diff --git a/src/user/app/shell/builtins.c b/src/user/app/shell/builtins.c
index d409bfd..53534ed 100644
--- a/src/user/app/shell/builtins.c
+++ b/src/user/app/shell/builtins.c
@@ -48,6 +48,23 @@ static void cmd_echo(int argc, char **argv) {
printf("\n");
}
+void cmd_getsize(int argc, char **argv) {
+ if (argc < 2) {
+ eprintf("missing arguments");
+ return;
+ }
+
+ for (int i = 1; i < argc; i++) {
+ handle_t h = _syscall_open(argv[i], strlen(argv[i]), 0);
+ if (h < 0) {
+ eprintf("error opening %s", argv[i]);
+ continue;
+ }
+ printf("%s: %d\n", argv[i], (int)_syscall_getsize(h));
+ _syscall_close(h);
+ }
+}
+
void cmd_hexdump(int argc, char **argv) {
const size_t buflen = 512;
uint8_t *buf = malloc(buflen);
@@ -141,6 +158,7 @@ static void cmd_touch(int argc, char **argv) {
struct builtin builtins[] = {
{"cat", cmd_cat},
{"echo", cmd_echo},
+ {"getsize", cmd_getsize},
{"hexdump", cmd_hexdump},
{"ls", cmd_ls},
{"sleep", cmd_sleep},