1/* 2 * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include "SetStringJob.h" 8 9#include <syscalls.h> 10 11#include "DiskDeviceUtils.h" 12#include "PartitionReference.h" 13 14 15// constructor 16SetStringJob::SetStringJob(PartitionReference* partition, 17 PartitionReference* child) 18 : 19 DiskDeviceJob(partition, child), 20 fString(NULL) 21{ 22} 23 24 25// destructor 26SetStringJob::~SetStringJob() 27{ 28 free(fString); 29} 30 31 32// Init 33status_t 34SetStringJob::Init(const char* string, uint32 jobType) 35{ 36 switch (jobType) { 37 case B_DISK_DEVICE_JOB_SET_NAME: 38 case B_DISK_DEVICE_JOB_SET_CONTENT_NAME: 39 case B_DISK_DEVICE_JOB_SET_TYPE: 40 case B_DISK_DEVICE_JOB_SET_PARAMETERS: 41 case B_DISK_DEVICE_JOB_SET_CONTENT_PARAMETERS: 42 break; 43 default: 44 return B_BAD_VALUE; 45 } 46 47 fJobType = jobType; 48 SET_STRING_RETURN_ON_ERROR(fString, string); 49 50 return B_OK; 51} 52 53 54// Do 55status_t 56SetStringJob::Do() 57{ 58 int32 changeCounter = fPartition->ChangeCounter(); 59 int32 childChangeCounter = (fChild ? fChild->ChangeCounter() : 0); 60 status_t error; 61 bool updateChildChangeCounter = false; 62 63 switch (fJobType) { 64 case B_DISK_DEVICE_JOB_SET_NAME: 65 error = _kern_set_partition_name(fPartition->PartitionID(), 66 &changeCounter, fChild->PartitionID(), &childChangeCounter, 67 fString); 68 updateChildChangeCounter = true; 69 break; 70 case B_DISK_DEVICE_JOB_SET_CONTENT_NAME: 71 error = _kern_set_partition_content_name(fPartition->PartitionID(), 72 &changeCounter, fString); 73 break; 74 case B_DISK_DEVICE_JOB_SET_TYPE: 75 error = _kern_set_partition_type(fPartition->PartitionID(), 76 &changeCounter, fChild->PartitionID(), &childChangeCounter, 77 fString); 78 updateChildChangeCounter = true; 79 break; 80 case B_DISK_DEVICE_JOB_SET_PARAMETERS: 81 error = _kern_set_partition_parameters(fPartition->PartitionID(), 82 &changeCounter, fChild->PartitionID(), &childChangeCounter, 83 fString); 84 updateChildChangeCounter = true; 85 break; 86 case B_DISK_DEVICE_JOB_SET_CONTENT_PARAMETERS: 87 error = _kern_set_partition_content_parameters( 88 fPartition->PartitionID(), &changeCounter, fString); 89 break; 90 default: 91 return B_BAD_VALUE; 92 } 93 94 if (error != B_OK) 95 return error; 96 97 fPartition->SetChangeCounter(changeCounter); 98 if (updateChildChangeCounter) 99 fChild->SetChangeCounter(childChangeCounter); 100 101 return B_OK; 102} 103 104