* Style cleanup.

* Moved method documentation from headers to source files.
* Fixed small problems (memory leaks, unsafe string duplication,...).
* Added TODOs where I spotted problems.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21721 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2007-07-27 16:32:47 +00:00
parent e098680c08
commit d86af8ce27
35 changed files with 1124 additions and 862 deletions
@@ -1,5 +1,11 @@
// KDiskDeviceJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
* Lubos Kulic
*/
#ifndef _K_DISK_DEVICE_JOB_H
#define _K_DISK_DEVICE_JOB_H
@@ -15,38 +21,19 @@ class KDiskDeviceJobQueue;
/**
* Represents some action executed on the disk device.
*
* -
*/
class KDiskDeviceJob {
public:
/**
* Creates a new job
*
* \param type actual type of the job (see DiskDeviceDefs.h for details)
* \param partitionID the partition/device on which the action should be executed
* \param scopeID partition/device which is the highest in the hierarchy (i.e. closest
* to the root) that can be affected by the action
* - every descendant of this partition is marked busy and all ancestors are marked descendant-
busy
*/
KDiskDeviceJob(uint32 type, partition_id partitionID,
partition_id scopeID = -1);
virtual ~KDiskDeviceJob();
/**
* Unique identification of the job
*/
disk_job_id ID() const;
void SetJobQueue(KDiskDeviceJobQueue *queue);
KDiskDeviceJobQueue *JobQueue() const;
/**
* Gets actual type of the action
*/
uint32 Type() const;
void SetStatus(uint32 status);
uint32 Status() const;
@@ -81,21 +68,6 @@ public:
status_t GetInfo(user_disk_device_job_info *info);
status_t GetProgressInfo(disk_device_job_progress_info *info);
/**
* Do the actual work of the job.
*
* - is supposed to be implemented in descendants
* - doesn't have any parameter - every operation needs different ones -> they're passed
* to the constructor
* - the implementations will
* - check the parameters given in constructor (e.g. if given partition exists...)
* - check whether the partition has needed disk system (its own or parent - depends
* on the operation)
* - using the disk system, validate the operation for given params
* - finally execute the action
*
* \return B_OK when everything went OK, some error otherwise
*/
virtual status_t Do() = 0;
private:
@@ -116,27 +88,10 @@ private:
static disk_job_id fNextID;
private:
/**
* Visitor which checks if every descendant of given partition is busy or descendant-busy
*/
struct IsNotBusyVisitor : KPartitionVisitor {
virtual bool VisitPre(KPartition * partition);
};
IsNotBusyVisitor fNotBusyVisitor;
protected:
//some stuff useful for all descendants
// some stuff useful for all descendants
/**
* Checks if there's any descendant which is not busy/descendant-busy.
*
* - the condition of busy descendant is common for many disk device operations ->
* many jobs can use this
*
* \param partition the root of checked subtree of the whole partition hieararchy
*/
bool isPartitionNotBusy( KPartition * partition );
bool IsPartitionNotBusy(KPartition* partition);
};
@@ -1,5 +1,10 @@
// KDiskSystem.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
*/
#ifndef _K_DISK_DEVICE_SYSTEM_H
#define _K_DISK_DEVICE_SYSTEM_H
@@ -13,7 +18,7 @@ namespace DiskDevice {
class KDiskDeviceJob;
class KPartition;
/// \brief Common ancestor for disk system add-on wrappers
//! \brief Common ancestor for disk system add-on wrappers
class KDiskSystem {
public:
KDiskSystem(const char *name);
@@ -1,8 +1,13 @@
// KFileSystem.h
//
// KFileSystem implements the KDiskSystem interface for file systems.
// It works with the FS API.
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
*
* KFileSystem implements the KDiskSystem interface for file systems.
* It works with the FS API.
*/
#ifndef _K_FILE_DISK_DEVICE_SYSTEM_H
#define _K_FILE_DISK_DEVICE_SYSTEM_H
@@ -13,7 +18,7 @@ struct file_system_module_info;
namespace BPrivate {
namespace DiskDevice {
/// \brief Wrapper for the C interface of a filesystem add-on.
//! \brief Wrapper for the C interface of a filesystem add-on.
class KFileSystem : public KDiskSystem {
public:
KFileSystem(const char *name);
@@ -1,5 +1,10 @@
// KPartition.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
*/
#ifndef _K_DISK_DEVICE_PARTITION_H
#define _K_DISK_DEVICE_PARTITION_H
@@ -21,7 +26,7 @@ class KPath;
class KPhysicalPartition;
class KShadowPartition;
/// \brief Class representing a single partition.
//! \brief Class representing a single partition.
class KPartition {
public:
KPartition(partition_id id = -1);
@@ -1,5 +1,10 @@
// KPartitioningSystem.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
*/
#ifndef _K_PARTITIONING_DISK_DEVICE_SYSTEM_H
#define _K_PARTITIONING_DISK_DEVICE_SYSTEM_H
@@ -24,9 +29,9 @@ public:
// Scanning
/// Try to identify a given partition
//! Try to identify a given partition
virtual float Identify(KPartition *partition, void **cookie);
/// Scan the partition
//! Scan the partition
virtual status_t Scan(KPartition *partition, void *cookie);
virtual void FreeIdentifyCookie(KPartition *partition, void *cookie);
virtual void FreeCookie(KPartition *partition);
@@ -34,132 +39,132 @@ public:
// Querying
/// Check whether the add-on supports repairing this partition.
//! Check whether the add-on supports repairing this partition.
virtual bool SupportsRepairing(KPartition *partition, bool checkOnly,
bool *whileMounted);
/// Check whether the add-on supports resizing this partition.
//! Check whether the add-on supports resizing this partition.
virtual bool SupportsResizing(KPartition *partition, bool *whileMounted);
/// Check whether the add-on supports resizing children of this partition.
//! Check whether the add-on supports resizing children of this partition.
virtual bool SupportsResizingChild(KPartition *child);
/// Check whether the add-on supports moving this partition.
//! Check whether the add-on supports moving this partition.
virtual bool SupportsMoving(KPartition *partition, bool *isNoOp);
/// Check whether the add-on supports moving children of this partition.
//! Check whether the add-on supports moving children of this partition.
virtual bool SupportsMovingChild(KPartition *child);
/// Check whether the add-on supports setting name of this partition.
//! Check whether the add-on supports setting name of this partition.
virtual bool SupportsSettingName(KPartition *partition);
/// Check whether the add-on supports setting name to content of this partition.
//! Check whether the add-on supports setting name to content of this partition.
virtual bool SupportsSettingContentName(KPartition *partition,
bool *whileMounted);
/// Check whether the add-on supports setting type of this partition.
//! Check whether the add-on supports setting type of this partition.
virtual bool SupportsSettingType(KPartition *partition);
/// Check whether the add-on supports setting parameters of this partition.
//! Check whether the add-on supports setting parameters of this partition.
virtual bool SupportsSettingParameters(KPartition *partition);
/// Check whether the add-on supports setting parameters to content of this partition.
//! Check whether the add-on supports setting parameters to content of this partition.
virtual bool SupportsSettingContentParameters(KPartition *partition,
bool *whileMounted);
/// Check whether the add-on supports initializing this partition.
//! Check whether the add-on supports initializing this partition.
virtual bool SupportsInitializing(KPartition *partition);
/// Check whether the add-on supports initializing a child of this partition.
//! Check whether the add-on supports initializing a child of this partition.
virtual bool SupportsInitializingChild(KPartition *child,
const char *diskSystem);
/// Check whether the add-on supports creating children of this partition.
//! Check whether the add-on supports creating children of this partition.
virtual bool SupportsCreatingChild(KPartition *partition);
/// Check whether the add-on supports deleting children of this partition.
//! Check whether the add-on supports deleting children of this partition.
virtual bool SupportsDeletingChild(KPartition *child);
/// Check whether the add-on is a subsystem for a given partition.
//! Check whether the add-on is a subsystem for a given partition.
virtual bool IsSubSystemFor(KPartition *partition);
/// Validates parameters for resizing a partition
//! Validates parameters for resizing a partition
virtual bool ValidateResize(KPartition *partition, off_t *size);
/// Validates parameters for resizing a child partition
//! Validates parameters for resizing a child partition
virtual bool ValidateResizeChild(KPartition *child, off_t *size);
/// Validates parameters for moving a partition
//! Validates parameters for moving a partition
virtual bool ValidateMove(KPartition *partition, off_t *start);
/// Validates parameters for moving a child partition
//! Validates parameters for moving a child partition
virtual bool ValidateMoveChild(KPartition *child, off_t *start);
/// Validates parameters for setting name of a partition
//! Validates parameters for setting name of a partition
virtual bool ValidateSetName(KPartition *partition, char *name);
/// Validates parameters for setting name to content of a partition
//! Validates parameters for setting name to content of a partition
virtual bool ValidateSetContentName(KPartition *partition, char *name);
/// Validates parameters for setting type of a partition
//! Validates parameters for setting type of a partition
virtual bool ValidateSetType(KPartition *partition, const char *type);
/// Validates parameters for setting parameters of a partition
//! Validates parameters for setting parameters of a partition
virtual bool ValidateSetParameters(KPartition *partition,
const char *parameters);
/// Validates parameters for setting parameters to content of a partition
//! Validates parameters for setting parameters to content of a partition
virtual bool ValidateSetContentParameters(KPartition *parameters,
const char *parameters);
/// Validates parameters for initializing a partition
//! Validates parameters for initializing a partition
virtual bool ValidateInitialize(KPartition *partition, char *name,
const char *parameters);
/// Validates parameters for creating child of a partition
//! Validates parameters for creating child of a partition
virtual bool ValidateCreateChild(KPartition *partition, off_t *start,
off_t *size, const char *type,
const char *parameters, int32 *index);
/// Counts partitionable spaces on a partition
//! Counts partitionable spaces on a partition
virtual int32 CountPartitionableSpaces(KPartition *partition);
/// Retrieves a list of partitionable spaces on a partition
//! Retrieves a list of partitionable spaces on a partition
virtual status_t GetPartitionableSpaces(KPartition *partition,
partitionable_space_data *buffer,
int32 count,
int32 *actualCount = NULL);
/// Iterates through supported partition types
//! Iterates through supported partition types
virtual status_t GetNextSupportedType(KPartition *partition, int32 *cookie,
char *type);
/// Translates the "pretty" content type to an internal type
//! Translates the "pretty" content type to an internal type
virtual status_t GetTypeForContentType(const char *contentType,
char *type);
// Shadow partition modification
/// Calls for additional modifications when shadow partition is changed
//! Calls for additional modifications when shadow partition is changed
virtual status_t ShadowPartitionChanged(KPartition *partition,
uint32 operation);
// Writing
/// Repairs a partition
//! Repairs a partition
virtual status_t Repair(KPartition *partition, bool checkOnly,
KDiskDeviceJob *job);
/// Resizes a partition
//! Resizes a partition
virtual status_t Resize(KPartition *partition, off_t size,
KDiskDeviceJob *job);
/// Resizes child of a partition
//! Resizes child of a partition
virtual status_t ResizeChild(KPartition *child, off_t size,
KDiskDeviceJob *job);
/// Moves a partition
//! Moves a partition
virtual status_t Move(KPartition *partition, off_t offset,
KDiskDeviceJob *job);
/// Moves child of a partition
//! Moves child of a partition
virtual status_t MoveChild(KPartition *child, off_t offset,
KDiskDeviceJob *job);
/// Sets name to a partition
//! Sets name of a partition
virtual status_t SetName(KPartition *partition, char *name,
KDiskDeviceJob *job);
/// Sets name to content of a partition
//! Sets name of the content of a partition
virtual status_t SetContentName(KPartition *partition, char *name,
KDiskDeviceJob *job);
/// Sets type of a partition
//! Sets type of a partition
virtual status_t SetType(KPartition *partition, char *type,
KDiskDeviceJob *job);
/// Sets parameters of a partition
//! Sets parameters of a partition
virtual status_t SetParameters(KPartition *partition,
const char *parameters,
KDiskDeviceJob *job);
/// Sets parameters to content of a partition
//! Sets parameters to content of a partition
virtual status_t SetContentParameters(KPartition *partition,
const char *parameters,
KDiskDeviceJob *job);
/// Creates a child partition
//! Creates a child partition
virtual status_t CreateChild(KPartition *partition, off_t offset,
off_t size, const char *type,
const char *parameters, KDiskDeviceJob *job,
KPartition **child = NULL,
partition_id childID = -1);
/// Deletes a child partition
//! Deletes a child partition
virtual status_t DeleteChild(KPartition *child, KDiskDeviceJob *job);
/// Initializes a partition with this partitioning system
//! Initializes a partition with this partitioning system
virtual status_t Initialize(KPartition *partition, const char *name,
const char *parameters, KDiskDeviceJob *job);
@@ -1,5 +1,10 @@
// KPartition.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
*/
#ifndef _K_DISK_DEVICE_PHYSICAL_PARTITION_H
#define _K_DISK_DEVICE_PHYSICAL_PARTITION_H
@@ -12,7 +17,7 @@ class KDiskDevice;
class KDiskSystem;
class KShadowPartition;
/// \brief Class representing an existing partition.
//! \brief Class representing an existing partition.
class KPhysicalPartition : public KPartition {
public:
KPhysicalPartition(partition_id id = -1);
@@ -1,5 +1,10 @@
// KPartition.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
*/
#ifndef _K_DISK_DEVICE_SHADOW_PARTITION_H
#define _K_DISK_DEVICE_SHADOW_PARTITION_H
@@ -11,9 +16,10 @@ namespace DiskDevice {
class KPhysicalPartition;
/// \brief Class representing a shadow of an existing partition.
///
/// See \ref path_kernel_structures for more information.
/*! \brief Class representing a shadow of an existing partition.
See \ref path_kernel_structures for more information.
*/
class KShadowPartition : public KPartition, private KPartitionListener {
public:
KShadowPartition(KPhysicalPartition *physicalPartition);
@@ -1,4 +1,11 @@
// KDiskDeviceJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
* Lubos Kulic <[email protected]>
*/
#include <stdio.h>
@@ -14,8 +21,19 @@
#define OUT dprintf
// constructor
/**
Creates a new job
\param type actual type of the job (see DiskDeviceDefs.h for details)
\param partitionID the partition/device on which the action should be
executed
\param scopeID partition/device which is the highest in the hierarchy (i.e.
closest to the root) that can be affected by the action - every
descendant of this partition is marked busy and all ancestors are marked
descendant-busy
*/
KDiskDeviceJob::KDiskDeviceJob(uint32 type, partition_id partitionID,
partition_id scopeID)
partition_id scopeID)
: fID(_NextID()),
fJobQueue(NULL),
fType(type),
@@ -233,6 +251,23 @@ KDiskDeviceJob::GetProgressInfo(disk_device_job_progress_info *info)
return B_OK;
}
/** \fn status_t KDiskDevice::Do()
Do the actual work of the job.
- is supposed to be implemented in descendants
- doesn't have any parameter - every operation needs different ones
-> they're passed to the constructor
- the implementations will
- check the parameters given in constructor (e.g. if given partition
exists...)
- check whether the partition has needed disk system (its own or
parent - depends on the operation)
- using the disk system, validate the operation for given params
- finally execute the action
\return B_OK when everything went OK, some error otherwise
*/
// _NextID
disk_job_id
KDiskDeviceJob::_NextID()
@@ -244,16 +279,29 @@ KDiskDeviceJob::_NextID()
disk_job_id KDiskDeviceJob::fNextID = 0;
// IsNotBusyVisitor
bool KDiskDeviceJob::IsNotBusyVisitor::VisitPre( KPartition * partition ) {
return !(partition->IsBusy() || partition->IsDescendantBusy());
}
/**
Checks if there's any descendant which is not busy/descendant-busy.
- the condition of busy descendant is common for many disk device operations ->
many jobs can use this
bool KDiskDeviceJob::isPartitionNotBusy( KPartition * partition ) {
\param partition the root of checked subtree of the whole partition
hierarchy
*/
bool
KDiskDeviceJob::IsPartitionNotBusy(KPartition* partition)
{
if( !partition ) {
return false;
}
struct IsNotBusyVisitor : KPartitionVisitor {
virtual bool VisitPre(KPartition* partition)
{
return !(partition->IsBusy() || partition->IsDescendantBusy());
}
};
IsNotBusyVisitor notBusyVisitor;
return partition->VisitEachDescendant(&fNotBusyVisitor);
return partition->VisitEachDescendant(&notBusyVisitor);
}
@@ -1,11 +1,12 @@
/*
* Copyright 2004-2006, Haiku, Inc. All rights reserved.
* Copyright 2003-2004, Ingo Weinhold, [email protected]. All rights reserved.
*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
* Lubos Kulic <[email protected]>
*/
#include <util/kernel_cpp.h>
#include "KDiskDeviceJob.h"
@@ -24,6 +25,7 @@
#include "KSetTypeJob.h"
#include "KUninitializeJob.h"
using namespace std;
@@ -61,8 +63,9 @@ KDiskDeviceJobFactory::CreateResizeJob(partition_id parentID,
KDiskDeviceJob *
KDiskDeviceJobFactory::CreateMoveJob(partition_id parentID, partition_id partitionID,
off_t offset, const partition_id *contentsToMove, int32 contentsToMoveCount)
KDiskDeviceJobFactory::CreateMoveJob(partition_id parentID,
partition_id partitionID, off_t offset, const partition_id *contentsToMove,
int32 contentsToMoveCount)
{
// TODO: this is wierd, what in hell are contentsToMove etc?
return new(nothrow) KMoveJob(parentID, partitionID, offset);
@@ -113,7 +116,8 @@ KDiskDeviceJob *
KDiskDeviceJobFactory::CreateInitializeJob(partition_id partitionID,
disk_system_id diskSystemID, const char *name, const char *parameters)
{
return new(nothrow) KInitializeJob(partitionID, diskSystemID, name, parameters);
return new(nothrow) KInitializeJob(partitionID, diskSystemID, name,
parameters);
}
@@ -129,7 +133,8 @@ KDiskDeviceJobFactory::CreateCreateChildJob(partition_id partitionID,
partition_id childID, off_t offset, off_t size, const char *type,
const char *parameters)
{
return new(nothrow) KCreateChildJob(partitionID, childID, offset, size, type, parameters);
return new(nothrow) KCreateChildJob(partitionID, childID, offset, size,
type, parameters);
}
@@ -1,3 +1,12 @@
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
* Lubos Kulic <[email protected]>
*/
/** \file KPartitioningSystem.cpp
*
* \brief Implementation of \ref KPartitioningSystem class
@@ -15,6 +24,7 @@
#include <KPartition.h>
#include <KPartitioningSystem.h>
// constructor
KPartitioningSystem::KPartitioningSystem(const char *name)
: KDiskSystem(name),
@@ -44,6 +54,7 @@ KPartitioningSystem::Init()
}
// Identify
//! Try to identify a given partition
float
KPartitioningSystem::Identify(KPartition *partition, void **cookie)
{
@@ -53,12 +64,13 @@ KPartitioningSystem::Identify(KPartition *partition, void **cookie)
if (partition->Open(O_RDONLY, &fd) != B_OK)
return -1;
float result = fModule->identify_partition(fd, partition->PartitionData(),
cookie);
cookie);
close(fd);
return result;
}
// Scan
//! Scan the partition
status_t
KPartitioningSystem::Scan(KPartition *partition, void *cookie)
{
@@ -80,7 +92,7 @@ KPartitioningSystem::FreeIdentifyCookie(KPartition *partition, void *cookie)
if (!partition || !fModule || !fModule->free_identify_partition_cookie)
return;
fModule->free_identify_partition_cookie(partition->PartitionData(),
cookie);
cookie);
}
// FreeCookie
@@ -108,9 +120,10 @@ KPartitioningSystem::FreeContentCookie(KPartition *partition)
}
// SupportsRepairing
//! Check whether the add-on supports repairing this partition.
bool
KPartitioningSystem::SupportsRepairing(KPartition *partition, bool checkOnly,
bool *whileMounted)
bool *whileMounted)
{
bool _whileMounted = false;
if (!whileMounted)
@@ -126,9 +139,9 @@ KPartitioningSystem::SupportsRepairing(KPartition *partition, bool checkOnly,
}
// SupportsResizing
//! Check whether the add-on supports resizing this partition.
bool
KPartitioningSystem::SupportsResizing(KPartition *partition,
bool *whileMounted)
KPartitioningSystem::SupportsResizing(KPartition *partition, bool *whileMounted)
{
bool _whileMounted = false;
if (!whileMounted)
@@ -143,17 +156,18 @@ KPartitioningSystem::SupportsResizing(KPartition *partition,
}
// SupportsResizingChild
//! Check whether the add-on supports resizing children of this partition.
bool
KPartitioningSystem::SupportsResizingChild(KPartition *child)
{
return (child && child->Parent() && child->ParentDiskSystem() == this
&& fModule && fModule->supports_resizing_child
&& fModule->supports_resizing_child(
child->Parent()->PartitionData(),
child->PartitionData()));
&& fModule && fModule->supports_resizing_child
&& fModule->supports_resizing_child(child->Parent()->PartitionData(),
child->PartitionData()));
}
// SupportsMoving
//! Check whether the add-on supports moving this partition.
bool
KPartitioningSystem::SupportsMoving(KPartition *partition, bool *isNoOp)
{
@@ -168,28 +182,33 @@ KPartitioningSystem::SupportsMoving(KPartition *partition, bool *isNoOp)
}
// SupportsMovingChild
//! Check whether the add-on supports moving children of this partition.
bool
KPartitioningSystem::SupportsMovingChild(KPartition *child)
{
return (child && child->Parent() && child->ParentDiskSystem() != this
&& fModule && fModule->supports_moving_child
&& fModule->supports_moving_child(child->Parent()->PartitionData(),
child->PartitionData()));
&& fModule && fModule->supports_moving_child
&& fModule->supports_moving_child(child->Parent()->PartitionData(),
child->PartitionData()));
}
// SupportsSettingName
//! Check whether the add-on supports setting name of this partition.
bool
KPartitioningSystem::SupportsSettingName(KPartition *partition)
{
return (partition && partition->ParentDiskSystem() == this
&& fModule && fModule->supports_setting_name
&& fModule->supports_setting_name(partition->PartitionData()));
&& fModule && fModule->supports_setting_name
&& fModule->supports_setting_name(partition->PartitionData()));
}
// SupportsSettingContentName
/*! Check whether the add-on supports setting name of the content of this
partition.
*/
bool
KPartitioningSystem::SupportsSettingContentName(KPartition *partition,
bool *whileMounted)
bool *whileMounted)
{
bool _whileMounted = false;
if (!whileMounted)
@@ -205,28 +224,32 @@ KPartitioningSystem::SupportsSettingContentName(KPartition *partition,
}
// SupportsSettingType
//! Check whether the add-on supports setting type of this partition.
bool
KPartitioningSystem::SupportsSettingType(KPartition *partition)
{
return (partition && partition->ParentDiskSystem() == this
&& fModule && fModule->supports_setting_type
&& fModule->supports_setting_type(partition->PartitionData()));
&& fModule && fModule->supports_setting_type
&& fModule->supports_setting_type(partition->PartitionData()));
}
// SupportsSettingParameters
//! Check whether the add-on supports setting parameters of this partition.
bool
KPartitioningSystem::SupportsSettingParameters(KPartition *partition)
{
return (partition && partition->ParentDiskSystem() == this
&& fModule && fModule->supports_setting_parameters
&& fModule->supports_setting_parameters(
partition->PartitionData()));
&& fModule && fModule->supports_setting_parameters
&& fModule->supports_setting_parameters(partition->PartitionData()));
}
// SupportsSettingContentParameters
/*! Check whether the add-on supports setting parameters of the content of this
partition.
*/
bool
KPartitioningSystem::SupportsSettingContentParameters(KPartition *partition,
bool *whileMounted)
bool *whileMounted)
{
bool _whileMounted = false;
if (!whileMounted)
@@ -242,135 +265,149 @@ KPartitioningSystem::SupportsSettingContentParameters(KPartition *partition,
}
// SupportsInitializing
//! Check whether the add-on supports initializing this partition.
bool
KPartitioningSystem::SupportsInitializing(KPartition *partition)
{
return (partition && fModule && fModule->supports_initializing
&& fModule->supports_initializing(partition->PartitionData()));
&& fModule->supports_initializing(partition->PartitionData()));
}
// SupportsInitializingChild
//! Check whether the add-on supports initializing a child of this partition.
bool
KPartitioningSystem::SupportsInitializingChild(KPartition *child,
const char *diskSystem)
const char *diskSystem)
{
return (child && child->ParentDiskSystem() == this && diskSystem
&& fModule && fModule->supports_initializing_child
&& fModule->supports_initializing_child(child->PartitionData(),
diskSystem));
&& fModule && fModule->supports_initializing_child
&& fModule->supports_initializing_child(child->PartitionData(),
diskSystem));
}
// SupportsCreatingChild
//! Check whether the add-on supports creating children of this partition.
bool
KPartitioningSystem::SupportsCreatingChild(KPartition *partition)
{
return (partition && partition->DiskSystem() == this
&& fModule && fModule->supports_creating_child
&& fModule->supports_creating_child(partition->PartitionData()));
&& fModule && fModule->supports_creating_child
&& fModule->supports_creating_child(partition->PartitionData()));
}
// SupportsDeletingChild
//! Check whether the add-on supports deleting children of this partition.
bool
KPartitioningSystem::SupportsDeletingChild(KPartition *child)
{
return (child && child->Parent() && child->ParentDiskSystem() == this
&& fModule && fModule->supports_deleting_child
&& fModule->supports_deleting_child(
child->Parent()->PartitionData(), child->PartitionData()));
&& fModule && fModule->supports_deleting_child
&& fModule->supports_deleting_child(child->Parent()->PartitionData(),
child->PartitionData()));
}
// IsSubSystemFor
//! Check whether the add-on is a subsystem for a given partition.
bool
KPartitioningSystem::IsSubSystemFor(KPartition *partition)
{
return (partition && fModule && fModule->is_sub_system_for
&& fModule->is_sub_system_for(partition->PartitionData()));
&& fModule->is_sub_system_for(partition->PartitionData()));
}
// ValidateResize
//! Validates parameters for resizing a partition
bool
KPartitioningSystem::ValidateResize(KPartition *partition, off_t *size)
{
return (partition && size && partition->DiskSystem() == this && fModule
&& fModule->validate_resize
&& fModule->validate_resize(partition->PartitionData(), size));
&& fModule->validate_resize
&& fModule->validate_resize(partition->PartitionData(), size));
}
// ValidateResizeChild
//! Validates parameters for resizing a child partition
bool
KPartitioningSystem::ValidateResizeChild(KPartition *child, off_t *size)
{
return (child && size && child->Parent()
&& child->ParentDiskSystem() == this && fModule
&& fModule->validate_resize_child
&& fModule->validate_resize_child(child->Parent()->PartitionData(),
child->PartitionData(), size));
&& child->ParentDiskSystem() == this && fModule
&& fModule->validate_resize_child
&& fModule->validate_resize_child(child->Parent()->PartitionData(),
child->PartitionData(), size));
}
// ValidateMove
//! Validates parameters for moving a partition
bool
KPartitioningSystem::ValidateMove(KPartition *partition, off_t *start)
{
return (partition && start && partition->DiskSystem() == this && fModule
&& fModule->validate_move
&& fModule->validate_move(partition->PartitionData(), start));
&& fModule->validate_move
&& fModule->validate_move(partition->PartitionData(), start));
}
// ValidateMoveChild
//! Validates parameters for moving a child partition
bool
KPartitioningSystem::ValidateMoveChild(KPartition *child, off_t *start)
{
return (child && start && child->Parent()
&& child->ParentDiskSystem() == this && fModule
&& fModule->validate_move_child
&& fModule->validate_move_child(child->Parent()->PartitionData(),
child->PartitionData(), start));
&& child->ParentDiskSystem() == this && fModule
&& fModule->validate_move_child
&& fModule->validate_move_child(child->Parent()->PartitionData(),
child->PartitionData(), start));
}
// ValidateSetName
//! Validates parameters for setting name of a partition
bool
KPartitioningSystem::ValidateSetName(KPartition *partition, char *name)
{
return (partition && name && partition->Parent()
&& partition->ParentDiskSystem() == this && fModule
&& fModule->validate_set_name
&& fModule->validate_set_name(partition->PartitionData(), name));
&& partition->ParentDiskSystem() == this && fModule
&& fModule->validate_set_name
&& fModule->validate_set_name(partition->PartitionData(), name));
}
// ValidateSetContentName
//! Validates parameters for setting name of the content of a partition
bool
KPartitioningSystem::ValidateSetContentName(KPartition *partition, char *name)
{
return (partition && name && partition->DiskSystem() == this
&& fModule && fModule->validate_set_content_name
&& fModule->validate_set_content_name(partition->PartitionData(),
name));
&& fModule && fModule->validate_set_content_name
&& fModule->validate_set_content_name(partition->PartitionData(),
name));
}
// ValidateSetType
//! Validates parameters for setting type of a partition
bool
KPartitioningSystem::ValidateSetType(KPartition *partition, const char *type)
{
return (partition && type && partition->ParentDiskSystem() == this
&& fModule && fModule->validate_set_type
&& fModule->validate_set_type(partition->PartitionData(), type));
&& fModule && fModule->validate_set_type
&& fModule->validate_set_type(partition->PartitionData(), type));
}
// ValidateSetParameters
//! Validates parameters for setting parameters of a partition
bool
KPartitioningSystem::ValidateSetParameters(KPartition *partition,
const char *parameters)
const char *parameters)
{
return (partition && partition->ParentDiskSystem() == this
&& fModule && fModule->validate_set_parameters
&& fModule->validate_set_parameters(partition->PartitionData(),
parameters));
&& fModule && fModule->validate_set_parameters
&& fModule->validate_set_parameters(partition->PartitionData(),
parameters));
}
// ValidateSetContentParameters
//! Validates parameters for setting parameters of the content of a partition
bool
KPartitioningSystem::ValidateSetContentParameters(KPartition *partition,
const char *parameters)
const char *parameters)
{
return (partition && partition->DiskSystem() == this && fModule
&& fModule->validate_set_content_parameters
@@ -379,33 +416,34 @@ KPartitioningSystem::ValidateSetContentParameters(KPartition *partition,
}
// ValidateInitialize
//! Validates parameters for initializing a partition
bool
KPartitioningSystem::ValidateInitialize(KPartition *partition, char *name,
const char *parameters)
const char *parameters)
{
return (partition && name && fModule && fModule->validate_initialize
&& fModule->validate_initialize(partition->PartitionData(), name,
parameters));
&& fModule->validate_initialize(partition->PartitionData(), name,
parameters));
}
// ValidateCreateChild
//! Validates parameters for creating child of a partition
bool
KPartitioningSystem::ValidateCreateChild(KPartition *partition, off_t *start,
off_t *size, const char *type,
const char *parameters, int32 *index)
off_t *size, const char *type, const char *parameters, int32 *index)
{
int32 _index = 0;
if (!index)
index = &_index;
return (partition && start && size && type
&& partition->DiskSystem() == this && fModule
&& fModule->validate_create_child
&& fModule->validate_create_child(partition->PartitionData(),
start, size, type, parameters,
index));
&& partition->DiskSystem() == this && fModule
&& fModule->validate_create_child
&& fModule->validate_create_child(partition->PartitionData(), start,
size, type, parameters, index));
}
// CountPartitionableSpaces
//! Counts partitionable spaces on a partition
int32
KPartitioningSystem::CountPartitionableSpaces(KPartition *partition)
{
@@ -422,10 +460,10 @@ KPartitioningSystem::CountPartitionableSpaces(KPartition *partition)
}
// GetPartitionableSpaces
//! Retrieves a list of partitionable spaces on a partition
status_t
KPartitioningSystem::GetPartitionableSpaces(KPartition *partition,
partitionable_space_data *buffer,
int32 count, int32 *actualCount)
partitionable_space_data *buffer, int32 count, int32 *actualCount)
{
if (!partition || partition->DiskSystem() != this || count > 0 && !buffer
|| !actualCount || !fModule) {
@@ -436,13 +474,14 @@ KPartitioningSystem::GetPartitionableSpaces(KPartition *partition,
return B_ENTRY_NOT_FOUND;
}
return fModule->get_partitionable_spaces(partition->PartitionData(),
buffer, count, actualCount);
buffer, count, actualCount);
}
// GetNextSupportedType
//! Iterates through supported partition types
status_t
KPartitioningSystem::GetNextSupportedType(KPartition *partition, int32 *cookie,
char *type)
char *type)
{
if (!partition || partition->DiskSystem() != this || !cookie || !type
|| !fModule) {
@@ -455,6 +494,7 @@ KPartitioningSystem::GetNextSupportedType(KPartition *partition, int32 *cookie,
}
// GetTypeForContentType
//! Translates the "pretty" content type to an internal type
status_t
KPartitioningSystem::GetTypeForContentType(const char *contentType, char *type)
{
@@ -466,9 +506,10 @@ KPartitioningSystem::GetTypeForContentType(const char *contentType, char *type)
}
// ShadowPartitionChanged
//! Calls for additional modifications when shadow partition is changed
status_t
KPartitioningSystem::ShadowPartitionChanged(KPartition *partition,
uint32 operation)
uint32 operation)
{
if (!partition)
return B_BAD_VALUE;
@@ -482,6 +523,7 @@ KPartitioningSystem::ShadowPartitionChanged(KPartition *partition,
}
// Repair
//! Repairs a partition
status_t
KPartitioningSystem::Repair(KPartition *partition, bool checkOnly,
KDiskDeviceJob *job)
@@ -491,15 +533,17 @@ KPartitioningSystem::Repair(KPartition *partition, bool checkOnly,
}
// Resize
//! Resizes a partition
status_t
KPartitioningSystem::Resize(KPartition *partition, off_t size,
KDiskDeviceJob *job)
KDiskDeviceJob *job)
{
// check parameters
if (!partition || !job || size < 0)
return B_BAD_VALUE;
if (!fModule->resize)
return B_ENTRY_NOT_FOUND;
// lock partition and open partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(partition->ID());
@@ -516,23 +560,27 @@ KPartitioningSystem::Resize(KPartition *partition, off_t size,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->resize(fd, partition->ID(), size, job->ID());
// cleanup and return
close(fd);
return result;
}
// ResizeChild
//! Resizes child of a partition
status_t
KPartitioningSystem::ResizeChild(KPartition *child, off_t size,
KDiskDeviceJob *job)
KDiskDeviceJob *job)
{
// check parameters
if (!child || !job || !child->Parent() || size < 0)
return B_BAD_VALUE;
if (!fModule->resize_child)
return B_ENTRY_NOT_FOUND;
// lock partition and open (parent) partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(child->ID());
@@ -550,23 +598,27 @@ KPartitioningSystem::ResizeChild(KPartition *child, off_t size,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->resize_child(fd, child->ID(), size, job->ID());
// cleanup and return
close(fd);
return result;
}
// Move
//! Moves a partition
status_t
KPartitioningSystem::Move(KPartition *partition, off_t offset,
KDiskDeviceJob *job)
KDiskDeviceJob *job)
{
// check parameters
if (!partition || !job)
return B_BAD_VALUE;
if (!fModule->move)
return B_ENTRY_NOT_FOUND;
// lock partition and open partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(partition->ID());
@@ -583,23 +635,27 @@ KPartitioningSystem::Move(KPartition *partition, off_t offset,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->move(fd, partition->ID(), offset, job->ID());
// cleanup and return
close(fd);
return result;
}
// MoveChild
//! Moves child of a partition
status_t
KPartitioningSystem::MoveChild(KPartition *child, off_t offset,
KDiskDeviceJob *job)
KDiskDeviceJob *job)
{
// check parameters
if (!child || !job || !child->Parent())
return B_BAD_VALUE;
if (!fModule->move_child)
return B_ENTRY_NOT_FOUND;
// lock partition and open (parent) partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(child->ID());
@@ -617,23 +673,28 @@ KPartitioningSystem::MoveChild(KPartition *child, off_t offset,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->move_child(fd, child->Parent()->ID(), child->ID(), offset, job->ID());
status_t result = fModule->move_child(fd, child->Parent()->ID(),
child->ID(), offset, job->ID());
// cleanup and return
close(fd);
return result;
}
// SetName
//! Sets name of a partition
status_t
KPartitioningSystem::SetName(KPartition *partition, char *name,
KDiskDeviceJob *job)
KDiskDeviceJob *job)
{
// check parameters
if (!partition || !job || !name)
return B_BAD_VALUE;
if (!fModule->set_name)
return B_ENTRY_NOT_FOUND;
// lock partition and open partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(partition->ID());
@@ -650,23 +711,27 @@ KPartitioningSystem::SetName(KPartition *partition, char *name,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->set_name(fd, partition->ID(), name, job->ID());
// cleanup and return
close(fd);
return result;
}
// SetContentName
//! Sets name of the content of a partition
status_t
KPartitioningSystem::SetContentName(KPartition *partition, char *name,
KDiskDeviceJob *job)
KDiskDeviceJob *job)
{
// check parameters
if (!partition || !job || !name)
return B_BAD_VALUE;
if (!fModule->set_content_name)
return B_ENTRY_NOT_FOUND;
// lock partition and open partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(partition->ID());
@@ -683,23 +748,28 @@ KPartitioningSystem::SetContentName(KPartition *partition, char *name,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->set_content_name(fd, partition->ID(), name, job->ID());
status_t result = fModule->set_content_name(fd, partition->ID(), name,
job->ID());
// cleanup and return
close(fd);
return result;
}
// SetType
//! Sets type of a partition
status_t
KPartitioningSystem::SetType(KPartition *partition, char *type,
KDiskDeviceJob *job)
KDiskDeviceJob *job)
{
// check parameters
if (!partition || !job || !type)
return B_BAD_VALUE;
if (!fModule->set_type)
return B_ENTRY_NOT_FOUND;
// lock partition and open partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(partition->ID());
@@ -716,23 +786,27 @@ KPartitioningSystem::SetType(KPartition *partition, char *type,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->set_type(fd, partition->ID(), type, job->ID());
// cleanup and return
close(fd);
return result;
}
// SetParameters
//! Sets parameters of a partition
status_t
KPartitioningSystem::SetParameters(KPartition *partition,
const char *parameters, KDiskDeviceJob *job)
const char *parameters, KDiskDeviceJob *job)
{
// check parameters
if (!partition || !job || !parameters)
return B_BAD_VALUE;
if (!fModule->set_parameters)
return B_ENTRY_NOT_FOUND;
// lock partition and open partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(partition->ID());
@@ -749,24 +823,28 @@ KPartitioningSystem::SetParameters(KPartition *partition,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->set_parameters(fd, partition->ID(), parameters, job->ID());
status_t result = fModule->set_parameters(fd, partition->ID(), parameters,
job->ID());
// cleanup and return
close(fd);
return result;
}
// SetContentParameters
//! Sets parameters of the content of a partition
status_t
KPartitioningSystem::SetContentParameters(KPartition *partition,
const char *parameters,
KDiskDeviceJob *job)
const char *parameters, KDiskDeviceJob *job)
{
// check parameters
if (!partition || !job || !parameters)
return B_BAD_VALUE;
if (!fModule->set_content_parameters)
return B_ENTRY_NOT_FOUND;
// lock partition and open partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(partition->ID());
@@ -783,23 +861,28 @@ KPartitioningSystem::SetContentParameters(KPartition *partition,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->set_content_parameters(fd, partition->ID(), parameters, job->ID());
status_t result = fModule->set_content_parameters(fd, partition->ID(),
parameters, job->ID());
// cleanup and return
close(fd);
return result;
}
// Initialize
//! Initializes a partition with this partitioning system
status_t
KPartitioningSystem::Initialize(KPartition *partition, const char *name,
const char *parameters, KDiskDeviceJob *job)
const char *parameters, KDiskDeviceJob *job)
{
// check parameters
if (!partition || !job || !name /*|| !parameters*/)
return B_BAD_VALUE;
if (!fModule->initialize)
return B_ENTRY_NOT_FOUND;
// lock partition and open partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(partition->ID());
@@ -816,25 +899,29 @@ KPartitioningSystem::Initialize(KPartition *partition, const char *name,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->initialize(fd, partition->ID(), name, parameters, job->ID());
status_t result = fModule->initialize(fd, partition->ID(), name, parameters,
job->ID());
// cleanup and return
close(fd);
return result;
}
// CreateChild
//! Creates a child partition
status_t
KPartitioningSystem::CreateChild(KPartition *partition, off_t offset,
off_t size, const char *type,
const char *parameters, KDiskDeviceJob *job,
KPartition **child, partition_id childID)
off_t size, const char *type, const char *parameters, KDiskDeviceJob *job,
KPartition **child, partition_id childID)
{
// check parameters
if (!partition || !job || !type /*|| !parameters*/ || !child)
return B_BAD_VALUE;
if (!fModule->create_child)
return B_ENTRY_NOT_FOUND;
// lock partition and open partition device
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *_partition = manager->WriteLockPartition(partition->ID());
@@ -851,9 +938,10 @@ KPartitioningSystem::CreateChild(KPartition *partition, off_t offset,
if (result != B_OK)
return result;
}
// let the module do its job
status_t result = fModule->create_child(fd, partition->ID(), offset, size,
type, parameters, job->ID(), &childID);
type, parameters, job->ID(), &childID);
// find and return the child
*child = manager->FindPartition(childID, false);
@@ -864,6 +952,7 @@ KPartitioningSystem::CreateChild(KPartition *partition, off_t offset,
}
// DeleteChild
//! Deletes a child partition
status_t
KPartitioningSystem::DeleteChild(KPartition *child, KDiskDeviceJob *job)
{
@@ -889,4 +978,3 @@ KPartitioningSystem::UnloadModule()
fModule = NULL;
}
}
@@ -973,7 +973,7 @@ _user_validate_initialize_partition(partition_id partitionID,
diskSystemName, name, parameters);
}
if (!error)
error = ddm_strlcpy(name, _name, B_DISK_DEVICE_NAME_LENGTH);
error = ddm_strlcpy(_name, name, B_DISK_DEVICE_NAME_LENGTH);
free(parameters);
return error;
}
@@ -1,8 +1,14 @@
// KCreateChildJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#include "KCreateChildJob.h"
#include <KernelExport.h>
#include <DiskDeviceDefs.h>
#include <KDiskDevice.h>
@@ -16,99 +22,108 @@
#include "ddm_operation_validation.h"
/**
Creates the job.
KCreateChildJob::KCreateChildJob(partition_id partition, partition_id child, off_t offset,
off_t size, const char *type, const char *parameters)
: KDiskDeviceJob( B_DISK_DEVICE_JOB_CREATE, partition, partition ),
fChildID( child ), fOffset( offset ), fSize( size ),
fType ( !type ? NULL : strcpy ( new char[strlen(type)+1], type ) ),
fParameters( !parameters ? NULL : strcpy( new char[strlen(parameters)+1], parameters ) )
\param partition whose children should we create
\param child new child ID
\param offset where the child should start
\param size size of the new child
\param parameters additional parameters for the operation
*/
KCreateChildJob::KCreateChildJob(partition_id partition, partition_id child,
off_t offset, off_t size, const char *type, const char *parameters)
: KDiskDeviceJob(B_DISK_DEVICE_JOB_CREATE, partition, partition),
fChildID(child),
fOffset(offset),
fSize(size),
fType (!type ? NULL : strdup(type)),
fParameters(!parameters ? NULL : strdup(parameters))
{
SetDescription( "creating child of the partition" );
}
KCreateChildJob::~KCreateChildJob() {}
KCreateChildJob::~KCreateChildJob()
{
free(fType);
free(fParameters);
}
/**
* Do the actual creation
*
* \note in time of calling the \c KDiskSystem function for creating child, the partition is NOT locked
*/
status_t KCreateChildJob::Do() {
KDiskDeviceManager * manager = KDiskDeviceManager::Default();
KPartition * partition = manager->WriteLockPartition( PartitionID() );
if( partition ) {
status_t
KCreateChildJob::Do()
{
KDiskDeviceManager* manager = KDiskDeviceManager::Default();
KPartition* partition = manager->WriteLockPartition(PartitionID());
if (partition) {
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
DeviceWriteLocker locker(partition->Device(), true);
if (!partition->DiskSystem()) {
SetErrorMessage("Partition has no disk system!");
return B_BAD_VALUE;
}
// all descendants should be marked busy/descendant busy
if ( isPartitionNotBusy( partition ) ) {
if (IsPartitionNotBusy(partition)) {
SetErrorMessage("Can't create child of non-busy partition!");
return B_ERROR;
}
KPartition * childPartition = manager->WriteLockPartition( fChildID );
if( !childPartition ) {
//TODO
KPartition* childPartition = manager->WriteLockPartition(fChildID);
if (!childPartition) {
// TODO
}
off_t newOffset = fOffset;
off_t newSize = fSize;
status_t validation_result = validate_create_child_partition (
partition, partition->ChangeCounter(),
&newOffset, &fSize, fType,
fParameters, NULL, false
);
if( validation_result != B_OK ) {
SetErrorMessage( "Validating of creating new child failed!" );
return validation_result;
status_t validationResult = validate_create_child_partition(
partition, partition->ChangeCounter(),
&newOffset, &fSize, fType,
fParameters, NULL, false);
if (validationResult != B_OK) {
SetErrorMessage("Validating of creating new child failed!");
return validationResult;
}
if( newOffset != fOffset ) {
SetErrorMessage( "Requested offset is not valid." );
if (newOffset != fOffset) {
SetErrorMessage("Requested offset is not valid.");
return B_ERROR;
}
if( newSize != fSize ) {
SetErrorMessage( "Requested size is not valid" );
if (newSize != fSize) {
SetErrorMessage("Requested size is not valid");
}
KDiskSystem *diskSystem = partition->DiskSystem();
DiskSystemLoader loader(diskSystem);
KPartition * newChild = 0;
KPartition *newChild = 0;
locker.Unlock();
status_t create_result = diskSystem->CreateChild(
partition, newOffset, newSize, fType,
fParameters, this, &newChild, fChildID );
if( create_result != B_OK ) {
SetErrorMessage( "Creating new partition child failed!" );
return create_result;
status_t createResult = diskSystem->CreateChild(partition, newOffset,
newSize, fType, fParameters, this, &newChild, fChildID);
if (createResult != B_OK) {
SetErrorMessage("Creating new partition child failed!");
return createResult;
}
return B_OK;
}
else {
SetErrorMessage( "Couldn't find partition." );
SetErrorMessage("Couldn't find partition.");
return B_ENTRY_NOT_FOUND;
}
}
@@ -1,5 +1,11 @@
// KCreateChildJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#ifndef _K_DISK_DEVICE_CREATE_CHILD_JOB_H
#define _K_DISK_DEVICE_CREATE_CHILD_JOB_H
@@ -13,26 +19,18 @@ namespace DiskDevice {
*/
class KCreateChildJob : public KDiskDeviceJob {
public:
/**
* Creates the job.
*
* \param partition whose children should we create
* \param child new child ID
* \param offset where the child should start
* \param size size of the new child
* \param parameters additional parameters for the operation
*/
KCreateChildJob(partition_id partition, partition_id child, off_t offset,
off_t size, const char *type, const char *parameters);
off_t size, const char *type, const char *parameters);
virtual ~KCreateChildJob();
virtual status_t Do();
private:
partition_id fChildID;
off_t fOffset, fSize;
char * fType;
char * fParameters;
partition_id fChildID;
off_t fOffset;
off_t fSize;
char* fType;
char* fParameters;
};
@@ -1,4 +1,11 @@
// KDefragmentJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#include "KDefragmentJob.h"
@@ -16,77 +23,83 @@
#include "ddm_operation_validation.h"
/**
Creates the job
\param partition which device should we defragment
*/
KDefragmentJob::KDefragmentJob(partition_id partition)
: KDiskDeviceJob( B_DISK_DEVICE_JOB_DEFRAGMENT, partition, partition )
: KDiskDeviceJob(B_DISK_DEVICE_JOB_DEFRAGMENT, partition, partition)
{
SetDescription( "defragmenting partition" );
SetDescription("defragmenting partition");
}
KDefragmentJob::~KDefragmentJob() {}
KDefragmentJob::~KDefragmentJob()
{
}
status_t KDefragmentJob::Do(){
KDiskDeviceManager * manager = KDiskDeviceManager::Default();
KPartition * partition = manager->WriteLockPartition( PartitionID() );
if( partition ) {
status_t
KDefragmentJob::Do()
{
KDiskDeviceManager* manager = KDiskDeviceManager::Default();
KPartition* partition = manager->WriteLockPartition(PartitionID());
if (partition) {
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
DeviceWriteLocker locker(partition->Device(), true);
//some basic checks
// some basic checks
if (!partition->DiskSystem()) {
SetErrorMessage("Partition has no disk system!");
return B_BAD_VALUE;
}
// all descendants should be marked busy/descendant busy
if ( isPartitionNotBusy( partition ) ) {
if (IsPartitionNotBusy(partition) ) {
SetErrorMessage("Can't defragment non-busy partition!");
return B_ERROR;
}
bool whileMounted;
//OK, seems alright, let's validate the job
status_t validation_result = validate_defragment_partition(
partition, partition->ChangeCounter(),
&whileMounted, false);
if( validation_result != B_OK ) {
SetErrorMessage( "Validation of defragmenting partition failed.");
return validation_result;
// OK, seems alright, let's validate the job
status_t validationResult = validate_defragment_partition(
partition, partition->ChangeCounter(), &whileMounted, false);
if (validationResult != B_OK) {
SetErrorMessage("Validation of defragmenting partition failed.");
return validationResult;
}
if( !whileMounted && partition->IsMounted() ) {
SetErrorMessage( "This partition cannot be defragmented while mounted." );
if (!whileMounted && partition->IsMounted()) {
SetErrorMessage("This partition cannot be defragmented while "
"mounted." );
return B_ERROR;
}
//everything OK, let's do the job!
// everything OK, let's do the job!
KDiskSystem *diskSystem = partition->DiskSystem();
DiskSystemLoader loader(diskSystem);
locker.Unlock();
status_t defrag_result = diskSystem->Defragment( partition, this );
if( defrag_result != B_OK ) {
SetErrorMessage( "Defragmenting partition failed!" );
return defrag_result;
status_t defragResult = diskSystem->Defragment(partition, this);
if (defragResult != B_OK) {
SetErrorMessage("Defragmenting partition failed!");
return defragResult;
}
return B_OK;
} else {
SetErrorMessage( "Couldn't find partition!" );
SetErrorMessage("Couldn't find partition!");
return B_ENTRY_NOT_FOUND;
}
}
@@ -1,5 +1,11 @@
// KDefragmentJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#ifndef _K_DISK_DEVICE_DEFRAGMENT_JOB_H
#define _K_DISK_DEVICE_DEFRAGMENT_JOB_H
@@ -13,12 +19,6 @@ namespace DiskDevice {
*/
class KDefragmentJob : public KDiskDeviceJob {
public:
/**
* Creates the job
*
* \param partition which device should we defragment
*/
KDefragmentJob(partition_id partition);
virtual ~KDefragmentJob();
@@ -1,9 +1,14 @@
// KDeleteChildJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#include "KDeleteChildJob.h"
#include <KernelExport.h>
#include <DiskDeviceDefs.h>
#include <KDiskDevice.h>
@@ -17,64 +22,73 @@
#include "ddm_operation_validation.h"
/*!
Creates the job
\param parent device of the deleted partition
\param partition partition supposed to be removed
*/
KDeleteChildJob::KDeleteChildJob(partition_id parent, partition_id partition)
: KDiskDeviceJob( B_DISK_DEVICE_JOB_DELETE, partition, parent )
: KDiskDeviceJob(B_DISK_DEVICE_JOB_DELETE, partition, parent)
{
SetDescription( "deleting child of the partition" );
SetDescription("deleting child of the partition");
}
KDeleteChildJob::~KDeleteChildJob() {}
status_t KDeleteChildJob::Do(){
KDiskDeviceManager * manager = KDiskDeviceManager::Default();
KPartition * partition = manager->WriteLockPartition( PartitionID() );
if( partition ) {
KDeleteChildJob::~KDeleteChildJob()
{
}
status_t
KDeleteChildJob::Do()
{
KDiskDeviceManager* manager = KDiskDeviceManager::Default();
KPartition* partition = manager->WriteLockPartition(PartitionID());
if (partition) {
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
DeviceWriteLocker locker(partition->Device(), true);
if (!partition->ParentDiskSystem()) {
SetErrorMessage("Partition has no parent disk system!");
return B_BAD_VALUE;
}
// all descendants should be marked busy/descendant busy
if ( isPartitionNotBusy( partition ) ) {
if (IsPartitionNotBusy( partition)) {
SetErrorMessage("Can't delete child of non-busy partition!");
return B_ERROR;
}
status_t validation_result = validate_delete_child_partition(
partition, partition->ChangeCounter(),
false);
if( validation_result != B_OK ) {
SetErrorMessage( "Validation of deleting child failed!" );
return validation_result;
status_t validationResult = validate_delete_child_partition(
partition, partition->ChangeCounter(), false);
if (validationResult != B_OK) {
SetErrorMessage("Validation of deleting child failed!");
return validationResult;
}
//everything OK, let's do the job!
// everything OK, let's do the job!
KDiskSystem *parentDiskSystem = partition->ParentDiskSystem();
DiskSystemLoader loader(parentDiskSystem );
locker.Unlock();
status_t delete_result = parentDiskSystem->DeleteChild( partition, this );
if( delete_result != B_OK ) {
SetErrorMessage( "Deleting child failed!" );
return delete_result;
status_t deleteResult = parentDiskSystem->DeleteChild(partition, this);
if (deleteResult != B_OK) {
SetErrorMessage("Deleting child failed!");
return deleteResult;
}
return B_OK;
} else {
SetErrorMessage( "Couldn't find partition!" );
SetErrorMessage("Couldn't find partition!");
return B_ENTRY_NOT_FOUND;
}
}
@@ -1,5 +1,11 @@
// KDeleteChildJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#ifndef _K_DISK_DEVICE_DELETE_CHILD_JOB_H
#define _K_DISK_DEVICE_DELETE_CHILD_JOB_H
@@ -13,12 +19,6 @@ namespace DiskDevice {
*/
class KDeleteChildJob : public KDiskDeviceJob {
public:
/**
* Creates the job
*
* \param parent device of the deleted partition
* \param partition partition supposed to be removed
*/
KDeleteChildJob(partition_id parent, partition_id partition);
virtual ~KDeleteChildJob();
@@ -1,4 +1,11 @@
// KInitializeJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#include <stdio.h>
@@ -21,85 +28,97 @@
#define OUT dprintf
KInitializeJob::KInitializeJob(partition_id partition, disk_system_id diskSystemID,
const char *name, const char *parameters)
: KDiskDeviceJob( B_DISK_DEVICE_JOB_INITIALIZE, partition, partition ),
fDiskSystemID( diskSystemID ),
fName( !name ? NULL : strcpy( new char[strlen(name)+1], name ) ),
fParameters( !parameters ? NULL : strcpy( new char[strlen(parameters)+1], parameters ) )
/*!
Creates the job.
\param partition the partition to initialize
\param diskSystemID which disk system the partition should be initialized with
\param parameters additional parameters for the operation
*/
KInitializeJob::KInitializeJob(partition_id partition,
disk_system_id diskSystemID, const char *name, const char *parameters)
: KDiskDeviceJob(B_DISK_DEVICE_JOB_INITIALIZE, partition, partition),
fDiskSystemID(diskSystemID),
fName(!name ? NULL : strdup(name)),
fParameters(!parameters ? NULL : strdup(parameters))
{
SetDescription( "initializing the partition with given disk system" );
SetDescription("initializing the partition with given disk system");
}
KInitializeJob::~KInitializeJob() {
delete[] fParameters;
KInitializeJob::~KInitializeJob()
{
free(fName);
free(fParameters);
}
status_t KInitializeJob::Do() {
status_t
KInitializeJob::Do()
{
DBG(OUT("KInitializeJob::Do(%ld)\n", PartitionID()));
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *partition = manager->WriteLockPartition(PartitionID());
if (partition) {
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
DeviceWriteLocker locker(partition->Device(), true);
// basic checks
// if (!partition->ParentDiskSystem()) {
// SetErrorMessage("Partition has no parent disk system!");
// return B_BAD_VALUE;
// }
// all descendants should be marked busy/descendant busy
if ( isPartitionNotBusy( partition ) ) {
if (IsPartitionNotBusy(partition)) {
SetErrorMessage("Can't initialize non-busy partition!");
return B_ERROR;
}
/* if( !fParameters ) {
/* if (!fParameters) {
//no parameters for the operation
SetErrorMessage( "No parameters for partition initialization." );
return B_ERROR;
}*/
//TODO shouldn't we load the disk system AFTER the validation?
KDiskSystem *diskSystemToInit = manager->LoadDiskSystem( fDiskSystemID );
if( ! diskSystemToInit ) {
SetErrorMessage( "Given DiskSystemID doesn't correspond to any known DiskSystem.");
// TODO shouldn't we load the disk system AFTER the validation?
KDiskSystem *diskSystemToInit = manager->LoadDiskSystem(fDiskSystemID);
if (!diskSystemToInit) {
SetErrorMessage("Given DiskSystemID doesn't correspond to any "
"known DiskSystem.");
return B_BAD_VALUE;
}
DiskSystemLoader loader2(diskSystemToInit);
status_t validation_result = validate_initialize_partition(
partition, partition->ChangeCounter(),
diskSystemToInit->Name(), fName,
fParameters, false );
if( validation_result != B_OK ) {
SetErrorMessage( "Validation of initializing partition failed!" );
return validation_result;
// TODO: The parameters are already validated and should not be changed again!
status_t validationResult = validate_initialize_partition(partition,
partition->ChangeCounter(), diskSystemToInit->Name(), fName,
fParameters, false);
if (validationResult != B_OK) {
SetErrorMessage("Validation of initializing partition failed!");
return validationResult;
}
//everything seems OK -> let's do the job
// everything seems OK -> let's do the job
locker.Unlock();
status_t init_result = diskSystemToInit->Initialize( partition, fName, fParameters, this );
if( init_result != B_OK ) {
SetErrorMessage( "Initialization of partition failed!" );
return init_result;
status_t initResult = diskSystemToInit->Initialize(partition, fName,
fParameters, this);
if (initResult != B_OK) {
SetErrorMessage("Initialization of partition failed!");
return initResult;
}
partition->SetDiskSystem(diskSystemToInit);
return B_OK;
} else {
SetErrorMessage( "Couldn't find partition." );
SetErrorMessage("Couldn't find partition.");
return B_ENTRY_NOT_FOUND;
}
}
@@ -1,5 +1,11 @@
// KInitializeJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#ifndef _K_DISK_DEVICE_INITIALIZE_JOB_H
#define _K_DISK_DEVICE_INITIALIZE_JOB_H
@@ -13,13 +19,6 @@ namespace DiskDevice {
*/
class KInitializeJob : public KDiskDeviceJob {
public:
/**
* Creates the job.
*
* \param partition the partition to initialize
* \param diskSystemID which disk system the partition should be initialized with
* \param parameters additional parameters for the operation
*/
KInitializeJob(partition_id partition, disk_system_id diskSystemID,
const char *name, const char *parameters);
virtual ~KInitializeJob();
@@ -1,4 +1,12 @@
// KMoveJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#include "KMoveJob.h"
#include <stdio.h>
@@ -15,84 +23,95 @@
#include "ddm_operation_validation.h"
// debugging
//#define DBG(x)
#define DBG(x) x
#define OUT dprintf
KMoveJob::KMoveJob(partition_id parentID, partition_id partitionID, off_t offset)
: KDiskDeviceJob(B_DISK_DEVICE_JOB_MOVE, partitionID, parentID ),
fNewOffset(offset)
/**
Creates the job.
\param parentID the device whose child should be moved
\param partitionID the child to move
\param offset where to move
*/
KMoveJob::KMoveJob(partition_id parentID, partition_id partitionID,
off_t offset)
: KDiskDeviceJob(B_DISK_DEVICE_JOB_MOVE, partitionID, parentID),
fNewOffset(offset)
{
SetDescription( "moving partition" );
SetDescription("moving partition");
}
KMoveJob::~KMoveJob() {}
KMoveJob::~KMoveJob()
{
}
status_t KMoveJob::Do() {
status_t
KMoveJob::Do()
{
DBG(OUT( "KMoveJob::Do(%ld)\n", PartitionID() ));
//get the partition
KDiskDeviceManager * manager = KDiskDeviceManager::Default();
// get the partition
KDiskDeviceManager* manager = KDiskDeviceManager::Default();
KPartition *partition = manager->WriteLockPartition(PartitionID());
if (partition) {
//OK, we have the partition, do some checks
// OK, we have the partition, do some checks
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
DeviceWriteLocker locker(partition->Device(), true);
// basic checks
if (!partition->ParentDiskSystem()) {
SetErrorMessage("Partition has no parent disk system!");
return B_BAD_VALUE;
}
if(partition->Offset() == fNewOffset ) {
//we are already on the right place -> nothing to do...
if (partition->Offset() == fNewOffset) {
// we are already on the right place -> nothing to do...
return B_OK;
}
off_t new_offset = fNewOffset;
status_t validate_result = validate_move_partition(partition, partition->ChangeCounter(),
&new_offset, true, false ); //TODO posledni 2 parametry????
if( validate_result != B_OK ) {
SetErrorMessage( "Validation of the new partition offset failed." );
return validate_result;
off_t newOffset = fNewOffset;
status_t validateResult = validate_move_partition(partition,
partition->ChangeCounter(), &newOffset, true, false);
// TODO posledni 2 parametry????
// TODO: Huh?
if (validateResult != B_OK) {
SetErrorMessage("Validation of the new partition offset failed.");
return validateResult;
}
if( new_offset != fNewOffset ) {
SetErrorMessage( "Requested partition offset not valid." );
if (newOffset != fNewOffset) {
SetErrorMessage("Requested partition offset not valid.");
return B_ERROR;
}
// all descendants should be marked busy/descendant busy
if ( isPartitionNotBusy( partition ) ) {
if (IsPartitionNotBusy(partition)) {
SetErrorMessage("Can't move non-busy partition!");
return B_ERROR;
}
//get all necessary objects
// get all necessary objects
KDiskSystem *parentDiskSystem = partition->ParentDiskSystem();
KDiskSystem *childDiskSystem = partition->DiskSystem();
locker.Unlock();
status_t move_result = parentDiskSystem->Move( partition, fNewOffset, this );
if( move_result != B_OK ) {
SetErrorMessage( "Moving of partition failed." );
status_t moveResult = parentDiskSystem->Move(partition, fNewOffset,
this);
if (moveResult != B_OK) {
SetErrorMessage("Moving of partition failed.");
}
return move_result;
//do the move
return moveResult;
} else {
SetErrorMessage("Couldn't find partition.");
return B_ENTRY_NOT_FOUND;
}
return B_ERROR;
}
@@ -1,10 +1,17 @@
// KMoveJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#ifndef _K_DISK_DEVICE_MOVE_JOB_H
#define _K_DISK_DEVICE_MOVE_JOB_H
#include "KDiskDeviceJob.h"
namespace BPrivate {
namespace DiskDevice {
@@ -13,19 +20,11 @@ namespace DiskDevice {
*/
class KMoveJob : public KDiskDeviceJob {
public:
/**
* Creates the job.
*
* \param parentID the device whose child should be moved
* \param partitionID the child to move
* \param offset where to move
*/
KMoveJob(partition_id parentID, partition_id partitionID, off_t offset);
virtual ~KMoveJob();
virtual status_t Do();
private:
off_t fNewOffset;
};
@@ -1,8 +1,14 @@
// KRepairJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#include "KRepairJob.h"
#include <KernelExport.h>
#include <DiskDeviceDefs.h>
#include <KDiskDevice.h>
@@ -16,80 +22,80 @@
#include "ddm_operation_validation.h"
/**
Creates the job.
\param partition the partition which should be repared
\param checkOnly when true, the partition is only checked, but no actual
repairs are proceeded
*/
KRepairJob::KRepairJob(partition_id partition, bool checkOnly)
: KDiskDeviceJob( B_DISK_DEVICE_JOB_REPAIR, partition, partition ),
fCheckOnly( checkOnly )
: KDiskDeviceJob(B_DISK_DEVICE_JOB_REPAIR, partition, partition),
fCheckOnly( checkOnly )
{
SetDescription( "repairing partition" );
SetDescription("repairing partition");
}
KRepairJob::~KRepairJob() {}
status_t KRepairJob::Do(){
KDiskDeviceManager * manager = KDiskDeviceManager::Default();
KPartition * partition = manager->WriteLockPartition( PartitionID() );
if( partition ) {
KRepairJob::~KRepairJob()
{
}
status_t
KRepairJob::Do()
{
KDiskDeviceManager* manager = KDiskDeviceManager::Default();
KPartition* partition = manager->WriteLockPartition(PartitionID());
if (partition) {
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
DeviceWriteLocker locker(partition->Device(), true);
//basic checks
if( !partition->DiskSystem() ) {
SetErrorMessage( "Partition has no disk system." );
// basic checks
if (!partition->DiskSystem()) {
SetErrorMessage("Partition has no disk system.");
return B_BAD_VALUE;
}
if ( isPartitionNotBusy( partition ) ) {
if (IsPartitionNotBusy(partition)) {
SetErrorMessage("Can't repair non-busy partition!");
return B_ERROR;
}
bool whileMounted;
status_t validation_result = validate_repair_partition(
partition, partition->ChangeCounter(),
fCheckOnly, &whileMounted,
false);
if( validation_result != B_OK ) {
SetErrorMessage( "Validation repairing partition failed!" );
return validation_result;
status_t validationResult = validate_repair_partition(partition,
partition->ChangeCounter(), fCheckOnly, &whileMounted, false);
if (validationResult != B_OK) {
SetErrorMessage("Validation repairing partition failed!");
return validationResult;
}
//everything OK, let's do the job
KDiskSystem * diskSystem = partition->DiskSystem();
// everything OK, let's do the job
KDiskSystem* diskSystem = partition->DiskSystem();
DiskSystemLoader loader(diskSystem);
locker.Unlock();
status_t repair_result = diskSystem->Repair( partition, fCheckOnly, this );
if( repair_result != B_OK ) {
if( fCheckOnly ) {
SetErrorMessage( "Checking for repairing partition failed!" );
status_t repairResult = diskSystem->Repair(partition, fCheckOnly, this);
if (repairResult != B_OK) {
if (fCheckOnly) {
SetErrorMessage("Checking for repairing partition failed!");
} else {
SetErrorMessage( "Repairing partition failed!" );
SetErrorMessage("Repairing partition failed!");
}
return repair_result;
return repairResult;
}
return B_OK;
}else {
SetErrorMessage( "Couldn't find partition!" );
} else {
SetErrorMessage("Couldn't find partition!");
return B_ENTRY_NOT_FOUND;
}
}
@@ -1,10 +1,17 @@
// KRepairJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#ifndef _K_DISK_DEVICE_REPAIR_JOB_H
#define _K_DISK_DEVICE_REPAIR_JOB_H
#include "KDiskDeviceJob.h"
namespace BPrivate {
namespace DiskDevice {
@@ -13,13 +20,6 @@ namespace DiskDevice {
*/
class KRepairJob : public KDiskDeviceJob {
public:
/**
* Creates the job.
*
* \param partition the partition which should be repared
* \param checkOnly when true, the partition is only checked, but no actual
* repairs are proceeded
*/
KRepairJob(partition_id partition, bool checkOnly);
virtual ~KRepairJob();
@@ -1,4 +1,10 @@
// KResizeJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
*/
#include <stdio.h>
@@ -14,30 +20,42 @@
#include "ddm_operation_validation.h"
#include "KResizeJob.h"
// debugging
//#define DBG(x)
#define DBG(x) x
#define OUT dprintf
// constructor
/**
Creates the job.
\param parentID the device whose child should be resized
\param partitionID the partition which should be resized
\param size new size for the partition
*/
KResizeJob::KResizeJob(partition_id parentID, partition_id partitionID,
off_t size)
off_t size)
: KDiskDeviceJob(B_DISK_DEVICE_JOB_RESIZE, partitionID, parentID),
fSize(size)
{
SetDescription("resizing partition");
}
// destructor
KResizeJob::~KResizeJob()
{
}
// Do
status_t
KResizeJob::Do()
{
DBG(OUT("KResizeJob::Do(%ld)\n", PartitionID()));
// get the partition
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *partition = manager->WriteLockPartition(PartitionID());
@@ -45,14 +63,17 @@ KResizeJob::Do()
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
DeviceWriteLocker locker(partition->Device(), true);
// basic checks
if (!partition->ParentDiskSystem()) {
SetErrorMessage("Partition has no parent disk system!");
return B_BAD_VALUE;
}
// if size remains the same, then nothing's to do
if (partition->Size() == fSize)
return B_OK;
// check new size
off_t size = fSize;
off_t contentSize = fSize;
@@ -66,6 +87,7 @@ KResizeJob::Do()
SetErrorMessage("Requested size is not valid.");
return B_ERROR;
}
// all descendants should be marked busy/descendant busy
struct IsNotBusyVisitor : KPartitionVisitor {
virtual bool VisitPre(KPartition *partition)
@@ -77,6 +99,7 @@ KResizeJob::Do()
SetErrorMessage("Can't resize non-busy partition!");
return B_ERROR;
}
// things look good: get all infos needed for resizing
KDiskSystem *parentDiskSystem = partition->ParentDiskSystem();
KDiskSystem *childDiskSystem = partition->DiskSystem();
@@ -84,34 +107,39 @@ KResizeJob::Do()
DiskSystemLoader loader2(childDiskSystem);
off_t oldSize = partition->Size();
off_t oldContentSize = partition->ContentSize();
// unlock the device and resize the beast
locker.Unset();
// if growing, resize partition first
if (oldSize < fSize) {
status_t error = parentDiskSystem->ResizeChild(partition, fSize,
this);
this);
if (error != B_OK)
return error;
}
// resize contents
if (childDiskSystem && oldContentSize != contentSize) {
status_t error = childDiskSystem->Resize(partition, contentSize,
this);
this);
if (error != B_OK)
return error;
}
// if shrinking, resize partition last
if (oldSize > fSize) {
status_t error = parentDiskSystem->ResizeChild(partition, fSize,
this);
this);
if (error != B_OK)
return error;
}
return B_OK;
} else {
SetErrorMessage("Couldn't find partition.");
return B_ENTRY_NOT_FOUND;
}
// cannot come here
return B_ERROR;
}
@@ -1,5 +1,10 @@
// KResizeJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
*/
#ifndef _K_DISK_DEVICE_RESIZE_JOB_H
#define _K_DISK_DEVICE_RESIZE_JOB_H
@@ -13,13 +18,6 @@ namespace DiskDevice {
*/
class KResizeJob : public KDiskDeviceJob {
public:
/**
* Creates the job.
*
* \param parentID the device whose child should be resized
* \param partitionID the partition which should be resized
* \param size new size for the partition
*/
KResizeJob(partition_id parentID, partition_id partitionID, off_t size);
virtual ~KResizeJob();
@@ -1,4 +1,10 @@
// KScanPartitionJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
*/
#include <KernelExport.h>
@@ -18,6 +24,11 @@
#define OUT dprintf
/**
Creates the job.
\param partitionID the partition to scan
*/
KScanPartitionJob::KScanPartitionJob(partition_id partitionID)
: KDiskDeviceJob(B_DISK_DEVICE_JOB_SCAN, partitionID)
{
@@ -33,12 +44,6 @@ KScanPartitionJob::~KScanPartitionJob()
status_t
KScanPartitionJob::Do()
{
/*#ifdef _BOOT_MODE
OUT( "\nScanJob boot mode\n\n" );
#else
OUT( "\nScanJob NOT boot mode\n\n" );
#endif*/
// get the partition
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *partition = manager->WriteLockPartition(PartitionID());
@@ -1,5 +1,10 @@
// KScanPartitionJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
*/
#ifndef _K_DISK_DEVICE_SCAN_PARTITION_JOB_H
#define _K_DISK_DEVICE_SCAN_PARTITION_JOB_H
@@ -15,20 +20,12 @@ class KPartition;
*/
class KScanPartitionJob : public KDiskDeviceJob {
public:
/**
* Creates the job.
*
* \param partitionID the partition to scan
*/
KScanPartitionJob(partition_id partitionID);
virtual ~KScanPartitionJob();
virtual status_t Do();
private:
/**
* Do the actual scan.
*/
status_t _ScanPartition(KPartition *partition);
};
@@ -1,3 +1,10 @@
/*
* Copyright 2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Lubos Kulic <lubos@radical.ed>
*/
#include "KSetNameJob.h"
@@ -14,122 +21,128 @@
#include "ddm_operation_validation.h"
KSetNameJob::KSetNameJob(partition_id parentID, partition_id partitionID, const char * name,
const char * contentName)
/**
Creates the job.
\param partitionID the partition/device whose name should be set
\param name the new name for \c partitionID
\param contentName the new name for the content of \c partitionID
*/
KSetNameJob::KSetNameJob(partition_id parentID, partition_id partitionID,
const char* name, const char* contentName)
: KDiskDeviceJob(B_DISK_DEVICE_JOB_SET_NAME, partitionID, parentID),
fName( !name ? NULL : strcpy( new char[strlen(name)+1], name ) ),
fContentName( !contentName ? NULL : strcpy( new char[strlen(contentName)+1], contentName ) )
fName(!name ? NULL : strdup(name)),
fContentName(!contentName ? NULL : strdup(contentName))
{
SetDescription( "setting name for the partition or its content" );
SetDescription("setting name for the partition or its content");
}
KSetNameJob::~KSetNameJob()
{
delete[] fName;
delete[] fContentName;
free(fName);
free(fContentName);
}
status_t KSetNameJob::Do() {
KDiskDeviceManager * manager = KDiskDeviceManager::Default();
KPartition * partition = manager->WriteLockPartition( PartitionID() );
if( partition ) {
if( !fName && !fContentName ) {
SetErrorMessage( "No name to set." );
status_t
KSetNameJob::Do()
{
KDiskDeviceManager* manager = KDiskDeviceManager::Default();
KPartition* partition = manager->WriteLockPartition(PartitionID());
if (partition) {
if (!fName && !fContentName) {
SetErrorMessage("No name to set.");
return B_BAD_VALUE;
}
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
//TODO is lock necessary?
// TODO is lock necessary?
DeviceWriteLocker locker(partition->Device(), true);
//basic checks
// basic checks
// all descendants should be marked busy/descendant busy
if ( isPartitionNotBusy( partition ) ) {
if (IsPartitionNotBusy(partition)) {
SetErrorMessage("Can't set name for non-busy partition!");
return B_ERROR;
}
if( fName ) {
//set name of the partition
//setting name of this partition -> via our parent disk system
if( !partition->ParentDiskSystem() ) {
SetErrorMessage( "Partition has no parent disk system!" );
if (fName) {
// set name of the partition
// setting name of this partition -> via our parent disk system
if (!partition->ParentDiskSystem()) {
SetErrorMessage("Partition has no parent disk system!");
return B_BAD_VALUE;
}
//TODO mayebe give copy of name
status_t validation_result = validate_set_partition_name(
partition, partition->ChangeCounter(),
fName, false);
if( validation_result != B_OK) {
// TODO maybe give copy of name
// TODO: The parameters are already validated and should not be changed again!
status_t validationResult = validate_set_partition_name(
partition, partition->ChangeCounter(), fName, false);
if( validationResult != B_OK) {
SetErrorMessage( "Validation of setting partition name failed!" );
return validation_result;
return validationResult;
}
//everything OK, let's do the job
KDiskSystem * parentDiskSystem = partition->ParentDiskSystem();
// everything OK, let's do the job
KDiskSystem* parentDiskSystem = partition->ParentDiskSystem();
DiskSystemLoader loader(parentDiskSystem);
locker.Unlock();
status_t set_name_result = parentDiskSystem->SetName(partition, fName, this);
if( set_name_result != B_OK ) {
status_t setNameResult = parentDiskSystem->SetName(partition, fName,
this);
if (setNameResult != B_OK) {
SetErrorMessage( "Setting name of the partition failed!" );
}
return set_name_result;
return setNameResult;
}
if( fContentName ) {
//set name of the contents
//setting name of our contents -> via our disk system
if( !partition->DiskSystem() ) {
if (fContentName) {
// set name of the contents
// setting name of our contents -> via our disk system
if (!partition->DiskSystem()) {
SetErrorMessage( "Partition has no disk system!");
return B_BAD_VALUE;
}
status_t validation_result = validate_set_partition_content_name(
partition, partition->ChangeCounter(),
fContentName, false);
if( validation_result != B_OK ) {
SetErrorMessage( "Validation of setting partition content name failed!" );
return validation_result;
// TODO: The parameters are already validated and should not be changed again!
status_t validationResult = validate_set_partition_content_name(
partition, partition->ChangeCounter(), fContentName, false);
if (validationResult != B_OK) {
SetErrorMessage("Validation of setting partition content name "
"failed!");
return validationResult;
}
//everything OK, let's do the job
KDiskSystem * diskSystem = partition->DiskSystem();
DiskSystemLoader loader( diskSystem );
// everything OK, let's do the job
KDiskSystem* diskSystem = partition->DiskSystem();
DiskSystemLoader loader(diskSystem);
locker.Unlock();
status_t set_cont_name_result = diskSystem->SetContentName(
partition, fContentName, this);
if( set_cont_name_result != B_OK ) {
SetErrorMessage( "Setting name of the partition's content failed!" );
status_t result = diskSystem->SetContentName(partition,
fContentName, this);
if (result != B_OK) {
SetErrorMessage("Setting name of the partition's content "
"failed!" );
}
return set_cont_name_result;
return result;
}
} else {
SetErrorMessage( "Couldn't find partition!" );
SetErrorMessage("Couldn't find partition!");
return B_ENTRY_NOT_FOUND;
}
return B_ERROR;
}
@@ -1,3 +1,10 @@
/*
* Copyright 2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Lubos Kulic <lubos@radical.ed>
*/
#ifndef _K_DISK_DEVICE_SET_NAME_JOB_H
#define _K_DISK_DEVICE_SET_NAME_JOB_H
@@ -14,32 +21,20 @@ namespace DiskDevice {
* it's possible to create it with only one of these name parameters and so
* set only one of the names
*/
class KSetNameJob : public KDiskDeviceJob
{
class KSetNameJob : public KDiskDeviceJob {
public:
/**
* Creates the job.
*
*
* \param partitionID the partition/device whose name should be set
* \param name the new name for \c partitionID
* \param contentName the new name for the content of \c partitionID
*/
KSetNameJob(partition_id parentID, partition_id partitionID, const char * name,
const char * contentName);
KSetNameJob(partition_id parentID, partition_id partitionID,
const char* name, const char* contentName);
virtual ~KSetNameJob();
virtual status_t Do();
private:
char * fName, *fContentName;
char* fName;
char* fContentName;
};
}
}
using BPrivate::DiskDevice::KSetNameJob;
@@ -1,6 +1,11 @@
// KSetParametersJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#include <KernelExport.h>
#include <DiskDeviceDefs.h>
@@ -18,112 +23,123 @@
#include "ddm_operation_validation.h"
/**
Creates the job.
KSetParametersJob::KSetParametersJob(partition_id parent, partition_id partition,
const char *parameters, const char *contentParameters)
\param partition the partition whose params (or content params) should be set
\param parameters the new parameters for the partition
\param contentParameters the new parameters for partition's content
*/
KSetParametersJob::KSetParametersJob(partition_id parent,
partition_id partition, const char *parameters,
const char *contentParameters)
: KDiskDeviceJob(B_DISK_DEVICE_JOB_SET_TYPE, partition, parent),
fParams( !parameters ? NULL : strcpy( new char[strlen(parameters)+1], parameters )),
fContentParams(
!contentParameters ? NULL :
strcpy( new char[strlen(contentParameters)+1], contentParameters))
fParams(!parameters ? NULL : strdup(parameters)),
fContentParams(!contentParameters ? NULL : strdup(contentParameters))
{
SetDescription( "setting partition parameters&content parameters" );
SetDescription("setting partition parameters&content parameters");
}
KSetParametersJob::~KSetParametersJob(){}
status_t KSetParametersJob::Do(){
KSetParametersJob::~KSetParametersJob()
{
free(fParams);
free(fContentParams);
}
status_t
KSetParametersJob::Do()
{
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
KPartition *partition = manager->WriteLockPartition(PartitionID());
if (partition) {
if( !fParams && !fContentParams ) {
SetErrorMessage( "No parameter to set." );
if (!fParams && !fContentParams) {
SetErrorMessage("No parameter to set.");
return B_BAD_VALUE;
}
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
//TODO is lock necessary?
// TODO is lock necessary?
DeviceWriteLocker locker(partition->Device(), true);
// all descendants should be marked busy/descendant busy
if ( isPartitionNotBusy( partition ) ) {
if (IsPartitionNotBusy(partition)) {
SetErrorMessage("Can't set parameters for non-busy partition!");
return B_ERROR;
}
//TODO unlock?
if( fParams ) {
// TODO unlock?
if (fParams) {
// basic checks
if (!partition->ParentDiskSystem()) {
SetErrorMessage("Partition has no parent disk system!");
return B_BAD_VALUE;
}
//TODO mayebe give copy of parameters?
//we have some parameters to set
status_t validation_result = validate_set_partition_parameters( partition, partition->ChangeCounter(), fParams, false );
// TODO maybe give copy of parameters?
// we have some parameters to set
// TODO: The parameters are already validated and should not be changed again!
status_t validationResult = validate_set_partition_parameters(
partition, partition->ChangeCounter(), fParams, false);
KDiskSystem *parentDiskSystem = partition->ParentDiskSystem();
DiskSystemLoader loader(parentDiskSystem);
if( validation_result != B_OK ) {
SetErrorMessage( "Validation of setting partition parameters failed." );
return validation_result;
if (validationResult != B_OK) {
SetErrorMessage("Validation of setting partition parameters "
"failed.");
return validationResult;
}
locker.Unlock();
status_t set_pars_result = parentDiskSystem->SetParameters( partition, fParams, this );
if( set_pars_result != B_OK ) {
status_t setParametersResult = parentDiskSystem->SetParameters(
partition, fParams, this);
if (setParametersResult != B_OK) {
SetErrorMessage( "Setting partition parameters failed." );
}
}
if( fContentParams ) {
if (fContentParams) {
// basic checks
if (!partition->DiskSystem()) {
SetErrorMessage("Partition has no disk system!");
return B_BAD_VALUE;
}
status_t validation_result = validate_set_partition_content_parameters (
partition, partition->ChangeCounter(), fContentParams, false );
if( validation_result != B_OK ) {
SetErrorMessage( "Validation of setting partition content parameters failed." );
return validation_result;
// TODO: The parameters are already validated and should not be changed again!
status_t validationResult
= validate_set_partition_content_parameters(partition,
partition->ChangeCounter(), fContentParams, false);
if (validationResult != B_OK) {
SetErrorMessage("Validation of setting partition content "
"parameters failed.");
return validationResult;
}
KDiskSystem *diskSystem = partition->DiskSystem();
DiskSystemLoader loader(diskSystem);
locker.Unlock();
status_t set_cont_pars_result = diskSystem->SetContentParameters(
partition, fContentParams, this );
if( set_cont_pars_result != B_OK ) {
SetErrorMessage( "Setting partition content parameters failed." );
status_t result = diskSystem->SetContentParameters(partition,
fContentParams, this);
if (result != B_OK) {
SetErrorMessage("Setting partition content parameters failed.");
}
}
// TODO: Check return values!
return B_OK;
} else {
SetErrorMessage( "Couldn't find partition" );
return B_ENTRY_NOT_FOUND;
}
}
@@ -1,5 +1,11 @@
// KSetParametersJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
* Lubos Kulic <lubos@radical.ed>
*/
#ifndef _K_DISK_DEVICE_SET_PARAMETERS_JOB_H
#define _K_DISK_DEVICE_SET_PARAMETERS_JOB_H
@@ -17,13 +23,6 @@ namespace DiskDevice {
*/
class KSetParametersJob : public KDiskDeviceJob {
public:
/**
* Creates the job.
*
* \param partition the partition whose params (or content params) should be set
* \param parameters the new parameters for the partition
* \param contentParameters the new parameters for partition's content
*/
KSetParametersJob(partition_id parent, partition_id partition,
const char *parameters, const char *contentParameters);
virtual ~KSetParametersJob();
@@ -1,15 +1,10 @@
//
// C++ Implementation: KSetTypeJob
//
// Description:
//
//
// Author: <[email protected]>, (C) 2007
//
// Copyright: See COPYING file that comes with this distribution
//
//
/*
* Copyright 2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Lubos Kulic <lubos@radical.ed>
*/
#include <KPartition.h>
#include <KernelExport.h>
@@ -26,64 +21,76 @@
#include "KSetTypeJob.h"
#include "ddm_operation_validation.h"
KSetTypeJob::KSetTypeJob(partition_id parentID, partition_id partitionID, const char *type)
/**
Creates the job.
\param partitionID the partition whose type should be set
\param type the new type for the partition
*/
KSetTypeJob::KSetTypeJob(partition_id parentID, partition_id partitionID,
const char *type)
: KDiskDeviceJob(B_DISK_DEVICE_JOB_SET_TYPE, partitionID, parentID),
fType( !type ? NULL : strcpy( new char[strlen(type)+1], type ) )
fType(!type ? NULL : strdup(type))
{
SetDescription( "setting partition type" );
SetDescription("setting partition type");
}
KSetTypeJob::~KSetTypeJob(){}
KSetTypeJob::~KSetTypeJob()
{
}
status_t KSetTypeJob::Do() {
KDiskDeviceManager * manager = KDiskDeviceManager::Default();
KPartition * partition = manager->WriteLockPartition( PartitionID() );
if( partition ) {
status_t
KSetTypeJob::Do()
{
KDiskDeviceManager* manager = KDiskDeviceManager::Default();
KPartition* partition = manager->WriteLockPartition(PartitionID());
if (partition) {
PartitionRegistrar registrar(partition, true);
PartitionRegistrar deviceRegistrar(partition->Device(), true);
//TODO is lock necessary?
// TODO is lock necessary?
DeviceWriteLocker locker(partition->Device(), true);
//basic checks
if( !partition->ParentDiskSystem() ) {
SetErrorMessage( "Partition has no parent disk system!" );
// basic checks
if (!partition->ParentDiskSystem()) {
SetErrorMessage("Partition has no parent disk system!");
return B_BAD_VALUE;
}
if( !fType ) {
SetErrorMessage( "No type to set!" );
if (!fType) {
SetErrorMessage("No type to set!");
return B_BAD_VALUE;
}
status_t validation_result = validate_set_partition_type(
partition, partition->ChangeCounter(),
fType, false);
if( validation_result != B_OK ) {
SetErrorMessage( "Validation of setting partition type failed!" );
return validation_result;
// TODO: The parameters are already validated and should not be changed again!
status_t validationResult = validate_set_partition_type(
partition, partition->ChangeCounter(), fType, false);
if (validationResult != B_OK) {
SetErrorMessage("Validation of setting partition type failed!");
return validationResult;
}
//everything OK, let's do the job
KDiskSystem * parentDiskSystem = partition->ParentDiskSystem();
DiskSystemLoader loader( parentDiskSystem );
status_t set_type_result = parentDiskSystem->SetType( partition, fType, this );
if( set_type_result != B_OK ) {
SetErrorMessage( "Setting partition type failed!" );
return set_type_result;
// everything OK, let's do the job
KDiskSystem* parentDiskSystem = partition->ParentDiskSystem();
DiskSystemLoader loader(parentDiskSystem);
status_t setTypeResult = parentDiskSystem->SetType(partition, fType,
this);
if (setTypeResult != B_OK) {
SetErrorMessage("Setting partition type failed!");
return setTypeResult;
}
return B_OK;
} else {
SetErrorMessage( "Couldn't find partition!" );
SetErrorMessage("Couldn't find partition!");
return B_ENTRY_NOT_FOUND;
}
}
@@ -1,14 +1,10 @@
//
// C++ Interface: KSetTypeJob
//
// Description:
//
//
// Author: <[email protected]>, (C) 2007
//
// Copyright: See COPYING file that comes with this distribution
//
//
/*
* Copyright 2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Lubos Kulic <lubos@radical.ed>
*/
#ifndef _K_DISK_DEVICE_SET_TYPE_JOB_H
#define _K_DISK_DEVICE_SET_TYPE_JOB_H
@@ -24,25 +20,16 @@ namespace DiskDevice {
class KSetTypeJob : public KDiskDeviceJob
{
public:
/**
* Creates the job.
*
* \param partitionID the partition whose type should be set
* \param type the new type for the partition
*/
KSetTypeJob(partition_id parentID, partition_id partitionID, const char *type);
virtual ~KSetTypeJob();
virtual status_t Do();
private:
char * fType;
};
}
}
using BPrivate::DiskDevice::KSetTypeJob;
@@ -1,4 +1,10 @@
// KInitializeJob.cpp
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
*/
#include <stdio.h>
@@ -1,5 +1,10 @@
// KInitializeJob.h
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
*/
#ifndef _K_DISK_DEVICE_UNINITIALIZE_JOB_H
#define _K_DISK_DEVICE_UNINITIALIZE_JOB_H
@@ -13,9 +18,6 @@ namespace DiskDevice {
*/
class KUninitializeJob : public KDiskDeviceJob {
public:
/**
* Creates the job
*/
KUninitializeJob(partition_id partitionID);
virtual ~KUninitializeJob();