partition: add *_follow_default optional params

Add optional parameters inside init function of partition. Optional
parameters refer to:

- partno_follow_default
- start_follow_default
- end_follow_default

These options can be used in order to enable or disable default partno,
start and end value when adding partitions.

With those optional parameters enabled by default a user is able
to add a partition into the context label without specifying any
attribute.

>>> import fdisk
>>> cxt = fdisk.Context('./disk.bin', readonly=False)
>>> cxt.create_disklabel('gpt')
>>> pa = fdisk.Partition()
>>> cxt.add_partition(pa)

This enables:

- "Filling" the rest of the disk with last partition
- No need to track start/end sector for any following partition
- No need to track next partno number for any following partition

See:

https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Partition.html#fdisk-partition-partno-follow-default
https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Partition.html#fdisk-partition-start-follow-default
https://cdn.kernel.org/pub/linux/utils/util-linux/v2.34/libfdisk-docs/libfdisk-Partition.html#fdisk-partition-end-follow-default
master
Jose M. Guisado 2022-12-14 16:36:38 +01:00
parent 8707d43111
commit 7271bc99db
1 changed files with 27 additions and 9 deletions

View File

@ -37,25 +37,43 @@ static PyObject *Partition_new(PyTypeObject *type,
return (PyObject *)self;
}
#define Partition_HELP "Partition()"
#define Partition_HELP "Partition(partno_follow_default=False, " \
"start_follow_default=False, " \
"end_follow_default=False)"
static int Partition_init(PartitionObject *self, PyObject *args, PyObject *kwds)
{
/*
char *kwlist[] = {
"context",
"partno_follow_default",
"start_follow_default",
"end_follow_default",
NULL
};
int partno_follow_default = 0,
start_follow_default = 0,
end_follow_default = 0;
if (!PyArg_ParseTupleAndKeywords(args,
kwds, "|O!", kwlist,
&ContextType, &cxt)) {
PyErr_SetString(PyExc_TypeError, "Error");
kwds, "|ppp", kwlist,
&partno_follow_default,
&start_follow_default,
&end_follow_default)) {
PyErr_SetString(PyExc_TypeError, "Invalid arguments for new partition");
return -1;
}
*/
self->pa = fdisk_new_partition();
fdisk_partition_start_follow_default(self->pa, 1);
if (fdisk_partition_partno_follow_default(self->pa, partno_follow_default) < 0) {
PyErr_SetString(PyExc_RuntimeError, "Error setting partno_follow_default");
return -1;
}
if (fdisk_partition_start_follow_default(self->pa, start_follow_default) < 0) {
PyErr_SetString(PyExc_RuntimeError, "Error setting start_follow_default");
return -1;
}
if (fdisk_partition_end_follow_default(self->pa, end_follow_default) < 0) {
PyErr_SetString(PyExc_RuntimeError, "Error setting end_follow_default");
return -1;
}
return 0;
}