diff --git a/src/mv.c b/src/mv.c index c376a2e..d67a712 100644 --- a/src/mv.c +++ b/src/mv.c @@ -1,18 +1,44 @@ #include #include +#include +#include #include #include #include -int main(const int argc, char **argv) { +int move(const char *src, const char *dst) { + char *copy = strdup(src); + if (!copy) + return 1; + + char *bname = basename(copy); + + size_t len = strlen(dst) + strlen(bname) + 2; + char *new_path = malloc(len + 1); + if (!new_path) + return 1; + + snprintf(new_path, len, "%s/%s", dst, bname); + + int ret = 0; + if (rename(src, new_path) < 0) + ret = 1; + + free(new_path); + free(copy); + + return ret; +} + +int main(const int argc, const char **argv) { if (argc <= 2) { printf("mv: missing operand\n"); return 1; } - for (int i = 1; i < argc; i++) { - if (rename(argv[i], argv[argc]) < 0) { - fprintf(stderr, "mv: %s\n", strerror(errno)); + for (int i = 1; i < argc - 1; i++) { + if (move(argv[i], argv[argc - 1])) { + fprintf(stderr, "mv: %s %s\n", argv[i], strerror(errno)); return 1; } }