1/* 2 * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include "CreateChildJob.h" 8 9#include <syscalls.h> 10 11#include "DiskDeviceUtils.h" 12#include "PartitionReference.h" 13 14 15// constructor 16CreateChildJob::CreateChildJob(PartitionReference* partition, 17 PartitionReference* child) 18 : 19 DiskDeviceJob(partition, child), 20 fOffset(0), 21 fSize(0), 22 fType(NULL), 23 fName(NULL), 24 fParameters(NULL) 25{ 26} 27 28 29// destructor 30CreateChildJob::~CreateChildJob() 31{ 32 free(fType); 33 free(fName); 34 free(fParameters); 35} 36 37 38// Init 39status_t 40CreateChildJob::Init(off_t offset, off_t size, const char* type, 41 const char* name, const char* parameters) 42{ 43 fOffset = offset; 44 fSize = size; 45 46 SET_STRING_RETURN_ON_ERROR(fType, type); 47 SET_STRING_RETURN_ON_ERROR(fName, name); 48 SET_STRING_RETURN_ON_ERROR(fParameters, parameters); 49 50 return B_OK; 51} 52 53 54// Do 55status_t 56CreateChildJob::Do() 57{ 58 int32 changeCounter = fPartition->ChangeCounter(); 59 partition_id childID; 60 int32 childChangeCounter; 61 status_t error = _kern_create_child_partition(fPartition->PartitionID(), 62 &changeCounter, fOffset, fSize, fType, fName, fParameters, &childID, 63 &childChangeCounter); 64 if (error != B_OK) 65 return error; 66 67 fPartition->SetChangeCounter(changeCounter); 68 fChild->SetTo(childID, childChangeCounter); 69 70 return B_OK; 71} 72 73