63 lines
1.0 KiB
C
63 lines
1.0 KiB
C
|
#include <stdio.h>
|
||
|
#include <errno.h>
|
||
|
#include <fcntl.h>
|
||
|
#include <libgen.h>
|
||
|
#include <string.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
#include "make_path.h"
|
||
|
char *f_flag = "mv";
|
||
|
|
||
|
int move(const char *src, const char *dst) {
|
||
|
char *copy = strdup(src);
|
||
|
if (!copy)
|
||
|
return 1;
|
||
|
|
||
|
char *new_path = mu_make_path(f_flag, dst, basename(copy));
|
||
|
if (new_path == NULL) {
|
||
|
free(copy);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
int ret = 0;
|
||
|
if (rename(src, new_path) < 0)
|
||
|
ret = 1;
|
||
|
|
||
|
free(new_path);
|
||
|
free(copy);
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
int main(int argc, char **argv) {
|
||
|
int opt;
|
||
|
while ((opt = getopt(argc, argv, "f")) != -1) {
|
||
|
switch (opt) {
|
||
|
case 'f':
|
||
|
f_flag = NULL;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
printf("mv [f] [src1 src2...] [dst]\n\t-f Force\n");
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
argv += optind;
|
||
|
argc -= optind;
|
||
|
|
||
|
/* Move code */
|
||
|
for (int i = 0; i < argc - 1; i++) {
|
||
|
if (move(argv[i], argv[argc - 1])) {
|
||
|
if (rename(argv[i], argv[argc - 1]) < 0) {
|
||
|
if (f_flag)
|
||
|
fprintf(stderr, "mv: %s %s\n", argv[i], strerror(errno));
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|