On Feb 05 2018, Florian Weimer <fweimer@redhat.com> wrote:
/* Like chdir(), but it keeps track of the current directory (in the
* global "curr_dir"), and ensures that the path size doesn't overflow.
* Also cleans the path using the clean_fname() function. */
int change_dir(const char *dir, int set_path_only)
{
static int initialised, skipped_chdir;
unsigned int len;
if (!initialised) {
initialised = 1;
if (getcwd(curr_dir, sizeof curr_dir - 1) == NULL) {
rsyserr(FERROR, errno, "getcwd()");
exit_cleanup(RERR_FILESELECT);
}
curr_dir_len = strlen(curr_dir);
}
This will also fail when rsync is started from a directory that has
since been removed, where getcwd (even the syscall) has always returned
an error. So this isn't a new failure.