It's not necessary to store the label in the context type, instead use
the corresponding library function to get the current in-memory label
container.
The device label information is stored in-memory by libfdisk library
when creating a context or assigning a device.
Avoids possible incosistencies between libfdisk in-memory label and
python-libfdisk context type label information.
Allows creation of a context object or device assign if no label
is present in the device.
This case is not frecuent but not critical, do not raise an exception.
For example, a brand new disk with no label or a raw virtual disk
image with no label.
Some of python-libfdisk is inspired by the python bindings of libmount
(from util-linux project).
Remove a comment from pylibmount that slipped into python-libfdisk
python-libfdisk raises Python exceptions when the libfdisk reports an
error when executing some function. libfdisk returns negative
errno values when reporting some error.
Adds utility function to set PyErr string based on the strerror of
a given errno code. Useful when raising Python exceptions.
Only two line breaks separate copyright notice from source.
For the rest of the source file any function declaration or similar
block is separated with a line break from any other block.
Except when a python function definition is previously followed by
a docstring #define block.
libfdisk context add_partition function initializes a passed argument
with the new partition's partno.
If add_partition is successful, return its partno.
Partition type getset enables modifying and getting the type
of a give libfdisk partition.
The type of a partition is defined using PartType, which
can only be instanced via label specific functions
get_parttype_from_string or get_parttype_from_code.
For example, to set the type of a new partitions to 'EFI System':
>>> import fdisk
>>> pa = fdisk.Partition()
>>> pa.type
>>> cxt = fdisk.Context('./disk.bin', readonly=False)
>>> cxt.create_disklabel('gpt')
>>> efitype = cxt.label.get_parttype_from_string("c12a7328-f81f-11d2-ba4b-00a0c93ec93b")
>>> pa.type = efitype
Following the previous example, getting its current partition type:
>>> pa.type
<libfdisk.PartType object at 0x7f2f0a9a12d0, name=EFI System>
This method wraps fdisk_add_partition. Allows modifying in-memory
partition table of a given context.
Remember that changes need to be written to disk using the
relevant fdisk_write_disklabel function wrapper.
Allows changing in-memory partno field of a Partition instance:
>>> import fdisk
>>> pa = fdisk.Partition()
>>> pa.partno = 3
>>> pa
<libfdisk.Partition object at 0x7f4603a38f30, partno=3>
If partno is unset repr shows 'None':
>>> import fdisk
>>> pa = fdisk.Partition()
>>> pa
<libfdisk.Partition object at 0x7f86c4338f30, partno=None>
Undefined values in libfdisk should map to None type in Python.
Py_BuildValue("%d", -1); is also incorrectly formatted and raises an
error when executed.
Adds wrappers for following label related functions from libfdisk:
- fdisk_create_disklabel
- fdisk_write_disklabel
These functions are declared as methods of a Context python object.
Renames 'cval' to 'szunit' for better readability. This variable is used
to store the size_unit constant that is going to be set using
fdisk_set_size_unit.
fdisk_assign_device() contains 'readonly' parameter to indicate how to
open the device.
Assigned device 'readonly' must be false (0) in order to write in-memory
changes to it.
Call Partition_AddModuleObject when initializing the python module.
Fixes bug when using the Partition class but the class has not
been added to the module via Py_TypeReady.
A common error was the type not being ready (missing attributes):
>>> for pa in cxt.parts:
... print(pa.partno)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: 'libfdisk.Partition' object has no attribute 'partno'