From 1a8731e797f030a84bb982007ee4477b506f7bd6 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Fri, 10 Feb 2023 15:26:47 +0100 Subject: add 'new' --- core/new.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 core/new.c (limited to 'core/new.c') diff --git a/core/new.c b/core/new.c new file mode 100644 index 0000000..5c0e7b8 --- /dev/null +++ b/core/new.c @@ -0,0 +1,45 @@ +#include "../lib/io/io.h" +#include "../lib/sys/mkdir.h" +#include "../lib/sys/creat.h" +#include "../lib/cstr/cstr.h" + +enum { + FILE, + DIRECTORY, + NUMBER_OF_MODES, +}; + +void new_file(char *path); +void new_directory(char *path); + +int(*new_funcs[NUMBER_OF_MODES])(const char *, unsigned int) = { + &creat, + &mkdir +}; + +int main(int argc, char **argv) +{ + if (argc < 3) { + wff(STDERR_FD, "new [-f | -d] ..."); + return -1; + } + + int type = FILE; + + if (cstr_length(argv[1]) != 2) { + wff(STDERR_FD, "error: unknown entry type.\n"); + return -1; + } + + switch(argv[1][1]) { + case 'f': type = FILE; break; + case 'd': type = DIRECTORY; break; + default: wff(STDERR_FD, "error: unknown entry type.\n"); return -1; + } + + for (int i = 2; i < argc; ++i) { + new_funcs[type](argv[i], MODE_USER_READ | MODE_USER_WRITE); + } + + return 0; +} -- cgit v1.2.3-70-g09d2