mirror of
https://git.savannah.gnu.org/git/tar.git
synced 2026-04-25 19:10:46 +00:00
(set_stat): Remove duplicate code.
This commit is contained in:
@@ -155,8 +155,6 @@ set_stat (char *file_name, struct stat *stat_info, int symlink_flag)
|
||||
|
||||
if (0 < same_owner_option)
|
||||
{
|
||||
#if HAVE_LCHOWN
|
||||
|
||||
/* When lchown exists, it should be used to change the attributes of
|
||||
the symbolic link itself. In this case, a mere chown would change
|
||||
the attributes of the file the symbolic link is pointing to, and
|
||||
@@ -164,11 +162,13 @@ set_stat (char *file_name, struct stat *stat_info, int symlink_flag)
|
||||
|
||||
if (symlink_flag)
|
||||
{
|
||||
#if HAVE_LCHOWN
|
||||
if (lchown (file_name, stat_info->st_uid, stat_info->st_gid) < 0)
|
||||
ERROR ((0, errno, _("%s: Cannot lchown to uid %lu gid %lu"),
|
||||
file_name,
|
||||
(unsigned long) stat_info->st_uid,
|
||||
(unsigned long) stat_info->st_gid));
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -177,28 +177,13 @@ set_stat (char *file_name, struct stat *stat_info, int symlink_flag)
|
||||
file_name,
|
||||
(unsigned long) stat_info->st_uid,
|
||||
(unsigned long) stat_info->st_gid));
|
||||
|
||||
/* On a few systems, and in particular, those allowing to give files
|
||||
away, changing the owner or group destroys the suid or sgid bits.
|
||||
So let's attempt setting these bits once more. */
|
||||
if (stat_info->st_mode & (S_ISUID | S_ISGID | S_ISVTX))
|
||||
set_mode (file_name, stat_info);
|
||||
}
|
||||
|
||||
#else /* not HAVE_LCHOWN */
|
||||
|
||||
if (!symlink_flag)
|
||||
|
||||
if (chown (file_name, stat_info->st_uid, stat_info->st_gid) < 0)
|
||||
ERROR ((0, errno, _("%s: Cannot chown to uid %lu gid %lu"),
|
||||
file_name,
|
||||
(unsigned long) stat_info->st_uid,
|
||||
(unsigned long) stat_info->st_gid));
|
||||
|
||||
#endif/* not HAVE_LCHOWN */
|
||||
|
||||
if (!symlink_flag)
|
||||
|
||||
/* On a few systems, and in particular, those allowing to give files
|
||||
away, changing the owner or group destroys the suid or sgid bits.
|
||||
So let's attempt setting these bits once more. */
|
||||
|
||||
if (stat_info->st_mode & (S_ISUID | S_ISGID | S_ISVTX))
|
||||
set_mode (file_name, stat_info);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user