partition: add partno setter
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>master
parent
bd2703c54e
commit
46ad17eaa7
59
partition.c
59
partition.c
|
|
@ -72,6 +72,28 @@ static PyObject *Partition_get_partno(PartitionObject *self)
|
||||||
}
|
}
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
static int Partition_set_partno(PartitionObject *self, PyObject *value, void *closure)
|
||||||
|
{
|
||||||
|
size_t num;
|
||||||
|
|
||||||
|
if (value == NULL) {
|
||||||
|
fdisk_partition_unset_partno(self->pa);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!PyLong_Check(value)) {
|
||||||
|
PyErr_SetString(PyExc_TypeError, ARG_ERR);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
num = PyLong_AsSize_t(value);
|
||||||
|
if (fdisk_partition_set_partno(self->pa, num) < 0) {
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
"libfdisk reported error setting partno");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
static PyObject *Partition_get_size(PartitionObject *self)
|
static PyObject *Partition_get_size(PartitionObject *self)
|
||||||
{
|
{
|
||||||
if (fdisk_partition_has_size(self->pa)) {
|
if (fdisk_partition_has_size(self->pa)) {
|
||||||
|
|
@ -79,15 +101,46 @@ static PyObject *Partition_get_size(PartitionObject *self)
|
||||||
}
|
}
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
static int Partition_set_size(PartitionObject *self, PyObject *value, void *closure)
|
||||||
|
{
|
||||||
|
uint64_t sectors;
|
||||||
|
|
||||||
|
if (value == NULL) {
|
||||||
|
fdisk_partition_unset_size(self->pa);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!PyLong_Check(value)) {
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
ARG_ERR);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
sectors = PyLong_AsUnsignedLongLong(value);
|
||||||
|
if (fdisk_partition_set_size(self->pa, sectors) < 0) {
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
"libfdisk reported error setting partition size");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
static PyGetSetDef Partition_getseters[] = {
|
static PyGetSetDef Partition_getseters[] = {
|
||||||
{"partno", (getter)Partition_get_partno, NULL, "partition number", NULL},
|
{"partno", (getter)Partition_get_partno, (setter)Partition_set_partno, "partition number", NULL},
|
||||||
{"size", (getter)Partition_get_size, NULL, "number of sectors", NULL},
|
{"size", (getter)Partition_get_size, (setter)Partition_set_size, "number of sectors", NULL},
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyObject *Partition_repr(PartitionObject *self)
|
static PyObject *Partition_repr(PartitionObject *self)
|
||||||
{
|
{
|
||||||
return PyUnicode_FromFormat("<libfdisk.Partition object at %p>",
|
size_t partno;
|
||||||
|
|
||||||
|
if (fdisk_partition_has_partno(self->pa)) {
|
||||||
|
partno = fdisk_partition_get_partno(self->pa);
|
||||||
|
return PyUnicode_FromFormat("<libfdisk.Partition object at %p, partno=%zu>",
|
||||||
|
self, partno);
|
||||||
|
}
|
||||||
|
|
||||||
|
return PyUnicode_FromFormat("<libfdisk.Partition object at %p, partno=None>",
|
||||||
self);
|
self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue