]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: add functions to play nasty games with first/last LBA
authorKarel Zak <kzak@redhat.com>
Thu, 9 Oct 2014 10:06:52 +0000 (12:06 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 9 Oct 2014 10:06:52 +0000 (12:06 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/context.c
libfdisk/src/libfdisk.h

index 8a5397368d853ddc57385549ae124f0ae0d8fd72..67a3ec0d06a2dcad6a705998dd028734e4563287 100644 (file)
@@ -843,6 +843,62 @@ sector_t fdisk_get_first_lba(struct fdisk_context *cxt)
        return cxt->first_lba;
 }
 
+/**
+ * fdisk_set_first_lba:
+ * @cxt: fdisk context
+ * @lba: first possible sector for data
+ *
+ * It's strongly recommended to use the default library setting. The first LBA
+ * is always reseted by fdisk_assign_device(), fdisk_override_geometry()
+ * and fdisk_reset_alignment(). This is very low level function and library
+ * does not check if your setting makes any sense.
+ *
+ * Returns: 0 on success, <0 on error.
+ */
+sector_t fdisk_set_first_lba(struct fdisk_context *cxt, sector_t lba)
+{
+       assert(cxt);
+       DBG(CXT, ul_debugobj(cxt, "setting first LBA from %ju to %ju",
+                       (uintmax_t) cxt->first_lba, (uintmax_t) lba));
+       cxt->first_lba = lba;
+       return 0;
+}
+
+/**
+ * fdisk_get_last_lba:
+ * @cxt: fdisk context
+ *
+ * Note that the device has to be already assigned.
+ *
+ * Returns: last possible LBA on device
+ */
+sector_t fdisk_get_last_lba(struct fdisk_context *cxt)
+{
+       return cxt->last_lba;
+}
+
+/**
+ * fdisk_set_last_lba:
+ * @cxt: fdisk context
+ * @lba: last possible sector
+ *
+ * It's strongly recommended to use the default library setting. The last LBA
+ * is always reseted by fdisk_assign_device(), fdisk_override_geometry() and
+ * fdisk_reset_alignment().
+ *
+ * Returns: 0 on success, <0 on error.
+ */
+sector_t fdisk_set_last_lba(struct fdisk_context *cxt, sector_t lba)
+{
+       assert(cxt);
+
+       if (lba > cxt->total_sectors - 1 && lba < 1)
+               return -ERANGE;
+       cxt->last_lba = lba;
+       return 0;
+}
+
+
 /**
  * fdisk_get_nsectors:
  * @cxt: context
index a01481f21f372d59333b0c8f8fa37bf7ca58976f..047119983d5f982c1a5f968b2b07fc0528f34913 100644 (file)
@@ -123,6 +123,9 @@ unsigned long fdisk_get_sector_size(struct fdisk_context *cxt);
 unsigned long fdisk_get_alignment_offset(struct fdisk_context *cxt);
 unsigned long fdisk_get_grain_size(struct fdisk_context *cxt);
 sector_t fdisk_get_first_lba(struct fdisk_context *cxt);
+sector_t fdisk_set_first_lba(struct fdisk_context *cxt, sector_t lba);
+sector_t fdisk_get_last_lba(struct fdisk_context *cxt);
+sector_t fdisk_set_last_lba(struct fdisk_context *cxt, sector_t lba);
 sector_t fdisk_get_nsectors(struct fdisk_context *cxt);
 const char *fdisk_get_devname(struct fdisk_context *cxt);
 int fdisk_get_devfd(struct fdisk_context *cxt);
@@ -131,6 +134,8 @@ unsigned int fdisk_get_geom_heads(struct fdisk_context *cxt);
 sector_t fdisk_get_geom_sectors(struct fdisk_context *cxt);
 sector_t fdisk_get_geom_cylinders(struct fdisk_context *cxt);
 
+
+
 /* parttype.c */
 const struct fdisk_parttype *fdisk_label_get_parttype(const struct fdisk_label *lb, size_t n);
 size_t fdisk_label_get_nparttypes(const struct fdisk_label *lb);