From 642b5fb0007b64c77d186fcb018d571152ee1d47 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Mon, 14 Aug 2023 18:51:07 +0200 Subject: reorganization: first steps --- src/libc/sysstat.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/libc/sysstat.c (limited to 'src/libc/sysstat.c') diff --git a/src/libc/sysstat.c b/src/libc/sysstat.c new file mode 100644 index 0000000..97bb50b --- /dev/null +++ b/src/libc/sysstat.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include + +int fstat(int fd, struct stat *sb) { + (void)fd; + memset(sb, 0, sizeof sb); + // TODO save info if it was a dir + sb->st_mode = 0777 | S_IFREG; + return 0; +} + +int stat(const char *restrict path, struct stat *restrict sb) { + int fd, ret; + fd = camellia_open(path, OPEN_READ); + if (fd < 0) { + return -1; + } + ret = fstat(fd, sb); + close(fd); + return ret; +} + +int lstat(const char *restrict path, struct stat *restrict sb) { + // TODO assumes no symlink support + return stat(path, sb); +} + +int mkdir(const char *path, mode_t mode) { + // TODO error when directory already exits + // TODO fopen-like wrapper that calls open() with a processed path + (void)mode; + size_t plen = strlen(path); + char *tmp = NULL; + /* ensure trailing slash */ + if (plen >= 1 && path[plen - 1] != '/') { + tmp = malloc(plen + 2); + memcpy(tmp, path, plen); + tmp[plen] = '/'; + tmp[plen + 1] = '\0'; + path = tmp; + } + FILE *f = fopen(path, "a"); /* sets errno */ + if (f) fclose(f); + free(tmp); + return f == NULL ? -1 : 0; +} -- cgit v1.2.3