Loading adb/file_sync_client.c +43 −19 Original line number Diff line number Diff line Loading @@ -893,6 +893,21 @@ static int set_time_and_mode(const char *lpath, unsigned int time, unsigned int return r1 ? : r2; } /* Return a copy of the path string with / appended if needed */ static char *add_slash_to_path(const char *path) { if (path[strlen(path) - 1] != '/') { size_t len = strlen(path) + 2; char *path_with_slash = malloc(len); if (path_with_slash == NULL) return NULL; snprintf(path_with_slash, len, "%s/", path); return path_with_slash; } else { return strdup(path); } } static int copy_remote_dir_local(int fd, const char *rpath, const char *lpath, int copy_attrs) { Loading @@ -900,28 +915,32 @@ static int copy_remote_dir_local(int fd, const char *rpath, const char *lpath, copyinfo *ci, *next; int pulled = 0; int skipped = 0; char *rpath_clean = NULL; char *lpath_clean = NULL; int ret = 0; if (rpath[0] == '\0' || lpath[0] == '\0') { ret = -1; goto finish; } /* Make sure that both directory paths end in a slash. */ if (rpath[0] == 0 || lpath[0] == 0) return -1; if (rpath[strlen(rpath) - 1] != '/') { int tmplen = strlen(rpath) + 2; char *tmp = malloc(tmplen); if (tmp == 0) return -1; snprintf(tmp, tmplen, "%s/", rpath); rpath = tmp; rpath_clean = add_slash_to_path(rpath); if (!rpath_clean) { ret = -1; goto finish; } if (lpath[strlen(lpath) - 1] != '/') { int tmplen = strlen(lpath) + 2; char *tmp = malloc(tmplen); if (tmp == 0) return -1; snprintf(tmp, tmplen, "%s/", lpath); lpath = tmp; lpath_clean = add_slash_to_path(lpath); if (!lpath_clean) { ret = -1; goto finish; } fprintf(stderr, "pull: building file list...\n"); /* Recursively build the list of files to copy. */ if (remote_build_list(fd, &filelist, rpath, lpath)) { return -1; fprintf(stderr, "pull: building file list...\n"); if (remote_build_list(fd, &filelist, rpath_clean, lpath_clean)) { ret = -1; goto finish; } for (ci = filelist; ci != 0; ci = next) { Loading @@ -929,11 +948,13 @@ static int copy_remote_dir_local(int fd, const char *rpath, const char *lpath, if (ci->flag == 0) { fprintf(stderr, "pull: %s -> %s\n", ci->src, ci->dst); if (sync_recv(fd, ci->src, ci->dst, 0 /* no show progress */)) { return 1; ret = -1; goto finish; } if (copy_attrs && set_time_and_mode(ci->dst, ci->time, ci->mode)) { return 1; ret = -1; goto finish; } pulled++; } else { Loading @@ -946,7 +967,10 @@ static int copy_remote_dir_local(int fd, const char *rpath, const char *lpath, pulled, (pulled == 1) ? "" : "s", skipped, (skipped == 1) ? "" : "s"); return 0; finish: free(lpath_clean); free(rpath_clean); return ret; } int do_sync_pull(const char *rpath, const char *lpath, int show_progress, int copy_attrs) Loading Loading
adb/file_sync_client.c +43 −19 Original line number Diff line number Diff line Loading @@ -893,6 +893,21 @@ static int set_time_and_mode(const char *lpath, unsigned int time, unsigned int return r1 ? : r2; } /* Return a copy of the path string with / appended if needed */ static char *add_slash_to_path(const char *path) { if (path[strlen(path) - 1] != '/') { size_t len = strlen(path) + 2; char *path_with_slash = malloc(len); if (path_with_slash == NULL) return NULL; snprintf(path_with_slash, len, "%s/", path); return path_with_slash; } else { return strdup(path); } } static int copy_remote_dir_local(int fd, const char *rpath, const char *lpath, int copy_attrs) { Loading @@ -900,28 +915,32 @@ static int copy_remote_dir_local(int fd, const char *rpath, const char *lpath, copyinfo *ci, *next; int pulled = 0; int skipped = 0; char *rpath_clean = NULL; char *lpath_clean = NULL; int ret = 0; if (rpath[0] == '\0' || lpath[0] == '\0') { ret = -1; goto finish; } /* Make sure that both directory paths end in a slash. */ if (rpath[0] == 0 || lpath[0] == 0) return -1; if (rpath[strlen(rpath) - 1] != '/') { int tmplen = strlen(rpath) + 2; char *tmp = malloc(tmplen); if (tmp == 0) return -1; snprintf(tmp, tmplen, "%s/", rpath); rpath = tmp; rpath_clean = add_slash_to_path(rpath); if (!rpath_clean) { ret = -1; goto finish; } if (lpath[strlen(lpath) - 1] != '/') { int tmplen = strlen(lpath) + 2; char *tmp = malloc(tmplen); if (tmp == 0) return -1; snprintf(tmp, tmplen, "%s/", lpath); lpath = tmp; lpath_clean = add_slash_to_path(lpath); if (!lpath_clean) { ret = -1; goto finish; } fprintf(stderr, "pull: building file list...\n"); /* Recursively build the list of files to copy. */ if (remote_build_list(fd, &filelist, rpath, lpath)) { return -1; fprintf(stderr, "pull: building file list...\n"); if (remote_build_list(fd, &filelist, rpath_clean, lpath_clean)) { ret = -1; goto finish; } for (ci = filelist; ci != 0; ci = next) { Loading @@ -929,11 +948,13 @@ static int copy_remote_dir_local(int fd, const char *rpath, const char *lpath, if (ci->flag == 0) { fprintf(stderr, "pull: %s -> %s\n", ci->src, ci->dst); if (sync_recv(fd, ci->src, ci->dst, 0 /* no show progress */)) { return 1; ret = -1; goto finish; } if (copy_attrs && set_time_and_mode(ci->dst, ci->time, ci->mode)) { return 1; ret = -1; goto finish; } pulled++; } else { Loading @@ -946,7 +967,10 @@ static int copy_remote_dir_local(int fd, const char *rpath, const char *lpath, pulled, (pulled == 1) ? "" : "s", skipped, (skipped == 1) ? "" : "s"); return 0; finish: free(lpath_clean); free(rpath_clean); return ret; } int do_sync_pull(const char *rpath, const char *lpath, int show_progress, int copy_attrs) Loading