fixed cp
This commit is contained in:
parent
c1b916a4b6
commit
32f0b3ae40
|
@ -84,12 +84,12 @@ char copy(struct stat st, const char *src, const char *dst) {
|
|||
}
|
||||
|
||||
int cptree(const char *src, const char *dst) {
|
||||
struct stat stat_path;
|
||||
if (mu_get_stats(f_flag, L_flag, src, &stat_path))
|
||||
struct stat src_stat;
|
||||
if (mu_get_stats(f_flag, !L_flag, src, &src_stat))
|
||||
return 1;
|
||||
|
||||
if (!S_ISDIR(stat_path.st_mode)) {
|
||||
if (copy(stat_path, src, dst)) {
|
||||
if (!S_ISDIR(src_stat.st_mode)) {
|
||||
if (copy(src_stat, src, dst)) {
|
||||
if (f_flag)
|
||||
fprintf(stderr, "cp: %s: %s\n", dst, strerror(errno));
|
||||
|
||||
|
@ -100,7 +100,9 @@ int cptree(const char *src, const char *dst) {
|
|||
}
|
||||
|
||||
else if (!r_flag) {
|
||||
fprintf(stderr, "cp: omitting directory: %s\n", dst);
|
||||
if (f_flag)
|
||||
fprintf(stderr, "cp: omitting directory: %s\n", dst);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -113,7 +115,9 @@ int cptree(const char *src, const char *dst) {
|
|||
|
||||
DIR *dir = opendir(src);
|
||||
if (dir == NULL) {
|
||||
fprintf(stderr, "cp: %s: Can`t open directory\n", src);
|
||||
if (f_flag)
|
||||
fprintf(stderr, "cp: %s: Can`t open directory\n", src);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -121,25 +125,9 @@ int cptree(const char *src, const char *dst) {
|
|||
|
||||
struct dirent *ep;
|
||||
while ((ep = readdir(dir)) != NULL) {
|
||||
if (!strcmp(ep->d_name, ".") || !strcmp(ep->d_name, ".."))
|
||||
if (!strcmp(ep->d_name, ".") || !strcmp(ep->d_name, "..") || !strcmp(dst, ep->d_name))
|
||||
continue;
|
||||
|
||||
/* Check for recursion */
|
||||
char *dup = strdup(dst);
|
||||
if (dup != NULL) {
|
||||
char *bname = basename(dup);
|
||||
if (bname != NULL) {
|
||||
if (!strcmp(bname, ep->d_name)) {
|
||||
fprintf(stderr, "cp: recursion detected, omitting directory '%s'\n", dst);
|
||||
|
||||
free(dup);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
free(dup);
|
||||
}
|
||||
|
||||
/* Copy */
|
||||
char *src_path = mu_make_path(f_flag, src, ep->d_name);
|
||||
if (src_path == NULL)
|
||||
|
|
Loading…
Reference in New Issue