Signed-off-by: Nguyễn Thái Ngọc Duy <[email protected]>
---
copy.c | 85 ++++++++++++++++++++++++------------------------------------------
1 file changed, 31 insertions(+), 54 deletions(-)
diff --git a/copy.c b/copy.c
index d24a8ae..cdb38d5 100644
--- a/copy.c
+++ b/copy.c
@@ -82,23 +82,16 @@ int FAST_FUNC copy_file(const char *source, const char
*dest, int flags)
smallint dest_exists = 0;
smallint ovr;
- if (lstat(source, &source_stat) < 0) {
- bb_perror_msg("can't stat '%s'", source);
- return -1;
- }
+ if (lstat(source, &source_stat) < 0)
+ return sys_error(_("can't stat '%s'"), source);
if (lstat(dest, &dest_stat) < 0) {
- if (errno != ENOENT) {
- bb_perror_msg("can't stat '%s'", dest);
- return -1;
- }
+ if (errno != ENOENT)
+ return sys_error(_("can't stat '%s'"), dest);
} else {
- if (source_stat.st_dev == dest_stat.st_dev
- && source_stat.st_ino == dest_stat.st_ino
- ) {
- bb_error_msg("'%s' and '%s' are the same file", source,
dest);
- return -1;
- }
+ if (source_stat.st_dev == dest_stat.st_dev &&
+ source_stat.st_ino == dest_stat.st_ino)
+ return error(_("'%s' and '%s' are the same file"),
source, dest);
dest_exists = 1;
}
@@ -110,18 +103,14 @@ int FAST_FUNC copy_file(const char *source, const char
*dest, int flags)
/* Did we ever create source ourself before? */
tp = is_in_ino_dev_hashtable(&source_stat);
- if (tp) {
+ if (tp)
/* We did! it's a recursion! man the lifeboats... */
- bb_error_msg("recursion detected, omitting directory
'%s'",
- source);
- return -1;
- }
+ return error(_("recursion detected, omitting directory
'%s'"),
+ source);
if (dest_exists) {
- if (!S_ISDIR(dest_stat.st_mode)) {
- bb_error_msg("target '%s' is not a directory",
dest);
- return -1;
- }
+ 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
*/
} else {
@@ -134,15 +123,12 @@ int FAST_FUNC copy_file(const char *source, const char
*dest, int flags)
mode |= S_IRWXU;
if (mkdir(dest, mode) < 0) {
umask(saved_umask);
- bb_perror_msg("can't create directory '%s'",
dest);
- return -1;
+ return sys_error(_("can't create directory
'%s'"), dest);
}
umask(saved_umask);
/* need stat info for add_to_ino_dev_hashtable */
- if (lstat(dest, &dest_stat) < 0) {
- bb_perror_msg("can't stat '%s'", dest);
- return -1;
- }
+ if (lstat(dest, &dest_stat) < 0)
+ return sys_error(_("can't stat '%s'"), dest);
}
/* remember (dev,inode) of each created dir.
* NULL: name is not remembered */
@@ -172,7 +158,7 @@ int FAST_FUNC copy_file(const char *source, const char
*dest, int flags)
if (!dest_exists
&& chmod(dest, source_stat.st_mode & ~saved_umask) < 0
) {
- bb_perror_msg("can't preserve %s of '%s'",
"permissions", dest);
+ sys_error(_("can't preserve permissions of '%s'"),
dest);
/* retval = -1; - WRONG! copy *WAS* made */
}
goto preserve_mode_ugid_time;
@@ -196,10 +182,8 @@ int FAST_FUNC copy_file(const char *source, const char
*dest, int flags)
ovr = ask_and_unlink(dest, flags);
if (ovr <= 0)
return ovr;
- if (link(link_target, dest) < 0) {
- bb_perror_msg("can't create
link '%s'", dest);
- return -1;
- }
+ if (link(link_target, dest) < 0)
+ return sys_error(_("can't
create link '%s'"), dest);
}
return 0;
}
@@ -238,10 +222,8 @@ int FAST_FUNC copy_file(const char *source, const char
*dest, int flags)
if (bb_copyfd_eof(src_fd, dst_fd) == -1)
retval = -1;
/* Careful with writing... */
- if (close(dst_fd) < 0) {
- bb_perror_msg("error writing to '%s'", dest);
- retval = -1;
- }
+ if (close(dst_fd) < 0)
+ retval = sys_error(_("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
@@ -265,12 +247,10 @@ int FAST_FUNC copy_file(const char *source, const char
*dest, int flags)
if (lpath) {
int r = symlink(lpath, dest);
free(lpath);
- if (r < 0) {
- bb_perror_msg("can't create symlink '%s'",
dest);
- return -1;
- }
+ if (r < 0)
+ return sys_error(_("can't create symlink
'%s'"), dest);
if (lchown(dest, source_stat.st_uid,
source_stat.st_gid) < 0)
- bb_perror_msg("can't preserve %s of '%s'",
"ownership", dest);
+ sys_error(_("can't preserve %s of '%s'"),
"ownership", dest);
}
/* _Not_ jumping to preserve_mode_ugid_time:
* symlinks don't have those */
@@ -279,14 +259,11 @@ int FAST_FUNC copy_file(const char *source, const char
*dest, int flags)
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) {
- bb_perror_msg("can't create '%s'", dest);
- return -1;
- }
- } else {
- bb_error_msg("unrecognized file '%s' with mode %x", source,
source_stat.st_mode);
- return -1;
- }
+ if (mknod(dest, source_stat.st_mode, source_stat.st_rdev) < 0)
+ return sys_error(_("can't create '%s'"), dest);
+ } else
+ return error(_("unrecognized file '%s' with mode %x"),
+ source, source_stat.st_mode);
preserve_mode_ugid_time:
@@ -297,13 +274,13 @@ int FAST_FUNC copy_file(const char *source, const char
*dest, int flags)
times[1].tv_usec = times[0].tv_usec = 0;
/* BTW, utimes sets usec-precision time - just FYI */
if (utimes(dest, times) < 0)
- bb_perror_msg("can't preserve %s of '%s'", "times",
dest);
+ sys_error(_("can't preserve %s of '%s'"), "times",
dest);
if (chown(dest, source_stat.st_uid, source_stat.st_gid) < 0) {
source_stat.st_mode &= ~(S_ISUID | S_ISGID);
- bb_perror_msg("can't preserve %s of '%s'", "ownership",
dest);
+ sys_error(_("can't preserve %s of '%s'"), "ownership",
dest);
}
if (chmod(dest, source_stat.st_mode) < 0)
- bb_perror_msg("can't preserve %s of '%s'",
"permissions", dest);
+ sys_error(_("can't preserve %s of '%s'"),
"permissions", dest);
}
return retval;
--
2.8.0.rc0.210.gd302cd2
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html