disk.h

Go to the documentation of this file.
00001 /*
00002     libparted - a library for manipulating disk partitions
00003     Copyright (C) 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
00004 
00005     This program is free software; you can redistribute it and/or modify
00006     it under the terms of the GNU General Public License as published by
00007     the Free Software Foundation; either version 2 of the License, or
00008     (at your option) any later version.
00009 
00010     This program is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013     GNU General Public License for more details.
00014 
00015     You should have received a copy of the GNU General Public License
00016     along with this program; if not, write to the Free Software
00017     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
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 /* office use only ;-) */
00166         int                 needs_clobber;      
00167         int                 update_mode;        
00170 };
00171 
00172 struct _PedDiskOps {
00173         /* disk label operations */
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         /* partition operations */
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         /* other */
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 /* internal functions */
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 /* PED_DISK_H_INCLUDED */
00359 

Generated on Fri May 4 05:15:31 2007 for libparted by  doxygen 1.5.2