coreutils

custom mini coreutils
git clone git://git.evenfri.duckdns.org/coreutils.git
Log | Files | Refs | README

commit 4d71e9c860b1a03ccad3c4dff59b9816a116c354
parent 8bfb2debce084249194437fd0c92e5be69111b73
Author: evenfri <evenfri256@gmail.com>
Date:   Tue, 11 Aug 2026 03:04:21 +0800

add rm (without rmdir)

Diffstat:
Mmkdir.c | 4++--
Mmkfile | 1+
Arm.c | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/mkdir.c b/mkdir.c @@ -34,7 +34,7 @@ size_t strcspn(const char *s1, const char *s2) { int main(int argc, char *argv[]) { if (argc < 2) { - write(stdout, "using: mkdir [options] <path>\n", 30); + write(stderr, "using: mkdir [options] <path>\n", 30); return 1; } @@ -73,7 +73,7 @@ int main(int argc, char *argv[]) { } } else { int r = mkdir(path, 0777); - if (r < 0 && errno != eexist) + if (r < 0) return errno; } } diff --git a/mkfile b/mkfile @@ -15,6 +15,7 @@ targ = init \ sh \ touch \ mkdir \ + rm \ <$PLAN9/src/mkmany diff --git a/rm.c b/rm.c @@ -0,0 +1,67 @@ +#include <libc.h> + +#define enoent 2 +#define enotdir 20 +#define eisdir 21 + +#define dt_unknown 0 +#define dt_reg 8 +#define dt_dir 4 + +int has_r; +int has_f; + +int first; + + +void rm_tree(char **argv) { + (void)argv; +} + +void rm_file(char **argv) { + char *f; + int r; + + while ((f = *argv++) != NULL) { + r = unlink(f); + + if (r < 0) { + if (has_f && errno == enoent) + continue; + return; + } + } +} + +int main(int argc, char *argv[]) { + if (argc < 2) { + write(stderr, "using: rm [options] <path>\n", 27); + return 1; + } + + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "-r") == 0) { + has_r = 1; + continue; + } + if (strcmp(argv[i], "-f") == 0) { + has_f = 1; + continue; + } + if (strcmp(argv[i], "-rf") == 0) { + has_r = 1; + has_f = 1; + continue; + } + + first = i; + break; + } + + if (has_r) + rm_tree(&argv[first]); + else + rm_file(&argv[first]); + + return 0; +}