X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0cfcfa29e29a87202115afc0d44a938f431517d9..d0390cd3841db9dd175ae6c9a6472d0ca72801a8:/util.c?ds=sidebyside diff --git a/util.c b/util.c index 3ecd8120..e53d02a0 100644 --- a/util.c +++ b/util.c @@ -127,6 +127,7 @@ int piped_child(char **command,int *f_in,int *f_out) if (pid == 0) { + extern int orig_umask; if (dup2(to_child_pipe[0], STDIN_FILENO) < 0 || close(to_child_pipe[1]) < 0 || close(from_child_pipe[0]) < 0 || @@ -136,6 +137,7 @@ int piped_child(char **command,int *f_in,int *f_out) } if (to_child_pipe[0] != STDIN_FILENO) close(to_child_pipe[0]); if (from_child_pipe[1] != STDOUT_FILENO) close(from_child_pipe[1]); + umask(orig_umask); execvp(command[0], command); fprintf(FERROR,"Failed to exec %s : %s\n", command[0],strerror(errno)); @@ -226,3 +228,26 @@ int set_blocking(int fd, int set) return fcntl( fd, F_SETFL, val); #undef FLAG_TO_SET } + +/**************************************************************************** +create any necessary directories in fname. Unfortunately we don't know +what perms to give the directory when this is called so we need to rely +on the umask +****************************************************************************/ +int create_directory_path(char *fname) +{ + extern int orig_umask; + char *p; + + while (*fname == '/') fname++; + while (strncmp(fname,"./",2)==0) fname += 2; + + p = fname; + while ((p=strchr(p,'/'))) { + *p = 0; + mkdir(fname,0777 & ~orig_umask); + *p = '/'; + p++; + } + return 0; +}