diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/copy.c | 84 | 
1 files changed, 0 insertions, 84 deletions
| @@ -84,87 +84,3 @@ int copy2(const char *src, const char *dest, unsigned int op) {      }      return 0;  } - -int copytree(const char *srcdir, const char *destdir, unsigned int op) { -    DIR *dir; -    struct dirent *d; -    struct stat st; -    mode_t mode; -    mode_t umask_value; -    errno = 0; - -    dir = opendir(srcdir); -    if (!dir) { -        return -1; -    } - -    umask_value = umask(0); -    umask(umask_value); - -    if (lstat(srcdir, &st) < 0) { -        perror(srcdir); -        closedir(dir); -        return -1; -    } - -    if (op & CT_PERM) { -        mode = st.st_mode; -    } else { -        mode = 0777 & ~umask_value; -    } - -    // Source directory is not writable so modify the mode for the destination -    if (mode & ~S_IWUSR) { -        mode |= S_IWUSR; -    } - -    if (access(destdir, F_OK) < 0) { -        if (mkdirs(destdir, mode) < 0) { -            perror(destdir); -            closedir(dir); -            return -1; -        } -    } - -    memset(&st, 0, sizeof(st)); -    while ((d = readdir(dir)) != NULL) { -        char src[PATH_MAX] = {0}; -        char dest[PATH_MAX] = {0}; -        if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) { -            continue; -        } -        strcat(src, srcdir); -        strcat(src, "/"); -        strcat(src, d->d_name); - -        strcat(dest, destdir); -        strcat(dest, "/"); -        strcat(dest, d->d_name); - -        if (lstat(src, &st) < 0) { -            perror(srcdir); -            closedir(dir); -            return -1; -        } - -        if (d->d_type == DT_DIR) { -            if (strncmp(src, dest, strlen(src)) == 0) { -                closedir(dir); -                return -1; -            } - -            if (access(dest, F_OK) < 0) { -                if (mkdir(dest, mode) < 0) { -                    perror(dest); -                    closedir(dir); -                    return -1; -                } -            } - -            copytree(src, dest, op); -        } -        copy2(src, dest, op); -    } -    closedir(dir); -    return 0; -} | 
