X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/f91e01d9a50b5731f04e01e2a98d61e9f95bca76..34fada30127ac9cb0ac3fe9f685f9901414bb0ec:/flist.c diff --git a/flist.c b/flist.c index 9f86521e..7ea494f8 100644 --- a/flist.c +++ b/flist.c @@ -293,6 +293,7 @@ static void set_filesystem(char *fname) STRUCT_STAT st; if (link_stat(fname, &st) != 0) return; + filesystem_dev = st.st_dev; } @@ -695,28 +696,24 @@ void receive_file_entry(struct file_struct **fptr, unsigned short flags, int f) } -/* determine if a file in a different filesstem should be skipped +/* determine if a file in a different filesystem should be skipped when one_file_system is set. We bascally only want to include the mount points - but they can be hard to find! */ static int skip_filesystem(char *fname, STRUCT_STAT * st) { STRUCT_STAT st2; - char *p = strrchr(fname, '/'); /* skip all but directories */ if (!S_ISDIR(st->st_mode)) return 1; /* if its not a subdirectory then allow */ - if (!p) + if (!strrchr(fname, '/')) return 0; - *p = 0; - if (link_stat(fname, &st2)) { - *p = '/'; + if (link_stat(fname, &st2) != 0) { return 0; } - *p = '/'; return (st2.st_dev != filesystem_dev); }