The branch, master has been updated via c117fa4b Create a get_device_size() helper function. from b040825b Improve the haproxy header docs.
https://git.samba.org/?p=rsync.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit c117fa4bf9976f3e5e284b87a2304398e4428208 Author: Wayne Davison <wa...@opencoder.net> Date: Thu Jun 11 16:08:15 2020 -0700 Create a get_device_size() helper function. ----------------------------------------------------------------------- Summary of changes: flist.c | 14 ++++++++++++++ receiver.c | 15 ++------------- 2 files changed, 16 insertions(+), 13 deletions(-) Changeset truncated at 500 lines: diff --git a/flist.c b/flist.c index 82a5d6a7..dbb0f921 100644 --- a/flist.c +++ b/flist.c @@ -1420,6 +1420,20 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, return file; } +OFF_T get_device_size(int fd, const char *fname) +{ + OFF_T off = lseek(fd, 0, SEEK_END); + + if (off == (OFF_T) -1) { + rsyserr(FERROR, errno, "failed to get device size via seek: %s", fname); + return 0; + } + if (lseek(fd, 0, SEEK_SET) != 0) + rsyserr(FERROR, errno, "failed to seek device back to start: %s", fname); + + return off; +} + /* Only called for temporary file_struct entries created by make_file(). */ void unmake_file(struct file_struct *file) { diff --git a/receiver.c b/receiver.c index e95f1786..8655e315 100644 --- a/receiver.c +++ b/receiver.c @@ -804,19 +804,8 @@ int recv_files(int f_in, int f_out, char *local_name) fd1 = -1; } - /* On Linux systems (at least), st_size is typically 0 for devices. - * If so, try to determine the actual device size. */ - if (fd1 != -1 && IS_DEVICE(st.st_mode) && st.st_size == 0) { - OFF_T off = lseek(fd1, 0, SEEK_END); - if (off == (OFF_T) -1) - rsyserr(FERROR, errno, "failed to seek to end of %s to determine size", fname); - else { - st.st_size = off; - off = lseek(fd1, 0, SEEK_SET); - if (off != 0) - rsyserr(FERROR, errno, "failed to seek back to beginning of %s to read it", fname); - } - } + if (fd1 != -1 && IS_DEVICE(st.st_mode) && st.st_size == 0) + st.st_size = get_device_size(fd1, fname); /* If we're not preserving permissions, change the file-list's * mode based on the local permissions and some heuristics. */ -- The rsync repository. _______________________________________________ rsync-cvs mailing list rsync-cvs@lists.samba.org https://lists.samba.org/mailman/listinfo/rsync-cvs