diff --git a/TODO b/TODO index 8129c64..ce4ee91 100644 --- a/TODO +++ b/TODO @@ -1,17 +1,22 @@ -Makefile( - *Todo: -dirname -basename mktemp ln nice nohup chmod chown +split +truncate +date +tee +tr +cut shuf id df dd +stty +stat +sort printf test diff --git a/coreutils/basename.c b/coreutils/basename.c new file mode 100644 index 0000000..8eb20be --- /dev/null +++ b/coreutils/basename.c @@ -0,0 +1,40 @@ +#include +#include +#include + +void remove_suffix(char *base, const char *suffix) { + char *ptr = base + strlen(base) - strlen(suffix); + if (!strcmp(ptr, suffix)) + *ptr = '\0'; +} + +int main(const int argc, char **argv) { + char *suffix = NULL; + char *base = NULL; + + int i; + for (i = 1; i < argc; i++) { + if (argv[i][0] != '-') + break; + + else if (!strcmp(argv[i], "--help")) { + printf("basename [name] [suffix]\n"); + return 0; + } + } + + if (argc - i < 1) { + fprintf(stderr, "basename: missing operand\n"); + return 1; + } + + else if (argc - i == 2) + suffix = argv[i + 1]; + + base = basename(argv[i]); + if (suffix) + remove_suffix(base, suffix); + + puts(base); + return 0; +} diff --git a/coreutils/cat.c b/coreutils/cat.c index ac64efe..bd99efd 100644 --- a/coreutils/cat.c +++ b/coreutils/cat.c @@ -4,7 +4,7 @@ #include #include -unsigned int flag; +unsigned int n_flag; unsigned int lines; void cat(const int fd) { char buf[4024]; @@ -12,7 +12,7 @@ void cat(const int fd) { while ((len = read(fd, buf, sizeof(buf))) > 0) { for (ssize_t i = 0; i < len; i++) { - if (((i > 0) ? buf[i - 1] == '\n' : 1) && flag) + if (((i > 0) ? buf[i - 1] == '\n' : 1) && n_flag) printf(" %d ", ++lines); printf("%c", buf[i]); @@ -27,7 +27,7 @@ int main(const int argc, const char **argv) { break; else if (!strcmp(argv[i], "-n")) - flag = 1; + n_flag = 1; else if (!strcmp(argv[i], "--help")) { printf("cat [-n (numerate)] [file1 file2 ...]\n"); diff --git a/coreutils/chmod.c b/coreutils/chmod.c new file mode 100644 index 0000000..48fbe22 --- /dev/null +++ b/coreutils/chmod.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include + +//TODO +int main(const int argc, const char **argv) { + unsigned int r_flag = 0; + unsigned int s_flag = 0; + + int i; + for (i = 1; i < argc; i++) { + if (argv[i][0] != '-') + break; + + else if (!strcmp(argv[i], "-r")) + r_flag = 1; + + else if (!strcmp(argv[i], "-s")) + s_flag = 1; + + else if (!strcmp(argv[i], "--help")) { + printf("chmod [-r (recursive)] [-s (silent)] [file1 file2...]\n"); + return 0; + } + } + + return 0; +} + + diff --git a/coreutils/dirname.c b/coreutils/dirname.c new file mode 100644 index 0000000..a18acb8 --- /dev/null +++ b/coreutils/dirname.c @@ -0,0 +1,16 @@ +#include +#include + +int main(const int argc, const char **argv) { + + if (argc <= 1) { + printf("dirname [dirname]\n"); + return 1; + } + + for (int i = 1; i < argc; i++) + puts(dirname(argv[i])); + + return 0; +} + diff --git a/coreutils/logname.c b/coreutils/logname.c new file mode 100644 index 0000000..5139618 --- /dev/null +++ b/coreutils/logname.c @@ -0,0 +1,16 @@ +#include +#include +#include +#include +#include + +int main(void) { + char *p = getlogin(); + if (p != NULL) { + puts(p); + return 0; + } + + fprintf(stderr, "logname: %s\n", strerror(errno)); + return 1; +} diff --git a/coreutils/micro-coreutils.c b/coreutils/micro-coreutils.c deleted file mode 100644 index 4adb9d4..0000000 --- a/coreutils/micro-coreutils.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -#define MSG "Micro-coreutils: Version 0.1 LICENSE: wtfpl\n" - -int main(void) { - puts(MSG); - return 0; -}