X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/c7b562becf9c926f65b9845ed6cd1c3a4635cf83..734a94a20c7ee4bd787eb434d21d8be1f24f7774:/flist.c diff --git a/flist.c b/flist.c index 045c2f22..381eb8e4 100644 --- a/flist.c +++ b/flist.c @@ -192,44 +192,56 @@ static void list_file_entry(struct file_struct *f) } -int readlink_stat(const char *Path, STRUCT_STAT * Buffer, char *Linkbuf) +/** + * Stat either a symlink or its referent, depending on the settings of + * copy_links, copy_unsafe_links, etc. + * + * @retval -1 on error + * + * @retval 0 for success + * + * @post If @p path is a symlink, then @p linkbuf (of size @c + * MAXPATHLEN) contains the symlink target. + * + * @post @p buffer contains information about the link or the + * referrent as appropriate, if they exist. + **/ +int readlink_stat(const char *path, STRUCT_STAT * buffer, char *linkbuf) { #if SUPPORT_LINKS if (copy_links) { - return do_stat(Path, Buffer); + return do_stat(path, buffer); } - if (do_lstat(Path, Buffer) == -1) { + if (do_lstat(path, buffer) == -1) { return -1; } - if (S_ISLNK(Buffer->st_mode)) { + if (S_ISLNK(buffer->st_mode)) { int l; - if ((l = - readlink((char *) Path, Linkbuf, - MAXPATHLEN - 1)) == -1) { + l = readlink((char *) path, linkbuf, MAXPATHLEN - 1); + if (l == -1) return -1; - } - Linkbuf[l] = 0; + linkbuf[l] = 0; if (copy_unsafe_links && (topsrcname[0] != '\0') && - unsafe_symlink(Linkbuf, topsrcname)) { - return do_stat(Path, Buffer); + unsafe_symlink(linkbuf, topsrcname)) { + return do_stat(path, buffer); } } return 0; #else - return do_stat(Path, Buffer); + return do_stat(path, buffer); #endif } -int link_stat(const char *Path, STRUCT_STAT * Buffer) +int link_stat(const char *path, STRUCT_STAT * buffer) { #if SUPPORT_LINKS if (copy_links) { - return do_stat(Path, Buffer); + return do_stat(path, buffer); } else { - return do_lstat(Path, Buffer); + return do_lstat(path, buffer); } #else - return do_stat(Path, Buffer); + return do_stat(path, buffer); #endif } @@ -988,8 +1000,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) send_file_entry(NULL, f, 0); } - if (show_filelist_p()) + if (show_filelist_p() && f != -1) { finish_filelist_progress(flist); + } clean_flist(flist, 0);