// 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; }