*/
int fdisk_write_disklabel(struct fdisk_context *cxt)
{
- if (!cxt)
+ if (!cxt || !cxt->label)
return -EINVAL;
+ if (!cxt->label->write)
+ return -ENOSYS;
return cxt->label->write(cxt);
}
*/
int fdisk_verify_disklabel(struct fdisk_context *cxt)
{
- if (!cxt)
+ if (!cxt || !cxt->label)
return -EINVAL;
+ if (!cxt->label->verify)
+ return -ENOSYS;
return cxt->label->verify(cxt);
}
*/
int fdisk_add_partition(struct fdisk_context *cxt, int partnum, int parttype)
{
- if (!cxt)
+ if (!cxt || !cxt->label)
return -EINVAL;
+ if (!cxt->label->part_add)
+ return -ENOSYS;
cxt->label->part_add(cxt, partnum, parttype);
return 0;
*/
int fdisk_delete_partition(struct fdisk_context *cxt, int partnum)
{
- if (!cxt)
+ if (!cxt || !cxt->label)
return -EINVAL;
+ if (!cxt->label->part_delete)
+ return -ENOSYS;
DBG(LABEL, dbgprint("deleting %s partition number %d",
cxt->label->name, partnum));
update_units(cxt);
for (i = 0; i < ARRAY_SIZE(labels); i++) {
- if (labels[i]->probe(cxt) != 1)
+ if (!labels[i]->probe || labels[i]->probe(cxt) != 1)
continue;
cxt->label = labels[i];
return 0;
fail:
- return -1;
+ return -errno;
}
static unsigned long __get_sector_size(int fd)
* fdisk_zeroize_firstsector:
* @cxt: fdisk context
*
- * Zero's MBR buffer
+ * Zero's in-memory firts sector buffer
*/
void fdisk_zeroize_firstsector(struct fdisk_context *cxt)
{
+ if (!cxt)
+ return;
+
if (cxt->firstsector) {
DBG(CONTEXT, dbgprint("zeroize in-memory first sector buffer"));
memset(cxt->firstsector, 0, MAX_SECTOR_SIZE);
*/
int fdisk_dev_sectsz_is_default(struct fdisk_context *cxt)
{
+ if (!cxt)
+ return -EINVAL;
+
return cxt->sector_size == DEFAULT_SECTOR_SIZE;
}
* optimal_io_size is set or alignment_offset is set or
* minimum_io_size is not power of 2.
*/
- if (cxt->optimal_io_size || cxt->alignment_offset ||
- !is_power_of_2(cxt->min_io_size))
+ if (cxt &&
+ (cxt->optimal_io_size ||
+ cxt->alignment_offset ||
+ !is_power_of_2(cxt->min_io_size)))
return 1;
return 0;
}
if (!cxt->label)
return -EINVAL;
+ if (!cxt->label->create)
+ return -ENOSYS;
return cxt->label->create(cxt);
}