From 81fed70379578f4fe6255fdf33699675179ffe91 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 18 Jun 2020 19:49:01 -0700 Subject: feat: small coreutils added --- sys/cmd/cp/cp.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ sys/cmd/cp/rules.mk | 26 +++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 sys/cmd/cp/cp.c create mode 100644 sys/cmd/cp/rules.mk (limited to 'sys/cmd/cp') diff --git a/sys/cmd/cp/cp.c b/sys/cmd/cp/cp.c new file mode 100644 index 0000000..dfe2922 --- /dev/null +++ b/sys/cmd/cp/cp.c @@ -0,0 +1,75 @@ +#include +#include + +static struct Flags { + uchar a : 1; + uchar f : 1; + uchar p : 1; + uchar v : 1; + uchar r : 1; +} flag; +static char follow; + +static +int +cp(char *from, char *to) +{ + +} + +/* + * P -> never dereference + * L -> dereference links + * H -> dereference links on the first level + */ +static +void +usage(void) +{ + fputs("usage: cp [-afpv] [-[r|R] [-H | -L | -P]] source ... dest", stderr); + exit(1); +} + +int +main(int argc, char *argv[]) +{ + io·Stat info; + + ARGBEGIN { + case 'a': + follow = 'P'; + flag.a = flag.p = flag.r = 1; + break; + case 'f': + flag.f = 1; + break; + case 'p': + flag.p = 1; + break; + case 'r': + /* fallthrough */ + case 'R': + flag.r = 1; + break; + case 'H': + case 'L': + case 'P': + follow = ARGC(); + break; + default: + usage(); + } ARGEND; + + if (argc < 2) + usage(); + + if (!follow) + follow = flag.r ? 'P' : 'L'; + + if (argc > 2) { + if (stat(argv[argc-1], &info) < 0) + errorf("stat %s: %s", argv[argc-1], strerror(errno)); + if (!S_ISDIR(info.st_mode)) + errorf("%s: is not a directory", argv[argc-1]); + } +} diff --git a/sys/cmd/cp/rules.mk b/sys/cmd/cp/rules.mk new file mode 100644 index 0000000..500b001 --- /dev/null +++ b/sys/cmd/cp/rules.mk @@ -0,0 +1,26 @@ +include share/push.mk +# Iterate through subdirectory tree + +# Local sources +SRCS_$(d) := +LIBS_$(d) := +BINS_$(d) := +TSTS_$(d) := + +include share/paths.mk + +# Local rules +# $(LIBS_$(d)) = TCFLAGS := +# $(LIBS_$(d)) = TCINCS := +# $(LIBS_$(d)) = TCLIBS := + +$(LIBS_$(d)): $(OBJS_$(d)) + $(ARCHIVE) + +$(BINS_$(d)): $(OBJS_$(d)) + $(LINK) + +$(UNTS_$(d)): $(TOBJS_$(d)) $(LIBS_$(d)) + $(LINK) + +include share/pop.mk -- cgit v1.2.1