aboutsummaryrefslogtreecommitdiffstats
path: root/clientserver.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2008-03-30 15:40:34 -0700
committerWayne Davison <wayned@samba.org>2008-03-30 15:44:46 -0700
commit29a89172f77ed76dcf53612e96dc35daf15d7362 (patch)
treecadcb5daf227d3196d1492cc8d8f1a616412b3de /clientserver.c
parent20893751791a1bb7417b9fa72e91c909619bca6a (diff)
downloadandroid_external_rsync-29a89172f77ed76dcf53612e96dc35daf15d7362.tar.gz
android_external_rsync-29a89172f77ed76dcf53612e96dc35daf15d7362.tar.bz2
android_external_rsync-29a89172f77ed76dcf53612e96dc35daf15d7362.zip
Improved the chdir() code:
- Renamed push_dir() to change_dir() and revised it a little so that it can chdir() to a relative path without an intervening chdir() back to the staring path. - Renamed push_pathname() to change_pathname() and revised it to take different args and to only call path_is_daemon_excluded() on a new path (not a revisit of a file's already-checked path). - Fixed change_pathname() to set the right pathname value when a chdir() call fails. - Set orig_dir once outside of the change_pathname() function. - Got rid of pop_dir().
Diffstat (limited to 'clientserver.c')
-rw-r--r--clientserver.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/clientserver.c b/clientserver.c
index 39a8cedf..52913567 100644
--- a/clientserver.c
+++ b/clientserver.c
@@ -509,15 +509,15 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
out_of_memory("rsync_module");
}
- /* We do a push_dir() that doesn't actually call chdir()
+ /* We do a change_dir() that doesn't actually call chdir()
* just to make a relative path absolute. */
strlcpy(line, curr_dir, sizeof line);
- if (!push_dir(module_dir, 1))
+ if (!change_dir(module_dir, CD_SKIP_CHDIR))
goto chdir_failed;
if (strcmp(curr_dir, module_dir) != 0
&& (module_dir = strdup(curr_dir)) == NULL)
out_of_memory("rsync_module");
- push_dir(line, 1); /* Restore curr_dir. */
+ change_dir(line, CD_SKIP_CHDIR); /* Restore curr_dir. */
if (use_chroot) {
chroot_path = module_dir;
@@ -673,12 +673,12 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
io_printf(f_out, "@ERROR: chroot failed\n");
return -1;
}
- if (!push_dir(module_dir, 0))
+ if (!change_dir(module_dir, CD_NORMAL))
goto chdir_failed;
if (module_dirlen)
sanitize_paths = 1;
} else {
- if (!push_dir(module_dir, 0)) {
+ if (!change_dir(module_dir, CD_NORMAL)) {
chdir_failed:
rsyserr(FLOG, errno, "chdir %s failed\n", module_dir);
io_printf(f_out, "@ERROR: chdir failed\n");