Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- copy.c | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/copy.c b/copy.c index 074b609..60c7d8a 100644 --- a/copy.c +++ b/copy.c @@ -111,8 +111,10 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags) if (dest_exists) { if (!S_ISDIR(dest_stat.st_mode)) return error(_("target '%s' is not a directory"), dest); - /* race here: user can substitute a symlink between - * this check and actual creation of files inside dest */ + /* + * race here: user can substitute a symlink between + * this check and actual creation of files inside dest + */ } else { /* Create DEST */ mode_t mode; @@ -130,22 +132,24 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags) if (lstat(dest, &dest_stat) < 0) return error_errno(_("can't stat '%s'"), dest); } - /* remember (dev,inode) of each created dir. - * NULL: name is not remembered */ + /* + * remember (dev,inode) of each created dir. name is + * not remembered + */ add_to_ino_dev_hashtable(&dest_stat, NULL); /* Recursively copy files in SOURCE */ dp = opendir(source); - if (dp == NULL) { + if (!dp) { retval = -1; goto preserve_mode_ugid_time; } - while ((d = readdir(dp)) != NULL) { + while ((d = readdir(dp))) { char *new_source, *new_dest; new_source = concat_subpath_file(source, d->d_name); - if (new_source == NULL) + if (!new_source) continue; new_dest = concat_path_file(dest, d->d_name); if (copy_file(new_source, new_dest, flags & ~FILEUTILS_DEREFERENCE_L0) < 0) @@ -155,16 +159,15 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags) } closedir(dp); - if (!dest_exists - && chmod(dest, source_stat.st_mode & ~saved_umask) < 0 - ) { + if (!dest_exists && + chmod(dest, source_stat.st_mode & ~saved_umask) < 0) { error_errno(_("can't preserve permissions of '%s'"), dest); /* retval = -1; - WRONG! copy *WAS* made */ } goto preserve_mode_ugid_time; } - if (S_ISREG(source_stat.st_mode) ) { /* "cp [-opts] regular_file thing2" */ + if (S_ISREG(source_stat.st_mode)) { /* "cp [-opts] regular_file thing2" */ int src_fd; int dst_fd; mode_t new_mode; @@ -199,7 +202,7 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags) if (!S_ISREG(source_stat.st_mode)) new_mode = 0666; - // POSIX way is a security problem versus (sym)link attacks + /* POSIX way is a security problem versus (sym)link attacks */ if (!ENABLE_FEATURE_NON_POSIX_CP) { dst_fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, new_mode); } else { /* safe way: */ @@ -226,13 +229,15 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags) retval = error_errno(_("error writing to '%s'"), dest); /* ...but read size is already checked by bb_copyfd_eof */ close(src_fd); - /* "cp /dev/something new_file" should not - * copy mode of /dev/something */ + /* + * "cp /dev/something new_file" should not + * copy mode of /dev/something + */ if (!S_ISREG(source_stat.st_mode)) return retval; goto preserve_mode_ugid_time; } - dont_cat: +dont_cat: /* Source is a symlink or a special file */ /* We are lazy here, a bit lax with races... */ @@ -252,20 +257,23 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags) if (lchown(dest, source_stat.st_uid, source_stat.st_gid) < 0) error_errno(_("can't preserve %s of '%s'"), "ownership", dest); } - /* _Not_ jumping to preserve_mode_ugid_time: - * symlinks don't have those */ + /* + * _Not_ jumping to preserve_mode_ugid_time: symlinks + * don't have those + */ return 0; } - if (S_ISBLK(source_stat.st_mode) || S_ISCHR(source_stat.st_mode) - || S_ISSOCK(source_stat.st_mode) || S_ISFIFO(source_stat.st_mode) - ) { + if (S_ISBLK(source_stat.st_mode) || + S_ISCHR(source_stat.st_mode) || + S_ISSOCK(source_stat.st_mode) || + S_ISFIFO(source_stat.st_mode)) { if (mknod(dest, source_stat.st_mode, source_stat.st_rdev) < 0) return error_errno(_("can't create '%s'"), dest); } else return error(_("unrecognized file '%s' with mode %x"), source, source_stat.st_mode); - preserve_mode_ugid_time: +preserve_mode_ugid_time: if (1 /*FILEUTILS_PRESERVE_STATUS*/) { struct timeval times[2]; -- 2.8.2.524.g6ff3d78