00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00027 #ifndef PED_DISK_H_INCLUDED
00028 #define PED_DISK_H_INCLUDED
00029
00033 enum _PedPartitionType {
00034 PED_PARTITION_NORMAL = 0x00,
00035 PED_PARTITION_LOGICAL = 0x01,
00036 PED_PARTITION_EXTENDED = 0x02,
00037 PED_PARTITION_FREESPACE = 0x04,
00038 PED_PARTITION_METADATA = 0x08,
00039 PED_PARTITION_PROTECTED = 0x10
00040 };
00041
00045 enum _PedPartitionFlag {
00046 PED_PARTITION_BOOT=1,
00047 PED_PARTITION_ROOT=2,
00048 PED_PARTITION_SWAP=3,
00049 PED_PARTITION_HIDDEN=4,
00050 PED_PARTITION_RAID=5,
00051 PED_PARTITION_LVM=6,
00052 PED_PARTITION_LBA=7,
00053 PED_PARTITION_HPSERVICE=8,
00054 PED_PARTITION_PALO=9,
00055 PED_PARTITION_PREP=10,
00056 PED_PARTITION_MSFT_RESERVED=11
00057 };
00058 #define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
00059 #define PED_PARTITION_LAST_FLAG PED_PARTITION_MSFT_RESERVED
00060
00061 enum _PedDiskTypeFeature {
00062 PED_DISK_TYPE_EXTENDED=1,
00063 PED_DISK_TYPE_PARTITION_NAME=2
00064 };
00065 #define PED_DISK_TYPE_FIRST_FEATURE PED_DISK_TYPE_EXTENDED
00066 #define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_PARTITION_NAME
00067
00068 struct _PedDisk;
00069 struct _PedPartition;
00070 struct _PedDiskOps;
00071 struct _PedDiskType;
00072 struct _PedDiskArchOps;
00073
00074 typedef enum _PedPartitionType PedPartitionType;
00075 typedef enum _PedPartitionFlag PedPartitionFlag;
00076 typedef enum _PedDiskTypeFeature PedDiskTypeFeature;
00077 typedef struct _PedDisk PedDisk;
00078 typedef struct _PedPartition PedPartition;
00079 typedef const struct _PedDiskOps PedDiskOps;
00080 typedef struct _PedDiskType PedDiskType;
00081 typedef const struct _PedDiskArchOps PedDiskArchOps;
00082
00083 #include <parted/device.h>
00084 #include <parted/filesys.h>
00085 #include <parted/natmath.h>
00086 #include <parted/geom.h>
00087
00101 struct _PedPartition {
00102 PedPartition* prev;
00103 PedPartition* next;
00104
00106 PedDisk* disk;
00107 PedGeometry geom;
00114 int num;
00115 PedPartitionType type;
00134 const PedFileSystemType* fs_type;
00135
00139 PedPartition* part_list;
00140
00141 void* disk_specific;
00142 };
00143
00154 struct _PedDisk {
00155 PedDevice* dev;
00157 const PedDiskType* type;
00158 const int* block_sizes;
00160 PedPartition* part_list;
00163 void* disk_specific;
00164
00165
00166 int needs_clobber;
00167 int update_mode;
00170 };
00171
00172 struct _PedDiskOps {
00173
00174 int (*probe) (const PedDevice *dev);
00175 int (*clobber) (PedDevice* dev);
00176 PedDisk* (*alloc) (const PedDevice* dev);
00177 PedDisk* (*duplicate) (const PedDisk* disk);
00178 void (*free) (PedDisk* disk);
00179 int (*read) (PedDisk* disk);
00180 int (*write) (const PedDisk* disk);
00183
00184 PedPartition* (*partition_new) (
00185 const PedDisk* disk,
00186 PedPartitionType part_type,
00187 const PedFileSystemType* fs_type,
00188 PedSector start,
00189 PedSector end);
00190 PedPartition* (*partition_duplicate) (const PedPartition* part);
00191 void (*partition_destroy) (PedPartition* part);
00192 int (*partition_set_system) (PedPartition* part,
00193 const PedFileSystemType* fs_type);
00194 int (*partition_set_flag) (
00195 PedPartition* part,
00196 PedPartitionFlag flag,
00197 int state);
00198 int (*partition_get_flag) (
00199 const PedPartition* part,
00200 PedPartitionFlag flag);
00201 int (*partition_is_flag_available) (
00202 const PedPartition* part,
00203 PedPartitionFlag flag);
00204 void (*partition_set_name) (PedPartition* part, const char* name);
00205 const char* (*partition_get_name) (const PedPartition* part);
00206 int (*partition_align) (PedPartition* part,
00207 const PedConstraint* constraint);
00208 int (*partition_enumerate) (PedPartition* part);
00209
00210
00211 int (*alloc_metadata) (PedDisk* disk);
00212 int (*get_max_primary_partition_count) (const PedDisk* disk);
00213 };
00214
00215 struct _PedDiskType {
00216 PedDiskType* next;
00217 const char* name;
00219 PedDiskOps* const ops;
00220
00221 PedDiskTypeFeature features;
00222 };
00223
00228 struct _PedDiskArchOps {
00229 char* (*partition_get_path) (const PedPartition* part);
00230 int (*partition_is_busy) (const PedPartition* part);
00231 int (*disk_commit) (PedDisk* disk);
00232 };
00233
00234 extern void ped_disk_type_register (PedDiskType* type);
00235 extern void ped_disk_type_unregister (PedDiskType* type);
00236
00240 __attribute__ ((deprecated))
00241 extern void ped_register_disk_type (PedDiskType* type);
00242
00246 __attribute__ ((deprecated))
00247 extern void ped_unregister_disk_type (PedDiskType* type);
00248
00249 extern PedDiskType* ped_disk_type_get_next (PedDiskType* type);
00250 extern PedDiskType* ped_disk_type_get (const char* name);
00251 extern int ped_disk_type_check_feature (const PedDiskType* disk_type,
00252 PedDiskTypeFeature feature);
00253
00254 extern PedDiskType* ped_disk_probe (PedDevice* dev);
00255 extern int ped_disk_clobber (PedDevice* dev);
00256 extern int ped_disk_clobber_exclude (PedDevice* dev,
00257 const PedDiskType* exclude);
00258 extern PedDisk* ped_disk_new (PedDevice* dev);
00259 extern PedDisk* ped_disk_new_fresh (PedDevice* dev,
00260 const PedDiskType* disk_type);
00261 extern PedDisk* ped_disk_duplicate (const PedDisk* old_disk);
00262 extern void ped_disk_destroy (PedDisk* disk);
00263 extern int ped_disk_commit (PedDisk* disk);
00264 extern int ped_disk_commit_to_dev (PedDisk* disk);
00265 extern int ped_disk_commit_to_os (PedDisk* disk);
00266 extern int ped_disk_check (const PedDisk* disk);
00267 extern void ped_disk_print (const PedDisk* disk);
00268
00269 extern int ped_disk_get_primary_partition_count (const PedDisk* disk);
00270 extern int ped_disk_get_last_partition_num (const PedDisk* disk);
00271 extern int ped_disk_get_max_primary_partition_count (const PedDisk* disk);
00272
00281 extern PedPartition* ped_partition_new (const PedDisk* disk,
00282 PedPartitionType type,
00283 const PedFileSystemType* fs_type,
00284 PedSector start,
00285 PedSector end);
00286 extern void ped_partition_destroy (PedPartition* part);
00287 extern int ped_partition_is_active (const PedPartition* part);
00288 extern int ped_partition_set_flag (PedPartition* part, PedPartitionFlag flag,
00289 int state);
00290 extern int ped_partition_get_flag (const PedPartition* part,
00291 PedPartitionFlag flag);
00292 extern int ped_partition_is_flag_available (const PedPartition* part,
00293 PedPartitionFlag flag);
00294 extern int ped_partition_set_system (PedPartition* part,
00295 const PedFileSystemType* fs_type);
00296 extern int ped_partition_set_name (PedPartition* part, const char* name);
00297 extern const char* ped_partition_get_name (const PedPartition* part);
00298 extern int ped_partition_is_busy (const PedPartition* part);
00299 extern char* ped_partition_get_path (const PedPartition* part);
00300
00301 extern const char* ped_partition_type_get_name (PedPartitionType part_type);
00302 extern const char* ped_partition_flag_get_name (PedPartitionFlag flag);
00303 extern PedPartitionFlag ped_partition_flag_get_by_name (const char* name);
00304 extern PedPartitionFlag ped_partition_flag_next (PedPartitionFlag flag);
00305
00313 extern int ped_disk_add_partition (PedDisk* disk, PedPartition* part,
00314 const PedConstraint* constraint);
00315 extern int ped_disk_remove_partition (PedDisk* disk, PedPartition* part);
00316 extern int ped_disk_delete_partition (PedDisk* disk, PedPartition* part);
00317 extern int ped_disk_delete_all (PedDisk* disk);
00318 extern int ped_disk_set_partition_geom (PedDisk* disk, PedPartition* part,
00319 const PedConstraint* constraint,
00320 PedSector start, PedSector end);
00321 extern int ped_disk_maximize_partition (PedDisk* disk, PedPartition* part,
00322 const PedConstraint* constraint);
00323 extern PedGeometry* ped_disk_get_max_partition_geometry (PedDisk* disk,
00324 PedPartition* part, const PedConstraint* constraint);
00325 extern int ped_disk_minimize_extended_partition (PedDisk* disk);
00326
00327 extern PedPartition* ped_disk_next_partition (const PedDisk* disk,
00328 const PedPartition* part);
00329 extern PedPartition* ped_disk_get_partition (const PedDisk* disk, int num);
00330 extern PedPartition* ped_disk_get_partition_by_sector (const PedDisk* disk,
00331 PedSector sect);
00332 extern PedPartition* ped_disk_extended_partition (const PedDisk* disk);
00333
00334
00335 extern PedDisk* _ped_disk_alloc (const PedDevice* dev, const PedDiskType* type);
00336 extern void _ped_disk_free (PedDisk* disk);
00337
00338
00347 extern PedPartition* _ped_partition_alloc (const PedDisk* disk,
00348 PedPartitionType type,
00349 const PedFileSystemType* fs_type,
00350 PedSector start,
00351 PedSector end);
00352 extern void _ped_partition_free (PedPartition* part);
00353
00354 extern int _ped_partition_attempt_align (
00355 PedPartition* part, const PedConstraint* external,
00356 PedConstraint* internal);
00357
00358 #endif
00359