mode_t invert_permissions, enum permstatus permstatus,
char typeflag)
{
- if (typeflag != SYMTYPE)
+ /* We do the utime before the chmod because some versions of utime are
+ broken and trash the modes of the file. */
+
+ if (! touch_option && permstatus != INTERDIR_PERMSTATUS)
{
- /* We do the utime before the chmod because some versions of utime are
- broken and trash the modes of the file. */
+ /* We set the accessed time to `now', which is really the time we
+ started extracting files, unless incremental_option is used, in
+ which case .st_atime is used. */
- if (! touch_option && permstatus != INTERDIR_PERMSTATUS)
- {
- /* We set the accessed time to `now', which is really the time we
- started extracting files, unless incremental_option is used, in
- which case .st_atime is used. */
-
- /* FIXME: incremental_option should set ctime too, but how? */
-
- struct timespec ts[2];
- if (incremental_option)
- ts[0] = st->atime;
- else
- ts[0] = start_time;
- ts[1] = st->mtime;
-
- if (utimens (file_name, ts) != 0)
- utime_error (file_name);
- else
- {
- check_time (file_name, ts[0]);
- check_time (file_name, ts[1]);
- }
- }
+ /* FIXME: incremental_option should set ctime too, but how? */
- /* Some systems allow non-root users to give files away. Once this
- done, it is not possible anymore to change file permissions.
- However, setting file permissions now would be incorrect, since
- they would apply to the wrong user, and there would be a race
- condition. So, don't use systems that allow non-root users to
- give files away. */
+ struct timespec ts[2];
+ if (incremental_option)
+ ts[0] = st->atime;
+ else
+ ts[0] = start_time;
+ ts[1] = st->mtime;
+
+ if (utimens (file_name, ts, typeflag == SYMTYPE) != 0)
+ utime_error (file_name);
+ else
+ {
+ check_time (file_name, ts[0]);
+ check_time (file_name, ts[1]);
+ }
}
+ /* Some systems allow non-root users to give files away. Once this
+ done, it is not possible anymore to change file permissions.
+ However, setting file permissions now would be incorrect, since
+ they would apply to the wrong user, and there would be a race
+ condition. So, don't use systems that allow non-root users to
+ give files away. */
+
if (0 < same_owner_option && permstatus != INTERDIR_PERMSTATUS)
{
/* When lchown exists, it should be used to change the attributes of