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

Reply via email to