Skip to content

Commit

Permalink
Always use lutimes() if it is available.
Browse files Browse the repository at this point in the history
  • Loading branch information
Wayne Davison committed Sep 7, 2009
1 parent 4b660ba commit accc091
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 15 deletions.
6 changes: 3 additions & 3 deletions compat.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions generator.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions options.c
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions rsync.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 7 additions & 8 deletions util.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
Expand Down

0 comments on commit accc091

Please sign in to comment.