コード例 #1
0
ファイル: UserlandFS.cpp プロジェクト: luciang/haiku
// RegisterFileSystem
status_t
UserlandFS::RegisterFileSystem(const char* name, FileSystem** _fileSystem)
{
	// check parameters
	if (!name || !_fileSystem)
		return B_BAD_VALUE;

	// check, if we do already know this file system, and create it, if not
	FileSystemInitializer* fileSystemInitializer;
	{
		FileSystemLocker _(fFileSystems);
		fileSystemInitializer = fFileSystems->Get(name);
		if (fileSystemInitializer) {
			fileSystemInitializer->AddReference();
		} else {
			fileSystemInitializer = new(nothrow) FileSystemInitializer(name);
			if (!fileSystemInitializer)
				return B_NO_MEMORY;

			status_t error = fFileSystems->Put(name, fileSystemInitializer);
			if (error != B_OK) {
				delete fileSystemInitializer;
				return error;
			}
		}
	}

	// prepare the file system
	status_t error = fileSystemInitializer->Access();
	if (error != B_OK) {
		_UnregisterFileSystem(name);
		return error;
	}

	*_fileSystem = fileSystemInitializer->GetFileSystem();
	return error;
}