示例#1
0
int
MultiServer::wstat(ServerContext& s, const char *path, file_stat_t& fileStat, uint32_t mask)
{
	string subdir;
	FileServer *server = getServer(s, path, subdir);
	if (fileStat.fs_rename.length() > 0)
	{
		string newname;
		FileServer *server2 = getServer(s, fileStat.fs_rename.c_str(), newname);
		if (server2 && server == server2)
		{
			fileStat.fs_rename = newname;
		}
		else
		{
			return -EPERM;
		}
	}
	if (server && !server->readOnly(s))
	{
		return server->wstat(s, subdir.c_str(), fileStat, mask);
	}
	// MemoryServer::wstat(s, path, fileStat, mask));
	return -EPERM;
}
示例#2
0
int
MultiServer::removeFile(ServerContext& s, const char *path)
{
	string subdir;
	FileServer *server = getServer(s, path, subdir);
	if (server && !server->readOnly(s))
	{
		return server->removeFile(s, subdir.c_str());
	}
	return -EPERM;
}
示例#3
0
int
MultiServer::createMlink(ServerContext& s, const char *path, const char *link)
{
	string subdir;
	FileServer *server = getServer(s, path, subdir);
	if (server && !server->readOnly(s))
	{
		return server->createMlink(s, subdir.c_str(), link);
	}
	return -EPERM;
}
示例#4
0
int
MultiServer::createDir(ServerContext& s, const char *path, uint32_t mode)
{
	string subdir;
	FileServer *server = getServer(s, path, subdir);
	
	if (server && !server->readOnly(s))
	{
		return server->createDir(s, subdir.c_str(), mode);
	}
	// MemoryServer::wstat(s, path, fileStat, mask));
	return -EPERM;
}
示例#5
0
int
MultiServer::createHlink(ServerContext& s, const char *path, const char *link)
{
	string subdir;
	FileServer *server = getServer(s, path, subdir);
	if (link)
	{
		string lnk;
		FileServer *server2 = getServer(s, link, lnk);
		if (server2 && server == server2)
		{
			link = lnk.c_str();
		}
		else
		{
			return -EPERM;
		}
	}
	if (server && !server->readOnly(s))
	{
		return server->createHlink(s, subdir.c_str(), link);
	}
	return -EPERM;
}