INT64_T chirp_global_rename(const char *host, const char *path, const char *newpath, time_t stoptime) { if(is_multi_path(host)) { char mhost[CHIRP_PATH_MAX]; char mpath[CHIRP_PATH_MAX]; char mnewhost[CHIRP_PATH_MAX]; char mnewpath[CHIRP_PATH_MAX]; parse_multi_path(path, mhost, mpath); parse_multi_path(path, mnewhost, mnewpath); if(!strcmp(mhost, mnewhost)) { return chirp_multi_rename(mhost, mpath, mnewpath, stoptime); } else { errno = EXDEV; return -1; } } else if(not_empty(path)) { return chirp_reli_rename(host, path, newpath, stoptime); } else { errno = EXDEV; return -1; } }
static INT64_T do_mv(int argc, char **argv) { char old_full_path[CHIRP_PATH_MAX]; char new_full_path[CHIRP_PATH_MAX]; complete_remote_path(argv[1], old_full_path); complete_remote_path(argv[2], new_full_path); return chirp_reli_rename(current_host, old_full_path, new_full_path, stoptime); }
INT64_T chirp_multi_rename(const char *volume, const char *path, const char *newpath, time_t stoptime) { char lpath[CHIRP_PATH_MAX]; char newlpath[CHIRP_PATH_MAX]; int result; if(!chirp_multi_lpath(volume, path, lpath, stoptime)) return -1; if(!chirp_multi_lpath(volume, newpath, newlpath, stoptime)) return -1; result = chirp_multi_unlink(volume, newpath, stoptime); if(result < 0) { if(errno == ENOENT || errno == EISDIR) { /* ok, keep going */ } else { return -1; } } return chirp_reli_rename(current_volume->host, lpath, newlpath, stoptime); }