mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-01-21 05:18:14 -05:00
Always use lutimes() if it is available.
This commit is contained in:
6
compat.c
6
compat.c
@@ -248,7 +248,7 @@ void setup_protocol(int f_out,int f_in)
|
||||
int compat_flags;
|
||||
if (am_server) {
|
||||
compat_flags = allow_inc_recurse ? CF_INC_RECURSE : 0;
|
||||
#if defined HAVE_LUTIMES && defined HAVE_UTIMES
|
||||
#ifdef CAN_SET_SYMLINK_TIMES
|
||||
compat_flags |= CF_SYMLINK_TIMES;
|
||||
#endif
|
||||
#ifdef ICONV_OPTION
|
||||
@@ -264,7 +264,7 @@ void setup_protocol(int f_out,int f_in)
|
||||
? strchr(client_info, 'L') != NULL
|
||||
: !!(compat_flags & CF_SYMLINK_TIMES);
|
||||
}
|
||||
#if defined HAVE_LUTIMES && defined HAVE_UTIMES
|
||||
#ifdef CAN_SET_SYMLINK_TIMES
|
||||
else
|
||||
receiver_symlink_times = 1;
|
||||
#endif
|
||||
@@ -281,7 +281,7 @@ void setup_protocol(int f_out,int f_in)
|
||||
exit_cleanup(RERR_SYNTAX);
|
||||
}
|
||||
need_messages_from_generator = 1;
|
||||
#if defined HAVE_LUTIMES && defined HAVE_UTIMES
|
||||
#ifdef CAN_SET_SYMLINK_TIMES
|
||||
} else if (!am_sender) {
|
||||
receiver_symlink_times = 1;
|
||||
#endif
|
||||
|
||||
@@ -392,7 +392,7 @@ static void do_delete_pass(void)
|
||||
|
||||
int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
|
||||
{
|
||||
#if !defined HAVE_LUTIMES || !defined HAVE_UTIMES
|
||||
#ifndef CAN_SET_SYMLINK_TIMES
|
||||
if (S_ISLNK(file->mode)) {
|
||||
;
|
||||
} else
|
||||
@@ -440,7 +440,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
|
||||
if (statret >= 0) { /* A from-dest-dir statret can == 1! */
|
||||
int keep_time = !preserve_times ? 0
|
||||
: S_ISDIR(file->mode) ? preserve_times > 1 :
|
||||
#if defined HAVE_LUTIMES && defined HAVE_UTIMES
|
||||
#ifdef CAN_SET_SYMLINK_TIMES
|
||||
1;
|
||||
#else
|
||||
!S_ISLNK(file->mode);
|
||||
|
||||
@@ -596,7 +596,7 @@ static void print_rsync_version(enum logcode f)
|
||||
#ifdef ICONV_OPTION
|
||||
iconv = "";
|
||||
#endif
|
||||
#if defined HAVE_LUTIMES && defined HAVE_UTIMES
|
||||
#ifdef CAN_SET_SYMLINK_TIMES
|
||||
symtimes = "";
|
||||
#endif
|
||||
|
||||
@@ -2358,7 +2358,7 @@ void server_options(char **args, int *argc_p)
|
||||
argstr[x++] = '.';
|
||||
if (allow_inc_recurse)
|
||||
argstr[x++] = 'i';
|
||||
#if defined HAVE_LUTIMES && defined HAVE_UTIMES
|
||||
#ifdef CAN_SET_SYMLINK_TIMES
|
||||
argstr[x++] = 'L';
|
||||
#endif
|
||||
#ifdef ICONV_OPTION
|
||||
|
||||
4
rsync.h
4
rsync.h
@@ -359,6 +359,10 @@ enum delret {
|
||||
#include <utime.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LUTIMES
|
||||
#define CAN_SET_SYMLINK_TIMES 1
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
15
util.c
15
util.c
@@ -125,7 +125,7 @@ NORETURN void overflow_exit(const char *str)
|
||||
|
||||
int set_modtime(const char *fname, time_t modtime, mode_t mode)
|
||||
{
|
||||
#if !defined HAVE_LUTIMES || !defined HAVE_UTIMES
|
||||
#ifndef CAN_SET_SYMLINK_TIMES
|
||||
if (S_ISLNK(mode))
|
||||
return 1;
|
||||
#endif
|
||||
@@ -140,20 +140,19 @@ int set_modtime(const char *fname, time_t modtime, mode_t mode)
|
||||
return 0;
|
||||
|
||||
{
|
||||
#ifdef HAVE_UTIMES
|
||||
#if defined HAVE_UTIMES || defined HAVE_LUTIMES
|
||||
struct timeval t[2];
|
||||
t[0].tv_sec = time(NULL);
|
||||
t[0].tv_usec = 0;
|
||||
t[1].tv_sec = modtime;
|
||||
t[1].tv_usec = 0;
|
||||
# ifdef HAVE_LUTIMES
|
||||
if (S_ISLNK(mode)) {
|
||||
if (lutimes(fname, t) < 0)
|
||||
return errno == ENOSYS ? 1 : -1;
|
||||
return 0;
|
||||
}
|
||||
# endif
|
||||
if (lutimes(fname, t) < 0)
|
||||
return S_ISLNK(mode) && errno == ENOSYS ? 1 : -1;
|
||||
return 0;
|
||||
# else
|
||||
return utimes(fname, t);
|
||||
# endif
|
||||
#elif defined HAVE_STRUCT_UTIMBUF
|
||||
struct utimbuf tbuf;
|
||||
tbuf.actime = time(NULL);
|
||||
|
||||
Reference in New Issue
Block a user