static status_t packagefs_mount(fs_volume* fsVolume, const char* device, uint32 flags, const char* parameters, ino_t* _rootID) { FUNCTION("fsVolume: %p, device: \"%s\", flags: %#" B_PRIx32 ", parameters: " "\"%s\"\n", fsVolume, device, flags, parameters); // create a Volume object Volume* volume = new(std::nothrow) Volume(fsVolume); if (volume == NULL) RETURN_ERROR(B_NO_MEMORY); ObjectDeleter<Volume> volumeDeleter(volume); // Initialize the fs_volume now already, so it is mostly usable in during // mounting. fsVolume->private_volume = volumeDeleter.Detach(); fsVolume->ops = &gPackageFSVolumeOps; status_t error = volume->Mount(parameters); if (error != B_OK) return error; // set return values *_rootID = volume->RootDirectory()->ID(); return B_OK; }
static status_t checksumfs_mount(fs_volume* fsVolume, const char* device, uint32 flags, const char* args, ino_t* _rootVnodeID) { Volume* volume = new(std::nothrow) Volume(flags); if (volume == NULL) RETURN_ERROR(B_NO_MEMORY); ObjectDeleter<Volume> volumeDeleter(volume); status_t error = volume->Init(device); if (error != B_OK) RETURN_ERROR(error); error = volume->Mount(fsVolume); if (error != B_OK) RETURN_ERROR(error); fsVolume->private_volume = volumeDeleter.Detach(); fsVolume->ops = &gCheckSumFSVolumeOps; *_rootVnodeID = volume->RootDirectory()->BlockIndex(); return B_OK; }