Hello community, here is the log from the commit of package rsync checked in at Wed Sep 24 17:27:45 CEST 2008. -------- --- rsync/rsync.changes 2008-09-04 12:57:47.000000000 +0200 +++ /mounts/work_src_done/STABLE/rsync/rsync.changes 2008-09-22 14:32:15.000000000 +0200 @@ -1,0 +2,8 @@ +Mon Sep 22 13:24:57 CEST 2008 - puzel@suse.cz + +- update to 3.0.4 + - update to stable release +- removed rsync-3.0.4pre2-xattrs-test-fix.patch + - fixed in upstream + +------------------------------------------------------------------- Old: ---- rsync-3.0.4pre2.tar.bz2 rsync-3.0.4pre2-xattrs-test-fix.patch rsync-patches-3.0.4pre2.tar.bz2 New: ---- rsync-3.0.4.tar.bz2 rsync-patches-3.0.4.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rsync.spec ++++++ --- /var/tmp/diff_new_pack.L19826/_old 2008-09-24 17:27:19.000000000 +0200 +++ /var/tmp/diff_new_pack.L19826/_new 2008-09-24 17:27:19.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package rsync (Version 3.0.3.90) +# spec file for package rsync (Version 3.0.4) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -31,11 +31,11 @@ Group: Productivity/Networking/Other PreReq: %fillup_prereq %insserv_prereq sed grep AutoReqProv: on -Version: 3.0.3.90 +Version: 3.0.4 Release: 1 Summary: Replacement for RCP/mirror that has Many More Features -Source: rsync-3.0.4pre2.tar.bz2 -Source1: rsync-patches-3.0.4pre2.tar.bz2 +Source: %{name}-%{version}.tar.bz2 +Source1: %{name}-patches-%{version}.tar.bz2 Source2: logrotate.rsync Source3: rsync.xinetd Source4: rsyncd.rc @@ -43,7 +43,6 @@ Source6: rsyncd.secrets Source7: NEWS-rsync-3.0.3 Patch3: system-zlib.diff -Patch5: rsync-3.0.4pre2-xattrs-test-fix.patch Url: http://rsync.samba.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build %define with_system_zlib 0 @@ -67,7 +66,7 @@ Paul Mackerras <Paul.Mackerras@cs.anu.edu.au> %prep -%setup -n rsync-3.0.4pre2 -q -b 1 +%setup -q -b 1 %if %with_system_zlib rm -f zlib/*.h %patch3 @@ -76,7 +75,6 @@ patch -p1 < patches/xattrs.diff patch -p1 < patches/slp.diff cp %{SOURCE7} . -%patch5 %build autoheader @@ -143,6 +141,11 @@ %doc COPYING NEWS NEWS-rsync-3.0.3 README tech_report.ps tech_report.tex %changelog +* Mon Sep 22 2008 puzel@suse.cz +- update to 3.0.4 + - update to stable release +- removed rsync-3.0.4pre2-xattrs-test-fix.patch + - fixed in upstream * Thu Sep 04 2008 puzel@suse.cz - update to 3.0.4pre2 - Fixed the handling of a --partial-dir that cannot be created. ++++++ rsync-3.0.4pre2.tar.bz2 -> rsync-3.0.4.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/configure.in new/rsync-3.0.4/configure.in --- old/rsync-3.0.4pre2/configure.in 2008-08-02 23:06:31.000000000 +0200 +++ new/rsync-3.0.4/configure.in 2008-09-06 18:32:26.000000000 +0200 @@ -5,7 +5,7 @@ AC_CONFIG_HEADER(config.h) AC_PREREQ(2.59) -RSYNC_VERSION=3.0.4pre2 +RSYNC_VERSION=3.0.4 AC_SUBST(RSYNC_VERSION) AC_MSG_NOTICE([Configuring rsync $RSYNC_VERSION]) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/configure.sh new/rsync-3.0.4/configure.sh --- old/rsync-3.0.4pre2/configure.sh 2008-08-02 23:13:27.000000000 +0200 +++ new/rsync-3.0.4/configure.sh 2008-09-06 18:33:01.000000000 +0200 @@ -1731,7 +1731,7 @@ -RSYNC_VERSION=3.0.4pre2 +RSYNC_VERSION=3.0.4 { echo "$as_me:$LINENO: Configuring rsync $RSYNC_VERSION" >&5 echo "$as_me: Configuring rsync $RSYNC_VERSION" >&6;} diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/flist.c new/rsync-3.0.4/flist.c --- old/rsync-3.0.4pre2/flist.c 2008-08-02 22:45:15.000000000 +0200 +++ new/rsync-3.0.4/flist.c 2008-08-10 16:31:45.000000000 +0200 @@ -1126,7 +1126,7 @@ } } else { io_error |= IOERR_GENERAL; - rsyserr(FERROR_XFER, save_errno, "readlink %s failed", + rsyserr(FERROR_XFER, save_errno, "readlink_stat(%s) failed", full_fname(thisname)); } return NULL; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/generator.c new/rsync-3.0.4/generator.c --- old/rsync-3.0.4pre2/generator.c 2008-08-02 18:03:49.000000000 +0200 +++ new/rsync-3.0.4/generator.c 2008-08-31 18:51:29.000000000 +0200 @@ -89,7 +89,6 @@ extern int max_delete; extern int force_delete; extern int one_file_system; -extern int check_for_io_err; extern struct stats stats; extern dev_t filesystem_dev; extern mode_t orig_umask; @@ -2079,8 +2078,7 @@ while (1) { #ifdef SUPPORT_HARD_LINKS if (preserve_hard_links && (ndx = get_hlink_num()) != -1) { - flist = flist_for_ndx(ndx); - assert(flist != NULL); + flist = flist_for_ndx(ndx, "check_for_finished_files.1"); file = flist->files[ndx - flist->ndx_start]; assert(file->flags & FLAG_HLINKED); finish_hard_link(file, f_name(file, fbuf), ndx, NULL, itemizing, code, -1); @@ -2103,7 +2101,7 @@ ignore_times++; flist = cur_flist; - cur_flist = flist_for_ndx(ndx); + cur_flist = flist_for_ndx(ndx, "check_for_finished_files.2"); file = cur_flist->files[ndx - cur_flist->ndx_start]; if (solo_file) @@ -2238,10 +2236,6 @@ dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp)); } else dirdev = MAKEDEV(0, 0); - /* We must be sure we've had a chance to receive an I/O - * error for this directory before we delete in it. */ - while (check_for_io_err && !cur_flist->next) - wait_for_receiver(); delete_in_dir(fbuf, fp, &dirdev); } else change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp)); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/.gitignore new/rsync-3.0.4/.gitignore --- old/rsync-3.0.4pre2/.gitignore 2008-07-24 08:28:57.000000000 +0200 +++ new/rsync-3.0.4/.gitignore 2008-08-17 18:28:06.000000000 +0200 @@ -35,6 +35,7 @@ /rounding.h /doc/rsync.pdf /doc/rsync.ps +/support/savetransfer /testsuite/chown-fake.test /testsuite/devices-fake.test /patches diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/hlink.c new/rsync-3.0.4/hlink.c --- old/rsync-3.0.4pre2/hlink.c 2008-07-23 06:34:20.000000000 +0200 +++ new/rsync-3.0.4/hlink.c 2008-08-14 16:32:18.000000000 +0200 @@ -37,7 +37,7 @@ extern int maybe_ATTRS_REPORT; extern int unsort_ndx; extern char *basis_dir[]; -extern struct file_list *cur_flist, *first_flist; +extern struct file_list *cur_flist; #ifdef SUPPORT_HARD_LINKS @@ -119,14 +119,15 @@ if (inc_recurse) { node = hashtable_find(prior_hlinks, gnum, 1); if (!node->data) { - node->data = new_array0(char, 5); + if (!(node->data = new_array0(char, 5))) + out_of_memory("match_gnums"); assert(gnum >= hlink_flist->ndx_start); file->flags |= FLAG_HLINK_FIRST; prev = -1; } else if (CVAL(node->data, 0) == 0) { struct file_list *flist; prev = IVAL(node->data, 1); - flist = flist_for_ndx(prev); + flist = flist_for_ndx(prev, NULL); if (flist) flist->files[prev - flist->ndx_start]->flags &= ~FLAG_HLINK_LAST; else { @@ -255,7 +256,7 @@ while (1) { struct file_list *flist; if (prev_ndx < 0 - || (flist = flist_for_ndx(prev_ndx)) == NULL) + || (flist = flist_for_ndx(prev_ndx, NULL)) == NULL) break; fp = flist->files[prev_ndx - flist->ndx_start]; if (!(fp->flags & FLAG_SKIP_HLINK)) { @@ -477,16 +478,7 @@ while ((ndx = prev_ndx) >= 0) { int val; - flist = flist_for_ndx(ndx); - if (flist == NULL) { - int start1 = first_flist ? first_flist->ndx_start : 0; - int start2 = first_flist ? first_flist->prev->ndx_start : 0; - int used = first_flist ? first_flist->prev->used : 0; - rprintf(FERROR, - "File index not found: %d (%d - %d)\n", - ndx, start1 - 1, start2 + used - 1); - exit_cleanup(RERR_PROTOCOL); - } + flist = flist_for_ndx(ndx, "finish_hard_link"); file = flist->files[ndx - flist->ndx_start]; file->flags = (file->flags & ~FLAG_HLINK_FIRST) | FLAG_HLINK_DONE; prev_ndx = F_HL_PREV(file); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/io.c new/rsync-3.0.4/io.c --- old/rsync-3.0.4pre2/io.c 2008-08-02 19:25:17.000000000 +0200 +++ new/rsync-3.0.4/io.c 2008-08-31 18:51:29.000000000 +0200 @@ -64,7 +64,6 @@ int ignore_timeout = 0; int batch_fd = -1; int msgdone_cnt = 0; -int check_for_io_err = 0; /* Ignore an EOF error if non-zero. See whine_about_eof(). */ int kluge_around_eof = 0; @@ -102,7 +101,7 @@ #ifdef ICONV_OPTION static xbuf iconv_buf = EMPTY_XBUF; #endif -static int defer_forwarding_messages = 0, defer_forwarding_keep = 0; +static int defer_forwarding_messages = 0, keep_defer_forwarding = 0; static int select_timeout = SELECT_TIMEOUT; static int active_filecnt = 0; static OFF_T active_bytecnt = 0; @@ -184,9 +183,7 @@ static void got_flist_entry_status(enum festatus status, const char *buf) { int ndx = IVAL(buf, 0); - struct file_list *flist = flist_for_ndx(ndx); - - assert(flist != NULL); + struct file_list *flist = flist_for_ndx(ndx, "got_flist_entry_status"); if (remove_source_files) { active_filecnt--; @@ -297,33 +294,32 @@ lst->tail = m; } +static inline int flush_a_msg(int fd) +{ + struct msg_list_item *m = msg_queue.head; + int len = IVAL(m->buf, 0) & 0xFFFFFF; + int tag = *((uchar*)m->buf+3) - MPLEX_BASE; + + if (!(msg_queue.head = m->next)) + msg_queue.tail = NULL; + + defer_forwarding_messages++; + mplex_write(fd, tag, m->buf + 4, len, m->convert); + defer_forwarding_messages--; + + free(m); + + return len; +} + static void msg_flush(void) { if (am_generator) { - while (msg_queue.head && io_multiplexing_out) { - struct msg_list_item *m = msg_queue.head; - int len = IVAL(m->buf, 0) & 0xFFFFFF; - int tag = *((uchar*)m->buf+3) - MPLEX_BASE; - if (!(msg_queue.head = m->next)) - msg_queue.tail = NULL; - stats.total_written += len + 4; - defer_forwarding_messages++; - mplex_write(sock_f_out, tag, m->buf + 4, len, m->convert); - defer_forwarding_messages--; - free(m); - } + while (msg_queue.head && io_multiplexing_out) + stats.total_written += flush_a_msg(sock_f_out) + 4; } else { - while (msg_queue.head) { - struct msg_list_item *m = msg_queue.head; - int len = IVAL(m->buf, 0) & 0xFFFFFF; - int tag = *((uchar*)m->buf+3) - MPLEX_BASE; - if (!(msg_queue.head = m->next)) - msg_queue.tail = NULL; - defer_forwarding_messages++; - mplex_write(msg_fd_out, tag, m->buf + 4, len, m->convert); - defer_forwarding_messages--; - free(m); - } + while (msg_queue.head) + (void)flush_a_msg(msg_fd_out); } } @@ -381,8 +377,6 @@ len = tag & 0xFFFFFF; tag = (tag >> 24) - MPLEX_BASE; - check_for_io_err = 0; - switch (tag) { case MSG_DONE: if (len < 0 || len > 1 || !am_generator) { @@ -417,9 +411,6 @@ } flist = recv_file_list(fd); flist->parent_ndx = IVAL(buf,0); - /* If the sender is going to send us an MSG_IO_ERROR value, it - * will always be the very next message following MSG_FLIST. */ - check_for_io_err = 1; #ifdef SUPPORT_HARD_LINKS if (preserve_hard_links) match_hard_links(flist); @@ -538,9 +529,9 @@ SIVAL(buffer, 0, ((MPLEX_BASE + (int)code)<<24) + len); - defer_forwarding_keep = 1; /* defer_forwarding_messages++ on return */ + keep_defer_forwarding++; /* defer_forwarding_messages++ on return */ writefd_unbuffered(fd, buffer, n+4); - defer_forwarding_keep = 0; + keep_defer_forwarding--; if (len > n) writefd_unbuffered(fd, buf+n, len-n); @@ -575,10 +566,9 @@ void wait_for_receiver(void) { - if (iobuf_out_cnt) - io_flush(NORMAL_FLUSH); - else - read_msg_fd(); + if (io_flush(NORMAL_FLUSH)) + return; + read_msg_fd(); } int get_redo_num(void) @@ -1068,8 +1058,6 @@ msg_bytes = tag & 0xFFFFFF; tag = (tag >> 24) - MPLEX_BASE; - check_for_io_err = 0; - switch (tag) { case MSG_DATA: if (msg_bytes > iobuf_in_siz) { @@ -1564,24 +1552,34 @@ } no_flush--; - defer_inc -= defer_forwarding_keep; + if (keep_defer_forwarding) + defer_inc--; if (!(defer_forwarding_messages -= defer_inc) && !no_flush) msg_flush(); } -void io_flush(int flush_it_all) +int io_flush(int flush_it_all) { - if (!iobuf_out_cnt || no_flush) - return; + int flushed_something = 0; - if (io_multiplexing_out) - mplex_write(sock_f_out, MSG_DATA, iobuf_out, iobuf_out_cnt, 0); - else - writefd_unbuffered(iobuf_f_out, iobuf_out, iobuf_out_cnt); - iobuf_out_cnt = 0; + if (no_flush) + return 0; + + if (iobuf_out_cnt) { + if (io_multiplexing_out) + mplex_write(sock_f_out, MSG_DATA, iobuf_out, iobuf_out_cnt, 0); + else + writefd_unbuffered(iobuf_f_out, iobuf_out, iobuf_out_cnt); + iobuf_out_cnt = 0; + flushed_something = 1; + } - if (flush_it_all && !defer_forwarding_messages) + if (flush_it_all && !defer_forwarding_messages && msg_queue.head) { msg_flush(); + flushed_something = 1; + } + + return flushed_something; } static void writefd(int fd, const char *buf, size_t len) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/log.c new/rsync-3.0.4/log.c --- old/rsync-3.0.4pre2/log.c 2008-08-02 19:25:17.000000000 +0200 +++ new/rsync-3.0.4/log.c 2008-08-17 18:25:34.000000000 +0200 @@ -85,7 +85,7 @@ { RERR_SIGNAL , "received SIGINT, SIGTERM, or SIGHUP" }, { RERR_WAITCHILD , "waitpid() failed" }, { RERR_MALLOC , "error allocating core memory buffers" }, - { RERR_PARTIAL , "some files could not be transferred" }, + { RERR_PARTIAL , "some files/attrs were not transferred (see previous errors)" }, { RERR_VANISHED , "some files vanished before they could be transferred" }, { RERR_TIMEOUT , "timeout in data send/receive" }, { RERR_CONTIMEOUT , "timeout waiting for daemon connection" }, diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/main.c new/rsync-3.0.4/main.c --- old/rsync-3.0.4pre2/main.c 2008-08-02 18:03:49.000000000 +0200 +++ new/rsync-3.0.4/main.c 2008-08-31 18:51:29.000000000 +0200 @@ -63,11 +63,8 @@ extern int read_batch; extern int write_batch; extern int batch_fd; -extern int flist_eof; extern int filesfrom_fd; -extern int delete_during; extern int connect_timeout; -extern int check_for_io_err; extern pid_t cleanup_child_pid; extern unsigned int module_dirlen; extern struct stats stats; @@ -762,8 +759,6 @@ exit_cleanup(RERR_IPC); } - check_for_io_err = inc_recurse && delete_during && !flist_eof; - if (pid == 0) { close(error_pipe[0]); if (f_in != f_out) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/NEWS new/rsync-3.0.4/NEWS --- old/rsync-3.0.4pre2/NEWS 2008-08-02 19:25:17.000000000 +0200 +++ new/rsync-3.0.4/NEWS 2008-09-06 18:32:26.000000000 +0200 @@ -1,4 +1,4 @@ -NEWS for rsync 3.0.4 (UNRELEASED) +NEWS for rsync 3.0.4 (6 Sep 2008) Protocol: 30 (unchanged) Changes since 3.0.3: @@ -23,22 +23,26 @@ incremental-recursion mode when --timeout is enabled. - The --iconv option now converts the content of a symlink too, instead - of leaving it in the wrong character-set. + of leaving it in the wrong character-set (requires 3.0.4 on both sides + of the transfer). - When using --iconv, if a filename fails to convert on the receiving side, - this no longer interferes with deletions in the root-dir of the transfer. + this no longer makes deletions in the root-dir of the transfer fail + silently (the user now gets a warning about deletions being disabled + due to IO error as long as --ignore-errors was not specified). - When using --iconv, if a server-side receiver can't convert a filename, - it now outputs the name back to the client without mangling the charset. - - - Fixed a bug where --delete-during could delete in a directory before it - noticed that the sending side sent an I/O error for that directory. + the error message sent back to the client no longer mangles the name + with the wrong charset conversion. - Fixed a potential alignment issue in the IRIX ACL code when allocating the initial "struct acl" object. Also, cast mallocs to avoid warnings. - Changed some errors that were going to stdout to go to stderr. + - Made human_num() and human_dnum() able to output a negative number + (rather than outputting a cryptic string of punctuation). + ENHANCEMENTS: - Rsync will avoid sending an -e option to the server if an older protocol @@ -46,9 +50,15 @@ user specify the --protocol=29 option to access an overly-restrictive server that is rejecting the protocol-30 use of -e to the server. + - Improved the message output for an RERR_PARTIAL exit. + DEVELOPER RELATED: - The Makefile will not halt for just a timestamp change on the Makefile or the configure files, only for actual changes in content. - - Enhanced the release scripts to be able to handle a branch release. + - Changed some commands in the testsuite's xattrs.test that called "rsync" + instead of "$RSYNC". + + - Enhanced the release scripts to be able to handle a branch release and + to do even more consistency checks on the files. diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/OLDNEWS new/rsync-3.0.4/OLDNEWS --- old/rsync-3.0.4pre2/OLDNEWS 2008-07-30 17:33:35.000000000 +0200 +++ new/rsync-3.0.4/OLDNEWS 2008-09-06 18:32:26.000000000 +0200 @@ -2841,7 +2841,7 @@ Partial Protocol History RELEASE DATE VER. DATE OF COMMIT* PROTOCOL - ?? Aug 2008 3.0.4 30 + 06 Sep 2008 3.0.4 30 29 Jun 2008 3.0.3 30 08 Apr 2008 3.0.2 30 03 Apr 2008 3.0.1 30 diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/packaging/lsb/rsync.spec new/rsync-3.0.4/packaging/lsb/rsync.spec --- old/rsync-3.0.4pre2/packaging/lsb/rsync.spec 2008-08-02 23:06:31.000000000 +0200 +++ new/rsync-3.0.4/packaging/lsb/rsync.spec 2008-09-06 18:32:26.000000000 +0200 @@ -1,9 +1,9 @@ Summary: A fast, versatile, remote (and local) file-copying tool Name: rsync Version: 3.0.4 -%define fullversion %{version}pre2 -Release: 0.1.pre2 -%define srcdir src-previews +%define fullversion %{version} +Release: 1 +%define srcdir src Group: Applications/Internet Source0: http://rsync.samba.org/ftp/rsync/%{srcdir}/rsync-%{fullversion}.tar.gz #Source1: http://rsync.samba.org/ftp/rsync/%{srcdir}/rsync-patches-%{fullversion}.tar.gz @@ -66,8 +66,8 @@ %{_mandir}/man5/rsyncd.conf.5* %changelog -* Sat Aug 02 2008 Wayne Davison <wayned@samba.org> -Released 3.0.4pre2. +* Sat Sep 06 2008 Wayne Davison <wayned@samba.org> +Released 3.0.4. * Fri Mar 21 2008 Wayne Davison <wayned@samba.org> Added installation of /etc/xinetd.d/rsync file and some commented-out diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/proto.h new/rsync-3.0.4/proto.h --- old/rsync-3.0.4pre2/proto.h 2008-08-02 23:13:27.000000000 +0200 +++ new/rsync-3.0.4/proto.h 2008-09-06 18:33:01.000000000 +0200 @@ -155,7 +155,7 @@ int read_vstring(int f, char *buf, int bufsize); void read_sum_head(int f, struct sum_struct *sum); void write_sum_head(int f, struct sum_struct *sum); -void io_flush(int flush_it_all); +int io_flush(int flush_it_all); void write_shortint(int f, unsigned short x); void write_int(int f, int32 x); void write_varint(int f, int32 x); @@ -279,7 +279,7 @@ const char *fnamecmp, const char *partialptr, struct file_struct *file, int ok_to_set_time, int overwriting_basis); -struct file_list *flist_for_ndx(int ndx); +struct file_list *flist_for_ndx(int ndx, const char *fatal_error_loc); const char *who_am_i(void); void successful_send(int ndx); void send_files(int f_in, int f_out); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/rsync.1 new/rsync-3.0.4/rsync.1 --- old/rsync-3.0.4pre2/rsync.1 2008-08-02 23:13:28.000000000 +0200 +++ new/rsync-3.0.4/rsync.1 2008-09-06 18:33:02.000000000 +0200 @@ -1,4 +1,4 @@ -.TH "rsync" "1" "2 Aug 2008" "" "" +.TH "rsync" "1" "6 Sep 2008" "" "" .SH "NAME" rsync (em a fast, versatile, remote (and local) file-copying tool .SH "SYNOPSIS" @@ -3390,7 +3390,7 @@ .SH "VERSION" .PP -This man page is current for version 3.0.4pre2 of rsync. +This man page is current for version 3.0.4 of rsync. .PP .SH "INTERNAL OPTIONS" diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/rsync.c new/rsync-3.0.4/rsync.c --- old/rsync-3.0.4pre2/rsync.c 2008-08-02 18:03:49.000000000 +0200 +++ new/rsync-3.0.4/rsync.c 2008-08-31 18:51:29.000000000 +0200 @@ -48,8 +48,6 @@ extern int flist_eof; extern int keep_dirlinks; extern int make_backups; -extern int delete_during; -extern int check_for_io_err; extern struct file_list *cur_flist, *first_flist, *dir_flist; extern struct chmod_mode_struct *daemon_chmod_modes; #ifdef ICONV_OPTION @@ -255,19 +253,21 @@ while (1) { ndx = read_ndx(f_in); - if (ndx >= 0) { - if (check_for_io_err) { - /* Let generator know there was no I/O error. */ - send_msg_int(MSG_IO_ERROR, 0); - check_for_io_err = 0; - } + if (ndx >= 0) break; - } - check_for_io_err = 0; if (ndx == NDX_DONE) return ndx; - if (!inc_recurse || am_sender) - goto invalid_ndx; + if (!inc_recurse || am_sender) { + int last; + if (first_flist) + last = first_flist->prev->ndx_start + first_flist->prev->used - 1; + else + last = -1; + rprintf(FERROR, + "Invalid file index: %d (%d - %d) [%s]\n", + ndx, NDX_DONE, last, who_am_i()); + exit_cleanup(RERR_PROTOCOL); + } if (ndx == NDX_FLIST_EOF) { flist_eof = 1; send_msg(MSG_FLIST_EOF, "", 0, 0); @@ -277,9 +277,10 @@ if (ndx < 0 || ndx >= dir_flist->used) { ndx = NDX_FLIST_OFFSET - ndx; rprintf(FERROR, - "[%s] Invalid dir index: %d (%d - %d)\n", - who_am_i(), ndx, NDX_FLIST_OFFSET, - NDX_FLIST_OFFSET - dir_flist->used + 1); + "Invalid dir index: %d (%d - %d) [%s]\n", + ndx, NDX_FLIST_OFFSET, + NDX_FLIST_OFFSET - dir_flist->used + 1, + who_am_i()); exit_cleanup(RERR_PROTOCOL); } @@ -295,10 +296,6 @@ flist->parent_ndx = ndx; stop_flist_forward(); verbose = save_verbose; - /* If the sender is going to send us an MSG_IO_ERROR value, it - * will always be the very next message following a file list. */ - if (delete_during) - check_for_io_err = 1; } iflags = protocol_version >= 29 ? read_shortint(f_in) @@ -312,17 +309,7 @@ goto read_loop; } - if (!(flist = flist_for_ndx(ndx))) { - int start, used; - invalid_ndx: - start = first_flist ? first_flist->ndx_start : 0; - used = first_flist ? first_flist->used : 0; - rprintf(FERROR, - "Invalid file index: %d (%d - %d) with iflags %x [%s]\n", - ndx, start - 1, start + used -1, iflags, who_am_i()); - exit_cleanup(RERR_PROTOCOL); - } - cur_flist = flist; + cur_flist = flist_for_ndx(ndx, "read_ndx_and_attrs"); if (iflags & ITEM_BASIS_TYPE_FOLLOWS) fnamecmp_type = read_byte(f_in); @@ -623,23 +610,40 @@ return 1; } -struct file_list *flist_for_ndx(int ndx) +struct file_list *flist_for_ndx(int ndx, const char *fatal_error_loc) { struct file_list *flist = cur_flist; if (!flist && !(flist = first_flist)) - return NULL; + goto not_found; while (ndx < flist->ndx_start-1) { if (flist == first_flist) - return NULL; + goto not_found; flist = flist->prev; } while (ndx >= flist->ndx_start + flist->used) { if (!(flist = flist->next)) - return NULL; + goto not_found; } return flist; + + not_found: + if (fatal_error_loc) { + int first, last; + if (first_flist) { + first = first_flist->ndx_start - 1; + last = first_flist->prev->ndx_start + first_flist->prev->used - 1; + } else { + first = 0; + last = -1; + } + rprintf(FERROR, + "File-list index %d not in %d - %d (%s) [%s]\n", + ndx, first, last, fatal_error_loc, who_am_i()); + exit_cleanup(RERR_PROTOCOL); + } + return NULL; } const char *who_am_i(void) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/rsyncd.conf.5 new/rsync-3.0.4/rsyncd.conf.5 --- old/rsync-3.0.4pre2/rsyncd.conf.5 2008-08-02 23:13:28.000000000 +0200 +++ new/rsync-3.0.4/rsyncd.conf.5 2008-09-06 18:33:03.000000000 +0200 @@ -1,4 +1,4 @@ -.TH "rsyncd.conf" "5" "2 Aug 2008" "" "" +.TH "rsyncd.conf" "5" "6 Sep 2008" "" "" .SH "NAME" rsyncd.conf (em configuration file for rsync in daemon mode .SH "SYNOPSIS" @@ -822,7 +822,7 @@ .SH "VERSION" .PP -This man page is current for version 3.0.4pre2 of rsync. +This man page is current for version 3.0.4 of rsync. .PP .SH "CREDITS" diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/rsyncd.conf.yo new/rsync-3.0.4/rsyncd.conf.yo --- old/rsync-3.0.4pre2/rsyncd.conf.yo 2008-08-02 23:06:31.000000000 +0200 +++ new/rsync-3.0.4/rsyncd.conf.yo 2008-09-06 18:32:26.000000000 +0200 @@ -1,5 +1,5 @@ mailto(rsync-bugs@samba.org) -manpage(rsyncd.conf)(5)(2 Aug 2008)()() +manpage(rsyncd.conf)(5)(6 Sep 2008)()() manpagename(rsyncd.conf)(configuration file for rsync in daemon mode) manpagesynopsis() @@ -700,7 +700,7 @@ manpagesection(VERSION) -This man page is current for version 3.0.4pre2 of rsync. +This man page is current for version 3.0.4 of rsync. manpagesection(CREDITS) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/rsync.yo new/rsync-3.0.4/rsync.yo --- old/rsync-3.0.4pre2/rsync.yo 2008-08-02 23:06:31.000000000 +0200 +++ new/rsync-3.0.4/rsync.yo 2008-09-06 18:32:26.000000000 +0200 @@ -1,5 +1,5 @@ mailto(rsync-bugs@samba.org) -manpage(rsync)(1)(2 Aug 2008)()() +manpage(rsync)(1)(6 Sep 2008)()() manpagename(rsync)(a fast, versatile, remote (and local) file-copying tool) manpagesynopsis() @@ -2894,7 +2894,7 @@ manpagesection(VERSION) -This man page is current for version 3.0.4pre2 of rsync. +This man page is current for version 3.0.4 of rsync. manpagesection(INTERNAL OPTIONS) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/sender.c new/rsync-3.0.4/sender.c --- old/rsync-3.0.4pre2/sender.c 2008-07-31 16:57:55.000000000 +0200 +++ new/rsync-3.0.4/sender.c 2008-08-14 16:32:18.000000000 +0200 @@ -127,13 +127,7 @@ if (!remove_source_files) return; - if (!(flist = flist_for_ndx(ndx))) { - rprintf(FERROR, - "INTERNAL ERROR: unable to find flist for item %d\n", - ndx); - return; - } - + flist = flist_for_ndx(ndx, "successful_send"); file = flist->files[ndx - flist->ndx_start]; if (!change_pathname(file, NULL, 0)) return; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/testsuite/xattrs.test new/rsync-3.0.4/testsuite/xattrs.test --- old/rsync-3.0.4pre2/testsuite/xattrs.test 2008-07-24 16:57:57.000000000 +0200 +++ new/rsync-3.0.4/testsuite/xattrs.test 2008-09-03 21:14:13.000000000 +0200 @@ -120,10 +120,10 @@ cd "$fromdir" rm -rf "$todir" "$chkdir" -rsync -aX file1 file2 -rsync -aX file1 file2 ../chk/ -rsync -aX --del ../chk/ . -rsync -aX file1 ../lnk/ +$RSYNC -aX file1 file2 +$RSYNC -aX file1 file2 ../chk/ +$RSYNC -aX --del ../chk/ . +$RSYNC -aX file1 ../lnk/ xls file1 file2 >"$scratchdir/xattrs.txt" @@ -136,7 +136,7 @@ rm "$todir/file2" echo extra >file1 -rsync -aX . ../chk/ +$RSYNC -aX . ../chk/ checkit "$RSYNC -aiiX . ../to" "$chkdir" "$todir" diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/util.c new/rsync-3.0.4/util.c --- old/rsync-3.0.4pre2/util.c 2008-08-02 03:00:18.000000000 +0200 +++ new/rsync-3.0.4/util.c 2008-09-01 22:25:41.000000000 +0200 @@ -1193,6 +1193,28 @@ return (depth < 0); } +#define HUMANIFY(mult) \ + do { \ + if (num >= mult || num <= -mult) { \ + double dnum = (double)num / mult; \ + char units; \ + if (num < 0) \ + dnum = -dnum; \ + if (dnum < mult) \ + units = 'K'; \ + else if ((dnum /= mult) < mult) \ + units = 'M'; \ + else { \ + dnum /= mult; \ + units = 'G'; \ + } \ + if (num < 0) \ + dnum = -dnum; \ + snprintf(bufs[n], sizeof bufs[0], "%.2f%c", dnum, units); \ + return bufs[n]; \ + } \ + } while (0) + /* Return the int64 number as a string. If the --human-readable option was * specified, we may output the number in K, M, or G units. We can return * up to 4 buffers at a time. */ @@ -1201,27 +1223,15 @@ static char bufs[4][128]; /* more than enough room */ static unsigned int n; char *s; + int negated; n = (n + 1) % (sizeof bufs / sizeof bufs[0]); if (human_readable) { - char units = '\0'; - int mult = human_readable == 1 ? 1000 : 1024; - double dnum = 0; - if (num > mult*mult*mult) { - dnum = (double)num / (mult*mult*mult); - units = 'G'; - } else if (num > mult*mult) { - dnum = (double)num / (mult*mult); - units = 'M'; - } else if (num > mult) { - dnum = (double)num / mult; - units = 'K'; - } - if (units) { - snprintf(bufs[n], sizeof bufs[0], "%.2f%c", dnum, units); - return bufs[n]; - } + if (human_readable == 1) + HUMANIFY(1000); + else + HUMANIFY(1024); } s = bufs[n] + sizeof bufs[0] - 1; @@ -1229,10 +1239,23 @@ if (!num) *--s = '0'; + if (num < 0) { + /* A maximum-size negated number can't fit as a positive, + * so do one digit in negated form to start us off. */ + *--s = (char)(-(num % 10)) + '0'; + num = -(num / 10); + negated = 1; + } else + negated = 0; + while (num) { *--s = (char)(num % 10) + '0'; num /= 10; } + + if (negated) + *--s = '-'; + return s; } @@ -1245,8 +1268,8 @@ int len = strlen(buf); if (isDigit(buf + len - 1)) { /* There's extra room in buf prior to the start of the num. */ - buf -= decimal_digits + 1; - snprintf(buf, len + decimal_digits + 2, "%.*f", decimal_digits, dnum); + buf -= decimal_digits + 2; + snprintf(buf, len + decimal_digits + 3, "%.*f", decimal_digits, dnum); } return buf; } ++++++ rsync-patches-3.0.4pre2.tar.bz2 -> rsync-patches-3.0.4.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/atimes.diff new/rsync-3.0.4/patches/atimes.diff --- old/rsync-3.0.4pre2/patches/atimes.diff 2008-08-02 23:13:34.000000000 +0200 +++ new/rsync-3.0.4/patches/atimes.diff 2008-09-06 18:33:10.000000000 +0200 @@ -131,7 +131,7 @@ extern int verbose; extern int dry_run; -@@ -646,6 +647,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -645,6 +646,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre : iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !(iflags & ITEM_MATCHED) && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname)) iflags |= ITEM_REPORT_TIME; @@ -141,7 +141,7 @@ #if !defined HAVE_LCHMOD && !defined HAVE_SETATTRLIST if (S_ISLNK(file->mode)) { ; -@@ -1016,6 +1020,8 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, +@@ -1015,6 +1019,8 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, if (link_dest) { if (!hard_link_one(file, fname, cmpbuf, 1)) goto try_a_copy; @@ -150,7 +150,7 @@ if (preserve_hard_links && F_IS_HLINKED(file)) finish_hard_link(file, fname, ndx, &sxp->st, itemizing, code, j); if (!maybe_ATTRS_REPORT && (verbose > 1 || stdout_format_has_i > 1)) { -@@ -1201,6 +1207,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx, +@@ -1200,6 +1206,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx, static void list_file_entry(struct file_struct *f) { char permbuf[PERMSTRING_SIZE]; @@ -158,7 +158,7 @@ double len; if (!F_IS_ACTIVE(f)) { -@@ -1215,14 +1222,16 @@ static void list_file_entry(struct file_struct *f) +@@ -1214,14 +1221,16 @@ static void list_file_entry(struct file_struct *f) #ifdef SUPPORT_LINKS if (preserve_links && S_ISLNK(f->mode)) { @@ -177,7 +177,7 @@ f_name(f, NULL)); } } -@@ -2057,7 +2066,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx) +@@ -2056,7 +2065,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx) STRUCT_STAT st; if (link_stat(fname, &st, 0) == 0 && cmp_time(st.st_mtime, file->modtime) != 0) @@ -272,7 +272,7 @@ diff --git a/rsync.c b/rsync.c --- a/rsync.c +++ b/rsync.c -@@ -393,6 +393,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -380,6 +380,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, int updated = 0; stat_x sx2; int change_uid, change_gid; @@ -280,7 +280,7 @@ mode_t new_mode = file->mode; int inherit; -@@ -436,20 +437,38 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -423,20 +424,38 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, set_xattr(fname, file, fnamecmp, sxp); #endif @@ -323,7 +323,7 @@ } change_uid = am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file); -@@ -583,7 +602,7 @@ int finish_transfer(const char *fname, const char *fnametmp, +@@ -570,7 +589,7 @@ int finish_transfer(const char *fname, const char *fnametmp, /* Change permissions before putting the file into place. */ set_file_attrs(fnametmp, file, NULL, fnamecmp, @@ -332,7 +332,7 @@ /* move tmp file over real file */ if (verbose > 2) -@@ -610,7 +629,7 @@ int finish_transfer(const char *fname, const char *fnametmp, +@@ -597,7 +616,7 @@ int finish_transfer(const char *fname, const char *fnametmp, do_set_file_attrs: set_file_attrs(fnametmp, file, NULL, fnamecmp, diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/backup-dir-dels.diff new/rsync-3.0.4/patches/backup-dir-dels.diff --- old/rsync-3.0.4pre2/patches/backup-dir-dels.diff 2008-08-02 23:13:36.000000000 +0200 +++ new/rsync-3.0.4/patches/backup-dir-dels.diff 2008-09-06 18:33:13.000000000 +0200 @@ -111,7 +111,7 @@ diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -97,6 +97,9 @@ extern uid_t our_uid; +@@ -96,6 +96,9 @@ extern uid_t our_uid; extern char *backup_dir; extern char *backup_suffix; extern int backup_suffix_len; @@ -121,7 +121,7 @@ extern struct file_list *cur_flist, *first_flist, *dir_flist; extern struct filter_list_struct daemon_filter_list; -@@ -143,10 +146,15 @@ static void handle_skipped_hlink(struct file_struct *file, int itemizing, +@@ -142,10 +145,15 @@ static void handle_skipped_hlink(struct file_struct *file, int itemizing, enum logcode code, int f_out); #endif @@ -138,7 +138,7 @@ } /* Delete a file or directory. If DEL_RECURSE is set in the flags, this will -@@ -194,9 +202,9 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) +@@ -193,9 +201,9 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) if (S_ISDIR(mode)) { what = "rmdir"; ok = do_rmdir(fbuf) == 0; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/catch_crash_signals.diff new/rsync-3.0.4/patches/catch_crash_signals.diff --- old/rsync-3.0.4pre2/patches/catch_crash_signals.diff 2008-08-02 23:13:37.000000000 +0200 +++ new/rsync-3.0.4/patches/catch_crash_signals.diff 2008-09-06 18:33:14.000000000 +0200 @@ -47,11 +47,11 @@ + { RERR_WECRASHED , "rsync caught a CRASH-causing signal" }, { RERR_WAITCHILD , "waitpid() failed" }, { RERR_MALLOC , "error allocating core memory buffers" }, - { RERR_PARTIAL , "some files could not be transferred" }, + { RERR_PARTIAL , "some files/attrs were not transferred (see previous errors)" }, diff --git a/main.c b/main.c --- a/main.c +++ b/main.c -@@ -166,8 +166,11 @@ static void wait_process_with_flush(pid_t pid, int *exit_code_ptr) +@@ -163,8 +163,11 @@ static void wait_process_with_flush(pid_t pid, int *exit_code_ptr) *exit_code_ptr = RERR_TERMINATED; else *exit_code_ptr = RERR_WAITCHILD; @@ -64,7 +64,7 @@ } /* This function gets called from all 3 processes. We want the client side -@@ -1320,6 +1323,14 @@ RETSIGTYPE remember_children(UNUSED(int val)) +@@ -1315,6 +1318,14 @@ RETSIGTYPE remember_children(UNUSED(int val)) break; } } @@ -79,7 +79,7 @@ } #endif #ifndef HAVE_SIGACTION -@@ -1378,6 +1389,12 @@ static RETSIGTYPE rsync_panic_handler(UNUSED(int whatsig)) +@@ -1373,6 +1384,12 @@ static RETSIGTYPE rsync_panic_handler(UNUSED(int whatsig)) } #endif @@ -92,7 +92,7 @@ int main(int argc,char *argv[]) { -@@ -1400,6 +1417,11 @@ int main(int argc,char *argv[]) +@@ -1395,6 +1412,11 @@ int main(int argc,char *argv[]) SIGACTMASK(SIGFPE, rsync_panic_handler); SIGACTMASK(SIGABRT, rsync_panic_handler); SIGACTMASK(SIGBUS, rsync_panic_handler); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/checksum-reading.diff new/rsync-3.0.4/patches/checksum-reading.diff --- old/rsync-3.0.4pre2/patches/checksum-reading.diff 2008-08-02 23:13:40.000000000 +0200 +++ new/rsync-3.0.4/patches/checksum-reading.diff 2008-09-06 18:33:18.000000000 +0200 @@ -459,7 +459,7 @@ extern int remove_source_files; extern int delay_updates; extern int update_only; -@@ -713,7 +714,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -712,7 +713,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre /* Perform our quick-check heuristic for determining if a file is unchanged. */ @@ -468,7 +468,7 @@ { if (st->st_size != F_LENGTH(file)) return 0; -@@ -722,7 +723,10 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) +@@ -721,7 +722,10 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) of the file time to determine whether to sync */ if (always_checksum > 0 && S_ISREG(st->st_mode)) { char sum[MAX_DIGEST_LEN]; @@ -480,7 +480,7 @@ return memcmp(sum, F_SUM(file), checksum_len) == 0; } -@@ -986,7 +990,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, +@@ -985,7 +989,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, match_level = 1; /* FALL THROUGH */ case 1: @@ -489,7 +489,7 @@ continue; best_match = j; match_level = 2; -@@ -1259,7 +1263,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1258,7 +1262,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, * --ignore-non-existing, daemon exclude, or mkdir failure. */ static struct file_struct *skip_dir = NULL; static struct file_list *fuzzy_dirlist = NULL; @@ -498,7 +498,7 @@ struct file_struct *fuzzy_file = NULL; int fd = -1, f_copy = -1; stat_x sx, real_sx; -@@ -1348,8 +1352,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1347,8 +1351,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, flist_free(fuzzy_dirlist); fuzzy_dirlist = NULL; } @@ -509,7 +509,7 @@ #ifdef SUPPORT_ACLS if (!preserve_perms) dflt_perms = default_perms_for_dir(dn); -@@ -1357,10 +1361,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1356,10 +1360,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, } parent_dirname = dn; @@ -529,7 +529,7 @@ } statret = link_stat(fname, &sx.st, keep_dirlinks && is_dir); -@@ -1794,7 +1803,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1793,7 +1802,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, ; else if (fnamecmp_type == FNAMECMP_FUZZY) ; @@ -541,7 +541,7 @@ diff --git a/hlink.c b/hlink.c --- a/hlink.c +++ b/hlink.c -@@ -385,7 +385,7 @@ int hard_link_check(struct file_struct *file, int ndx, const char *fname, +@@ -386,7 +386,7 @@ int hard_link_check(struct file_struct *file, int ndx, const char *fname, } break; } diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/checksum-updating.diff new/rsync-3.0.4/patches/checksum-updating.diff --- old/rsync-3.0.4pre2/patches/checksum-updating.diff 2008-08-02 23:13:42.000000000 +0200 +++ new/rsync-3.0.4/patches/checksum-updating.diff 2008-09-06 18:33:19.000000000 +0200 @@ -446,7 +446,7 @@ diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -115,6 +115,7 @@ static int dir_tweaking; +@@ -114,6 +114,7 @@ static int dir_tweaking; static int symlink_timeset_failed_flags; static int need_retouch_dir_times; static int need_retouch_dir_perms; @@ -454,7 +454,7 @@ static const char *solo_file = NULL; /* For calling delete_item() and delete_dir_contents(). */ -@@ -724,7 +725,7 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st, int slot +@@ -723,7 +724,7 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st, int slot if (always_checksum > 0 && S_ISREG(st->st_mode)) { char sum[MAX_DIGEST_LEN]; if (checksum_files && slot >= 0) @@ -463,7 +463,7 @@ else file_checksum(fn, st->st_size, sum); return memcmp(sum, F_SUM(file), checksum_len) == 0; -@@ -1367,7 +1368,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1366,7 +1367,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, fuzzy_dirlist = get_dirlist(fnamecmpbuf, -1, 1); } if (checksum_files) { @@ -473,7 +473,7 @@ } need_new_dirscan = 0; } -@@ -1517,6 +1519,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1516,6 +1518,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, else change_local_filter_dir(fname, strlen(fname), F_DEPTH(file)); } @@ -481,7 +481,7 @@ goto cleanup; } -@@ -1809,6 +1812,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1808,6 +1811,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, handle_partial_dir(partialptr, PDIR_DELETE); } set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT); @@ -490,7 +490,7 @@ if (itemizing) itemize(fnamecmp, file, ndx, statret, &sx, 0, 0, NULL); #ifdef SUPPORT_HARD_LINKS -@@ -2255,6 +2260,7 @@ void generate_files(int f_out, const char *local_name) +@@ -2249,6 +2254,7 @@ void generate_files(int f_out, const char *local_name) } else change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp)); } @@ -498,7 +498,7 @@ } for (i = cur_flist->low; i <= cur_flist->high; i++) { struct file_struct *file = cur_flist->sorted[i]; -@@ -2338,6 +2344,9 @@ void generate_files(int f_out, const char *local_name) +@@ -2332,6 +2338,9 @@ void generate_files(int f_out, const char *local_name) wait_for_receiver(); } @@ -519,7 +519,7 @@ extern int protocol_version; extern int remove_source_files; extern int preserve_hard_links; -@@ -206,6 +207,9 @@ static void got_flist_entry_status(enum festatus status, const char *buf) +@@ -203,6 +204,9 @@ static void got_flist_entry_status(enum festatus status, const char *buf) flist_ndx_push(&hlink_list, ndx); flist->in_progress++; } diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/checksum-xattr.diff new/rsync-3.0.4/patches/checksum-xattr.diff --- old/rsync-3.0.4pre2/patches/checksum-xattr.diff 2008-08-02 23:13:45.000000000 +0200 +++ new/rsync-3.0.4/patches/checksum-xattr.diff 2008-09-06 18:33:22.000000000 +0200 @@ -24,7 +24,7 @@ diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -722,7 +722,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) +@@ -721,7 +721,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) of the file time to determine whether to sync */ if (always_checksum > 0 && S_ISREG(st->st_mode)) { char sum[MAX_DIGEST_LEN]; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/copy-devices.diff new/rsync-3.0.4/patches/copy-devices.diff --- old/rsync-3.0.4pre2/patches/copy-devices.diff 2008-08-02 23:13:46.000000000 +0200 +++ new/rsync-3.0.4/patches/copy-devices.diff 2008-09-06 18:33:24.000000000 +0200 @@ -19,7 +19,7 @@ extern int preserve_specials; extern int preserve_hard_links; extern int preserve_executability; -@@ -1689,7 +1690,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1688,7 +1689,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, goto cleanup; } @@ -76,7 +76,7 @@ extern int am_root; extern int am_server; extern int am_sender; -@@ -339,7 +340,8 @@ int read_ndx_and_attrs(int f_in, int *iflag_ptr, uchar *type_ptr, +@@ -326,7 +327,8 @@ int read_ndx_and_attrs(int f_in, int *iflag_ptr, uchar *type_ptr, if (iflags & ITEM_TRANSFER) { int i = ndx - cur_flist->ndx_start; @@ -89,7 +89,7 @@ diff --git a/sender.c b/sender.c --- a/sender.c +++ b/sender.c -@@ -315,6 +315,20 @@ void send_files(int f_in, int f_out) +@@ -309,6 +309,20 @@ void send_files(int f_in, int f_out) exit_cleanup(RERR_PROTOCOL); } diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/crtimes.diff new/rsync-3.0.4/patches/crtimes.diff --- old/rsync-3.0.4pre2/patches/crtimes.diff 2008-08-02 23:13:54.000000000 +0200 +++ new/rsync-3.0.4/patches/crtimes.diff 2008-09-06 18:33:33.000000000 +0200 @@ -146,7 +146,7 @@ extern int preserve_hard_links; extern int preserve_executability; extern int preserve_fileflags; -@@ -621,6 +623,13 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) +@@ -620,6 +622,13 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) if (gid_ndx && !(file->flags & FLAG_SKIP_GROUP) && sxp->st.st_gid != (gid_t)F_GROUP(file)) return 0; @@ -160,7 +160,7 @@ #ifdef SUPPORT_ACLS if (preserve_acls && !S_ISLNK(file->mode)) { if (!ACL_READY(*sxp)) -@@ -664,6 +673,12 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -663,6 +672,12 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre : iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !(iflags & ITEM_MATCHED) && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname)) iflags |= ITEM_REPORT_TIME; @@ -173,7 +173,7 @@ #if !defined HAVE_LCHMOD && !defined HAVE_SETATTRLIST if (S_ISLNK(file->mode)) { ; -@@ -1224,6 +1239,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx, +@@ -1223,6 +1238,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx, static void list_file_entry(struct file_struct *f) { char permbuf[PERMSTRING_SIZE]; @@ -181,7 +181,7 @@ double len; if (!F_IS_ACTIVE(f)) { -@@ -1238,14 +1254,16 @@ static void list_file_entry(struct file_struct *f) +@@ -1237,14 +1253,16 @@ static void list_file_entry(struct file_struct *f) #ifdef SUPPORT_LINKS if (preserve_links && S_ISLNK(f->mode)) { @@ -200,7 +200,7 @@ f_name(f, NULL)); } } -@@ -1337,6 +1355,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1336,6 +1354,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, return; } } @@ -294,7 +294,7 @@ diff --git a/rsync.c b/rsync.c --- a/rsync.c +++ b/rsync.c -@@ -485,6 +485,14 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -472,6 +472,14 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, else file->flags |= FLAG_TIME_FAILED; } @@ -309,7 +309,7 @@ change_uid = am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file); change_gid = gid_ndx && !(file->flags & FLAG_SKIP_GROUP) -@@ -632,7 +640,7 @@ int finish_transfer(const char *fname, const char *fnametmp, +@@ -619,7 +627,7 @@ int finish_transfer(const char *fname, const char *fnametmp, /* Change permissions before putting the file into place. */ set_file_attrs(fnametmp, file, NULL, fnamecmp, ATTRS_DELAY_IMMUTABLE @@ -318,7 +318,7 @@ /* move tmp file over real file */ if (verbose > 2) -@@ -663,7 +671,7 @@ int finish_transfer(const char *fname, const char *fnametmp, +@@ -650,7 +658,7 @@ int finish_transfer(const char *fname, const char *fnametmp, do_set_file_attrs: set_file_attrs(fnametmp, file, NULL, fnamecmp, diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/date-only.diff new/rsync-3.0.4/patches/date-only.diff --- old/rsync-3.0.4pre2/patches/date-only.diff 2008-08-02 23:14:03.000000000 +0200 +++ new/rsync-3.0.4/patches/date-only.diff 2008-09-06 18:33:42.000000000 +0200 @@ -25,7 +25,7 @@ extern int size_only; extern OFF_T max_size; extern OFF_T min_size; -@@ -715,6 +716,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -714,6 +715,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre /* Perform our quick-check heuristic for determining if a file is unchanged. */ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) { diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/db.diff new/rsync-3.0.4/patches/db.diff --- old/rsync-3.0.4pre2/patches/db.diff 2008-08-02 23:14:11.000000000 +0200 +++ new/rsync-3.0.4/patches/db.diff 2008-09-06 18:33:50.000000000 +0200 @@ -809,7 +809,7 @@ extern int append_mode; extern int make_backups; extern int csum_length; -@@ -722,7 +723,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) +@@ -721,7 +722,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) of the file time to determine whether to sync */ if (always_checksum > 0 && S_ISREG(st->st_mode)) { char sum[MAX_DIGEST_LEN]; @@ -819,7 +819,7 @@ return memcmp(sum, F_SUM(file), checksum_len) == 0; } -@@ -2205,6 +2207,9 @@ void generate_files(int f_out, const char *local_name) +@@ -2203,6 +2205,9 @@ void generate_files(int f_out, const char *local_name) : "enabled"); } @@ -875,7 +875,7 @@ extern int file_total; extern int recurse; extern int xfer_dirs; -@@ -76,6 +77,7 @@ extern char *partial_dir; +@@ -73,6 +74,7 @@ extern char *partial_dir; extern char *dest_option; extern char *basis_dir[]; extern char *rsync_path; @@ -883,7 +883,7 @@ extern char *shell_cmd; extern char *batch_name; extern char *password_file; -@@ -1496,6 +1498,9 @@ int main(int argc,char *argv[]) +@@ -1491,6 +1493,9 @@ int main(int argc,char *argv[]) exit_cleanup(RERR_SYNTAX); } diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/detect-renamed.diff new/rsync-3.0.4/patches/detect-renamed.diff --- old/rsync-3.0.4pre2/patches/detect-renamed.diff 2008-08-02 23:14:17.000000000 +0200 +++ new/rsync-3.0.4/patches/detect-renamed.diff 2008-09-06 18:33:56.000000000 +0200 @@ -154,7 +154,7 @@ extern int whole_file; extern int list_only; extern int read_batch; -@@ -99,6 +100,7 @@ extern char *backup_suffix; +@@ -98,6 +99,7 @@ extern char *backup_suffix; extern int backup_suffix_len; extern struct file_list *cur_flist, *first_flist, *dir_flist; extern struct filter_list_struct daemon_filter_list; @@ -162,7 +162,7 @@ int ignore_perishable = 0; int non_perishable_cnt = 0; -@@ -106,6 +108,7 @@ int maybe_ATTRS_REPORT = 0; +@@ -105,6 +107,7 @@ int maybe_ATTRS_REPORT = 0; static dev_t dev_zero; static int deletion_count = 0; /* used to implement --max-delete */ @@ -170,7 +170,7 @@ static int deldelay_size = 0, deldelay_cnt = 0; static char *deldelay_buf = NULL; static int deldelay_fd = -1; -@@ -116,7 +119,7 @@ static int need_retouch_dir_times; +@@ -115,7 +118,7 @@ static int need_retouch_dir_times; static int need_retouch_dir_perms; static const char *solo_file = NULL; @@ -179,7 +179,7 @@ #define DEL_NO_UID_WRITE (1<<0) /* file/dir has our uid w/o write perm */ #define DEL_RECURSE (1<<1) /* if dir, delete all contents */ #define DEL_DIR_IS_EMPTY (1<<2) /* internal delete_FUNCTIONS use only */ -@@ -125,6 +128,7 @@ static const char *solo_file = NULL; +@@ -124,6 +127,7 @@ static const char *solo_file = NULL; #define DEL_FOR_SYMLINK (1<<5) /* making room for a replacement symlink */ #define DEL_FOR_DEVICE (1<<6) /* making room for a replacement device */ #define DEL_FOR_SPECIAL (1<<7) /* making room for a replacement special */ @@ -187,7 +187,7 @@ #define DEL_MAKE_ROOM (DEL_FOR_FILE|DEL_FOR_DIR|DEL_FOR_SYMLINK|DEL_FOR_DEVICE|DEL_FOR_SPECIAL) -@@ -149,11 +153,121 @@ static int is_backup_file(char *fn) +@@ -148,11 +152,121 @@ static int is_backup_file(char *fn) return k > 0 && strcmp(fn+k, backup_suffix) == 0; } @@ -309,7 +309,7 @@ */ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) { -@@ -187,6 +301,8 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) +@@ -186,6 +300,8 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) goto check_ret; /* OK: try to delete the directory. */ } @@ -318,7 +318,7 @@ if (!(flags & DEL_MAKE_ROOM) && max_delete >= 0 && ++deletion_count > max_delete) return DR_AT_LIMIT; -@@ -242,6 +358,8 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) +@@ -241,6 +357,8 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) * its contents, otherwise just checks for content. Returns DR_SUCCESS or * DR_NOT_EMPTY. Note that fname must point to a MAXPATHLEN buffer! (The * buffer is used for recursion, but returned unchanged.) @@ -327,7 +327,7 @@ */ static enum delret delete_dir_contents(char *fname, uint16 flags) { -@@ -261,7 +379,9 @@ static enum delret delete_dir_contents(char *fname, uint16 flags) +@@ -260,7 +378,9 @@ static enum delret delete_dir_contents(char *fname, uint16 flags) save_filters = push_local_filters(fname, dlen); non_perishable_cnt = 0; @@ -337,7 +337,7 @@ ret = non_perishable_cnt ? DR_NOT_EMPTY : DR_SUCCESS; if (!dirlist->used) -@@ -301,7 +421,8 @@ static enum delret delete_dir_contents(char *fname, uint16 flags) +@@ -300,7 +420,8 @@ static enum delret delete_dir_contents(char *fname, uint16 flags) if (S_ISDIR(fp->mode)) { if (delete_dir_contents(fname, flags | DEL_RECURSE) != DR_SUCCESS) ret = DR_NOT_EMPTY; @@ -347,7 +347,7 @@ if (delete_item(fname, fp->mode, flags) != DR_SUCCESS) ret = DR_NOT_EMPTY; } -@@ -466,13 +587,18 @@ static void do_delayed_deletions(char *delbuf) +@@ -465,13 +586,18 @@ static void do_delayed_deletions(char *delbuf) * all the --delete-WHEN options. Note that the fbuf pointer must point to a * MAXPATHLEN buffer with the name of the directory in it (the functions we * call will append names onto the end, but the old dir value will be restored @@ -370,7 +370,7 @@ int save_uid_ndx = uid_ndx; if (!fbuf) { -@@ -487,17 +613,22 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) +@@ -486,17 +612,22 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) maybe_send_keepalive(); if (io_error && !ignore_errors) { @@ -398,7 +398,7 @@ if (one_file_system) { if (file->flags & FLAG_TOP_DIR) filesystem_dev = *fs_dev; -@@ -510,6 +641,14 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) +@@ -509,6 +640,14 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) dirlist = get_dirlist(fbuf, dlen, 0); @@ -413,7 +413,7 @@ /* If an item in dirlist is not found in flist, delete it * from the filesystem. */ for (i = dirlist->used; i--; ) { -@@ -522,19 +661,28 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) +@@ -521,19 +660,28 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) f_name(fp, NULL)); continue; } @@ -446,7 +446,7 @@ flist_free(dirlist); if (!save_uid_ndx) { -@@ -572,9 +720,9 @@ static void do_delete_pass(void) +@@ -571,9 +719,9 @@ static void do_delete_pass(void) || !S_ISDIR(st.st_mode)) continue; @@ -458,7 +458,7 @@ if (do_progress && !am_server) rprintf(FINFO, " \r"); -@@ -1227,6 +1375,7 @@ static void list_file_entry(struct file_struct *f) +@@ -1226,6 +1374,7 @@ static void list_file_entry(struct file_struct *f) } } @@ -466,7 +466,7 @@ static int phase = 0; static int dflt_perms; -@@ -1503,9 +1652,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1502,9 +1651,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, } else if (delete_during && f_out != -1 && !phase && !(file->flags & FLAG_MISSING_DIR)) { @@ -482,7 +482,7 @@ change_local_filter_dir(fname, strlen(fname), F_DEPTH(file)); } goto cleanup; -@@ -1783,8 +1935,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1782,8 +1934,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, goto cleanup; } #endif @@ -498,7 +498,7 @@ rsyserr(FERROR_XFER, stat_errno, "recv_generator: failed to stat %s", full_fname(fname)); goto cleanup; -@@ -2186,6 +2344,12 @@ void generate_files(int f_out, const char *local_name) +@@ -2184,6 +2342,12 @@ void generate_files(int f_out, const char *local_name) if (verbose > 2) rprintf(FINFO, "generator starting pid=%ld\n", (long)getpid()); @@ -511,7 +511,7 @@ if (delete_before && !solo_file && cur_flist->used > 0) do_delete_pass(); if (delete_during == 2) { -@@ -2196,7 +2360,7 @@ void generate_files(int f_out, const char *local_name) +@@ -2194,7 +2358,7 @@ void generate_files(int f_out, const char *local_name) } do_progress = 0; @@ -520,16 +520,16 @@ whole_file = 0; if (verbose >= 2) { rprintf(FINFO, "delta-transmission %s\n", -@@ -2242,7 +2406,7 @@ void generate_files(int f_out, const char *local_name) - * error for this directory before we delete in it. */ - while (check_for_io_err && !cur_flist->next) - wait_for_receiver(); +@@ -2236,7 +2400,7 @@ void generate_files(int f_out, const char *local_name) + dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp)); + } else + dirdev = MAKEDEV(0, 0); - delete_in_dir(fbuf, fp, &dirdev); + delete_in_dir(fbuf, fp, &dirdev, 0); } else change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp)); } -@@ -2289,7 +2453,21 @@ void generate_files(int f_out, const char *local_name) +@@ -2283,7 +2447,21 @@ void generate_files(int f_out, const char *local_name) } while ((cur_flist = cur_flist->next) != NULL); if (delete_during) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/detect-renamed-lax.diff new/rsync-3.0.4/patches/detect-renamed-lax.diff --- old/rsync-3.0.4pre2/patches/detect-renamed-lax.diff 2008-08-02 23:14:19.000000000 +0200 +++ new/rsync-3.0.4/patches/detect-renamed-lax.diff 2008-09-06 18:33:59.000000000 +0200 @@ -23,7 +23,7 @@ diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -201,7 +201,9 @@ static int fattr_find(struct file_struct *f, char *fname) +@@ -200,7 +200,9 @@ static int fattr_find(struct file_struct *f, char *fname) continue; } } @@ -34,7 +34,7 @@ diff = u_strcmp(fmid->basename, f->basename); if (diff == 0) { good_match = mid; -@@ -1986,6 +1988,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1985,6 +1987,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, fnamecmp = partialptr; fnamecmp_type = FNAMECMP_PARTIAL_DIR; statret = 0; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/downdate.diff new/rsync-3.0.4/patches/downdate.diff --- old/rsync-3.0.4pre2/patches/downdate.diff 2008-08-02 23:14:21.000000000 +0200 +++ new/rsync-3.0.4/patches/downdate.diff 2008-09-06 18:34:01.000000000 +0200 @@ -18,7 +18,7 @@ extern int ignore_existing; extern int ignore_non_existing; extern int inplace; -@@ -1724,6 +1725,13 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1723,6 +1724,13 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, goto cleanup; } @@ -32,7 +32,7 @@ fnamecmp = fname; fnamecmp_type = FNAMECMP_FNAME; -@@ -2096,6 +2104,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo) +@@ -2094,6 +2102,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo) ignore_existing = -ignore_existing; ignore_non_existing = -ignore_non_existing; update_only = -update_only; @@ -40,7 +40,7 @@ always_checksum = -always_checksum; size_only = -size_only; append_mode = -append_mode; -@@ -2121,6 +2130,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo) +@@ -2119,6 +2128,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo) ignore_existing = -ignore_existing; ignore_non_existing = -ignore_non_existing; update_only = -update_only; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/drop-cache.diff new/rsync-3.0.4/patches/drop-cache.diff --- old/rsync-3.0.4pre2/patches/drop-cache.diff 2008-08-02 23:14:30.000000000 +0200 +++ new/rsync-3.0.4/patches/drop-cache.diff 2008-09-06 18:34:10.000000000 +0200 @@ -125,7 +125,7 @@ diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -116,6 +116,10 @@ static int need_retouch_dir_times; +@@ -115,6 +115,10 @@ static int need_retouch_dir_times; static int need_retouch_dir_perms; static const char *solo_file = NULL; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/fileflags.diff new/rsync-3.0.4/patches/fileflags.diff --- old/rsync-3.0.4pre2/patches/fileflags.diff 2008-08-02 23:13:52.000000000 +0200 +++ new/rsync-3.0.4/patches/fileflags.diff 2008-09-06 18:33:30.000000000 +0200 @@ -186,7 +186,7 @@ extern int uid_ndx; extern int gid_ndx; extern int delete_mode; -@@ -167,7 +169,7 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) +@@ -166,7 +168,7 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) } if (flags & DEL_NO_UID_WRITE) @@ -195,7 +195,7 @@ if (S_ISDIR(mode) && !(flags & DEL_DIR_IS_EMPTY)) { int save_uid_ndx = uid_ndx; -@@ -175,6 +177,13 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) +@@ -174,6 +176,13 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 flags) * delete_dir_contents() always calls us w/DEL_DIR_IS_EMPTY. */ if (!uid_ndx) uid_ndx = ++file_extra_cnt; @@ -209,7 +209,7 @@ ignore_perishable = 1; /* If DEL_RECURSE is not set, this just reports emptiness. */ ret = delete_dir_contents(fbuf, flags); -@@ -295,8 +304,12 @@ static enum delret delete_dir_contents(char *fname, uint16 flags) +@@ -294,8 +303,12 @@ static enum delret delete_dir_contents(char *fname, uint16 flags) } strlcpy(p, fp->basename, remainder); @@ -223,7 +223,7 @@ /* Save stack by recursing to ourself directly. */ if (S_ISDIR(fp->mode)) { if (delete_dir_contents(fname, flags | DEL_RECURSE) != DR_SUCCESS) -@@ -597,6 +610,11 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) +@@ -596,6 +609,11 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) && ((sxp->st.st_mode & 0111 ? 1 : 0) ^ (file->mode & 0111 ? 1 : 0))) return 0; @@ -235,7 +235,7 @@ if (am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file)) return 0; -@@ -662,6 +680,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -661,6 +679,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre if (gid_ndx && !(file->flags & FLAG_SKIP_GROUP) && sxp->st.st_gid != (gid_t)F_GROUP(file)) iflags |= ITEM_REPORT_GROUP; @@ -247,7 +247,7 @@ #ifdef SUPPORT_ACLS if (preserve_acls && !S_ISLNK(file->mode)) { if (!ACL_READY(*sxp)) -@@ -1440,6 +1463,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1439,6 +1462,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms, statret == 0); } @@ -258,7 +258,7 @@ if (statret != 0 && basis_dir[0] != NULL) { int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &sx, itemizing, code); -@@ -1480,10 +1507,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1479,10 +1506,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, /* We need to ensure that the dirs in the transfer have writable * permissions during the time we are putting files within them. * This is then fixed after the transfer is done. */ @@ -275,7 +275,7 @@ rsyserr(FERROR_XFER, errno, "failed to modify permissions on %s", full_fname(fname)); -@@ -1518,6 +1550,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1517,6 +1549,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms, exists); } @@ -286,7 +286,7 @@ #ifdef SUPPORT_HARD_LINKS if (preserve_hard_links && F_HLINK_NOT_FIRST(file) -@@ -2052,13 +2088,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx) +@@ -2051,13 +2087,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx) continue; fname = f_name(file, NULL); if (!(file->mode & S_IWUSR)) @@ -454,7 +454,7 @@ extern int preserve_executability; extern int preserve_times; extern int am_root; -@@ -387,6 +388,39 @@ mode_t dest_mode(mode_t flist_mode, mode_t stat_mode, int dflt_perms, +@@ -374,6 +375,39 @@ mode_t dest_mode(mode_t flist_mode, mode_t stat_mode, int dflt_perms, return new_mode; } @@ -494,7 +494,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, const char *fnamecmp, int flags) { -@@ -440,7 +474,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -427,7 +461,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, flags |= ATTRS_SKIP_MTIME; if (!(flags & ATTRS_SKIP_MTIME) && cmp_time(sxp->st.st_mtime, file->modtime) != 0) { @@ -503,7 +503,7 @@ if (ret < 0) { rsyserr(FERROR_XFER, errno, "failed to set times on %s", full_fname(fname)); -@@ -476,7 +510,8 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -463,7 +497,8 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, if (am_root >= 0) { if (do_lchown(fname, change_uid ? (uid_t)F_OWNER(file) : sxp->st.st_uid, @@ -513,7 +513,7 @@ /* We shouldn't have attempted to change uid * or gid unless have the privilege. */ rsyserr(FERROR_XFER, errno, "%s %s failed", -@@ -508,7 +543,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -495,7 +530,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, #ifdef HAVE_CHMOD if (!BITS_EQUAL(sxp->st.st_mode, new_mode, CHMOD_BITS)) { @@ -522,7 +522,7 @@ if (ret < 0) { rsyserr(FERROR_XFER, errno, "failed to set permissions on %s", -@@ -520,6 +555,19 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -507,6 +542,19 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, } #endif @@ -542,7 +542,7 @@ if (verbose > 1 && flags & ATTRS_REPORT) { if (updated) rprintf(FCLIENT, "%s\n", fname); -@@ -583,7 +631,8 @@ int finish_transfer(const char *fname, const char *fnametmp, +@@ -570,7 +618,8 @@ int finish_transfer(const char *fname, const char *fnametmp, /* Change permissions before putting the file into place. */ set_file_attrs(fnametmp, file, NULL, fnamecmp, @@ -552,7 +552,7 @@ /* move tmp file over real file */ if (verbose > 2) -@@ -602,6 +651,10 @@ int finish_transfer(const char *fname, const char *fnametmp, +@@ -589,6 +638,10 @@ int finish_transfer(const char *fname, const char *fnametmp, } if (ret == 0) { /* The file was moved into place (not copied), so it's done. */ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/link-by-hash.diff new/rsync-3.0.4/patches/link-by-hash.diff --- old/rsync-3.0.4pre2/patches/link-by-hash.diff 2008-08-02 23:14:40.000000000 +0200 +++ new/rsync-3.0.4/patches/link-by-hash.diff 2008-09-06 18:34:21.000000000 +0200 @@ -532,15 +532,15 @@ diff --git a/rsync.c b/rsync.c --- a/rsync.c +++ b/rsync.c -@@ -50,6 +50,7 @@ extern int keep_dirlinks; +@@ -48,6 +48,7 @@ extern int inplace; + extern int flist_eof; + extern int keep_dirlinks; extern int make_backups; - extern int delete_during; - extern int check_for_io_err; +extern char *link_by_hash_dir; extern struct file_list *cur_flist, *first_flist, *dir_flist; extern struct chmod_mode_struct *daemon_chmod_modes; #ifdef ICONV_OPTION -@@ -588,8 +589,15 @@ int finish_transfer(const char *fname, const char *fnametmp, +@@ -575,8 +576,15 @@ int finish_transfer(const char *fname, const char *fnametmp, /* move tmp file over real file */ if (verbose > 2) rprintf(FINFO, "renaming %s to %s\n", fnametmp, fname); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/log-checksum.diff new/rsync-3.0.4/patches/log-checksum.diff --- old/rsync-3.0.4pre2/patches/log-checksum.diff 2008-08-02 23:14:41.000000000 +0200 +++ new/rsync-3.0.4/patches/log-checksum.diff 2008-09-06 18:34:23.000000000 +0200 @@ -118,7 +118,7 @@ extern int remove_source_files; extern int need_messages_from_generator; extern int kluge_around_eof; -@@ -71,6 +72,8 @@ extern int check_for_io_err; +@@ -68,6 +69,8 @@ extern int connect_timeout; extern pid_t cleanup_child_pid; extern unsigned int module_dirlen; extern struct stats stats; @@ -127,7 +127,7 @@ extern char *filesfrom_host; extern char *partial_dir; extern char *dest_option; -@@ -88,6 +91,7 @@ int local_server = 0; +@@ -85,6 +88,7 @@ int local_server = 0; int daemon_over_rsh = 0; mode_t orig_umask = 0; int batch_gen_fd = -1; @@ -135,7 +135,7 @@ /* There's probably never more than at most 2 outstanding child processes, * but set it higher, just in case. */ -@@ -1008,6 +1012,12 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) +@@ -1003,6 +1007,12 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) if (am_sender) { keep_dirlinks = 0; /* Must be disabled on the sender. */ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/omit-dir-changes.diff new/rsync-3.0.4/patches/omit-dir-changes.diff --- old/rsync-3.0.4pre2/patches/omit-dir-changes.diff 2008-08-02 23:14:50.000000000 +0200 +++ new/rsync-3.0.4/patches/omit-dir-changes.diff 2008-09-06 18:34:33.000000000 +0200 @@ -18,7 +18,7 @@ extern int uid_ndx; extern int gid_ndx; extern int delete_mode; -@@ -628,6 +629,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -627,6 +628,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre const char *xname) { if (statret >= 0) { /* A from-dest-dir statret can == 1! */ @@ -26,7 +26,7 @@ int keep_time = !preserve_times ? 0 : S_ISDIR(file->mode) ? preserve_times > 1 : #if defined HAVE_LUTIMES && defined HAVE_UTIMES -@@ -657,10 +659,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -656,10 +658,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre } else if (preserve_executability && ((sxp->st.st_mode & 0111 ? 1 : 0) ^ (file->mode & 0111 ? 1 : 0))) iflags |= ITEM_REPORT_PERMS; @@ -41,7 +41,7 @@ iflags |= ITEM_REPORT_GROUP; #ifdef SUPPORT_ACLS if (preserve_acls && !S_ISLNK(file->mode)) { -@@ -1436,7 +1439,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1435,7 +1438,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, real_sx = sx; if (file->flags & FLAG_DIR_CREATED) statret = -1; @@ -106,7 +106,7 @@ extern int am_root; extern int am_server; extern int am_sender; -@@ -452,9 +453,11 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, +@@ -439,9 +440,11 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, file->flags |= FLAG_TIME_FAILED; } diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/slp.diff new/rsync-3.0.4/patches/slp.diff --- old/rsync-3.0.4pre2/patches/slp.diff 2008-08-02 23:15:17.000000000 +0200 +++ new/rsync-3.0.4/patches/slp.diff 2008-09-06 18:35:02.000000000 +0200 @@ -126,7 +126,7 @@ diff --git a/main.c b/main.c --- a/main.c +++ b/main.c -@@ -1126,6 +1126,18 @@ static int start_client(int argc, char *argv[]) +@@ -1121,6 +1121,18 @@ static int start_client(int argc, char *argv[]) if (!read_batch) { /* for read_batch, NO source is specified */ char *path = check_for_hostspec(argv[0], &shell_machine, &rsync_port); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/source-backup.diff new/rsync-3.0.4/patches/source-backup.diff --- old/rsync-3.0.4pre2/patches/source-backup.diff 2008-08-02 23:15:25.000000000 +0200 +++ new/rsync-3.0.4/patches/source-backup.diff 2008-09-06 18:35:10.000000000 +0200 @@ -90,7 +90,7 @@ if (!remove_source_files) return; -@@ -139,7 +141,11 @@ void successful_send(int ndx) +@@ -133,7 +135,11 @@ void successful_send(int ndx) return; f_name(file, fname); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/source-filter_dest-filter.diff new/rsync-3.0.4/patches/source-filter_dest-filter.diff --- old/rsync-3.0.4pre2/patches/source-filter_dest-filter.diff 2008-08-02 23:15:28.000000000 +0200 +++ new/rsync-3.0.4/patches/source-filter_dest-filter.diff 2008-09-06 18:35:13.000000000 +0200 @@ -41,7 +41,7 @@ extern int size_only; extern OFF_T max_size; extern OFF_T min_size; -@@ -715,7 +716,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -714,7 +715,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre /* Perform our quick-check heuristic for determining if a file is unchanged. */ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) { @@ -53,7 +53,7 @@ diff --git a/main.c b/main.c --- a/main.c +++ b/main.c -@@ -139,7 +139,7 @@ pid_t wait_process(pid_t pid, int *status_ptr, int flags) +@@ -136,7 +136,7 @@ pid_t wait_process(pid_t pid, int *status_ptr, int flags) } /* Wait for a process to exit, calling io_flush while waiting. */ @@ -387,7 +387,7 @@ extern struct stats stats; extern struct file_list *cur_flist, *first_flist, *dir_flist; -@@ -181,6 +182,26 @@ void send_files(int f_in, int f_out) +@@ -175,6 +176,26 @@ void send_files(int f_in, int f_out) enum logcode log_code = log_before_transfer ? FLOG : FINFO; int f_xfer = write_batch < 0 ? batch_fd : f_out; int ndx, j; @@ -414,7 +414,7 @@ if (verbose > 2) rprintf(FINFO, "send_files starting\n"); -@@ -285,6 +306,7 @@ void send_files(int f_in, int f_out) +@@ -279,6 +300,7 @@ void send_files(int f_in, int f_out) exit_cleanup(RERR_PROTOCOL); } @@ -422,7 +422,7 @@ fd = do_open(fname, O_RDONLY, 0); if (fd == -1) { if (errno == ENOENT) { -@@ -306,6 +328,33 @@ void send_files(int f_in, int f_out) +@@ -300,6 +322,33 @@ void send_files(int f_in, int f_out) continue; } @@ -456,7 +456,7 @@ /* map the local file */ if (do_fstat(fd, &st) != 0) { io_error |= IOERR_GENERAL; -@@ -356,6 +405,8 @@ void send_files(int f_in, int f_out) +@@ -350,6 +399,8 @@ void send_files(int f_in, int f_out) } } close(fd); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/rsync-3.0.4pre2/patches/time-limit.diff new/rsync-3.0.4/patches/time-limit.diff --- old/rsync-3.0.4pre2/patches/time-limit.diff 2008-08-02 23:15:33.000000000 +0200 +++ new/rsync-3.0.4/patches/time-limit.diff 2008-09-06 18:35:20.000000000 +0200 @@ -20,7 +20,7 @@ extern struct file_list *cur_flist; #ifdef ICONV_OPTION extern int filesfrom_convert; -@@ -222,16 +223,24 @@ static void check_timeout(void) +@@ -219,16 +220,24 @@ static void check_timeout(void) { time_t t; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org