int do_sync_push(const char *lpath, const char *rpath, int show_progress) { struct stat st; unsigned mode; int fd; fd = adb_connect("sync:"); if(fd < 0) { fprintf(stderr,"error: %s\n", adb_error()); return 1; } if(stat(lpath, &st)) { fprintf(stderr,"cannot stat '%s': %s\n", lpath, strerror(errno)); sync_quit(fd); return 1; } if(S_ISDIR(st.st_mode)) { BEGIN(); if(copy_local_dir_remote(fd, lpath, rpath, 0, 0)) { return 1; } else { END(); sync_quit(fd); } } else { if(sync_readmode(fd, rpath, &mode)) { return 1; } if((mode != 0) && S_ISDIR(mode)) { /* if we're copying a local file to a remote directory, ** we *really* want to copy to remotedir + "/" + localfilename */ const char *name = adb_dirstop(lpath); if(name == 0) { name = lpath; } else { name++; } int tmplen = strlen(name) + strlen(rpath) + 2; char *tmp = reinterpret_cast<char*>( malloc(strlen(name) + strlen(rpath) + 2)); if(tmp == 0) return 1; snprintf(tmp, tmplen, "%s/%s", rpath, name); rpath = tmp; } BEGIN(); if(sync_send(fd, lpath, rpath, st.st_mtime, st.st_mode, show_progress)) { return 1; } else { END(); sync_quit(fd); return 0; } } return 0; }
static int _do_sync_push(const char *lpath, const char *rpath, int show_progress) { struct stat st; unsigned mode; int fd; if((fd = _adb_connect("sync:")) < 0) { return 1; } if(stat(lpath, &st)) { sync_quit(fd); return 2; } if(S_ISDIR(st.st_mode)) { if(copy_local_dir_remote(fd, lpath, rpath, 0, 0)) { return 3; } else { sync_quit(fd); } } else { if(sync_readmode(fd, rpath, &mode)) { return 4; } if((mode != 0) && S_ISDIR(mode)) { /* if we're copying a local file to a remote directory, ** we *really* want to copy to remotedir + "/" + localfilename */ const char *name = strrchr(lpath, '/'); if(name == 0) { name = lpath; } else { name++; } int tmplen = strlen(name) + strlen(rpath) + 2; char *tmp = malloc(strlen(name) + strlen(rpath) + 2); if(tmp == 0) return 1; snprintf(tmp, tmplen, "%s/%s", rpath, name); rpath = tmp; } if(sync_send(fd, lpath, rpath, st.st_mtime, st.st_mode, show_progress)) { return 5; } else { sync_quit(fd); return 0; } } return 0; }
int do_sync_push(const char* lpath, const char* rpath, bool show_progress) { std::string error; int fd = adb_connect("sync:", &error); if (fd < 0) { fprintf(stderr,"error: %s\n", error.c_str()); return 1; } struct stat st; if (stat(lpath, &st)) { fprintf(stderr,"cannot stat '%s': %s\n", lpath, strerror(errno)); sync_quit(fd); return 1; } if (S_ISDIR(st.st_mode)) { BEGIN(); if (copy_local_dir_remote(fd, lpath, rpath, 0, 0)) { return 1; } } else { unsigned mode; if (sync_readmode(fd, rpath, &mode)) { return 1; } std::string path_holder; if ((mode != 0) && S_ISDIR(mode)) { // If we're copying a local file to a remote directory, // we really want to copy to remote_dir + "/" + local_filename. path_holder = android::base::StringPrintf("%s/%s", rpath, adb_basename(lpath).c_str()); rpath = path_holder.c_str(); } BEGIN(); if (sync_send(fd, lpath, rpath, st.st_mtime, st.st_mode, show_progress)) { return 1; } } END(); sync_quit(fd); return 0; }
int do_sync_pull(const char *rpath, const char *lpath) { unsigned mode; struct stat st; int fd; fd = adb_connect("sync:"); if(fd < 0) { fprintf(stderr,"error: %s\n", adb_error()); return 1; } if(sync_readmode(fd, rpath, &mode)) { return 1; } if(mode == 0) { fprintf(stderr,"remote object '%s' does not exist\n", rpath); return 1; } if(S_ISREG(mode) || S_ISLNK(mode) || S_ISCHR(mode) || S_ISBLK(mode)) { if(stat(lpath, &st) == 0) { if(S_ISDIR(st.st_mode)) { /* if we're copying a remote file to a local directory, ** we *really* want to copy to localdir + "/" + remotefilename */ const char *name = adb_dirstop(rpath); if(name == 0) { name = rpath; } else { name++; } int tmplen = strlen(name) + strlen(lpath) + 2; char *tmp = malloc(tmplen); if(tmp == 0) return 1; snprintf(tmp, tmplen, "%s/%s", lpath, name); lpath = tmp; } } BEGIN(); if(sync_recv(fd, rpath, lpath)) { return 1; } else { END(); sync_quit(fd); return 0; } } else if(S_ISDIR(mode)) { BEGIN(); if (copy_remote_dir_local(fd, rpath, lpath, 0)) { return 1; } else { END(); sync_quit(fd); return 0; } } else { fprintf(stderr,"remote object '%s' not a file or directory\n", rpath); return 1; } }