예제 #1
0
파일: chirp_multi.c 프로젝트: liblit/Murphy
INT64_T chirp_multi_readlink(const char *volume, const char *path, char *buf, INT64_T length, time_t stoptime)
{
	char lpath[CHIRP_PATH_MAX];
	if(chirp_multi_lpath(volume, path, lpath, stoptime)) {
		return chirp_reli_readlink(current_volume->host, lpath, buf, length, stoptime);
	} else {
		return -1;
	}
}
예제 #2
0
static INT64_T do_get_one_link(const char *hostport, const char *source_file, const char *target_file, time_t stoptime)
{
	char linkdata[CHIRP_PATH_MAX];
	INT64_T result;

	result = chirp_reli_readlink(hostport, source_file, linkdata, sizeof(linkdata), stoptime);
	if(result >= 0) {
		linkdata[result] = 0;
		unlink(target_file);
		result = symlink(linkdata, target_file);
		if(result >= 0)
			result = 0;
	}

	return result;
}
예제 #3
0
INT64_T chirp_global_readlink(const char *host, const char *path, char *buf, INT64_T length, time_t stoptime)
{
	if(is_multi_path(host)) {
		char mhost[CHIRP_PATH_MAX];
		char mpath[CHIRP_PATH_MAX];
		parse_multi_path(path, mhost, mpath);
		return chirp_multi_readlink(mhost, mpath, buf, length, stoptime);
	} else if(not_empty(path)) {
		return chirp_reli_readlink(host, path, buf, length, stoptime);
	} else if(not_empty(host)) {
		if(server_lookup(host, stoptime)) {
			errno = EINVAL;
			return -1;
		} else {
			errno = ENOENT;
			return -1;
		}
	} else {
		errno = EINVAL;
		return -1;
	}
}