summaryrefslogtreecommitdiffstats
path: root/libfdisk/src
diff options
context:
space:
mode:
authorKarel Zak2012-12-06 15:04:35 +0100
committerKarel Zak2013-03-11 11:20:41 +0100
commitc578f9af729fd6cb4bc64a431b1779df8f94f889 (patch)
tree3760c8c3cef8d6db09412536c486ed9e355b9901 /libfdisk/src
parentlibfdisk: add topology and geometry functions (diff)
downloadkernel-qcow2-util-linux-c578f9af729fd6cb4bc64a431b1779df8f94f889.tar.gz
kernel-qcow2-util-linux-c578f9af729fd6cb4bc64a431b1779df8f94f889.tar.xz
kernel-qcow2-util-linux-c578f9af729fd6cb4bc64a431b1779df8f94f889.zip
libfdisk: add fdisk_reset_alignment()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src')
-rw-r--r--libfdisk/src/alignment.c34
-rw-r--r--libfdisk/src/libfdisk.h3
2 files changed, 34 insertions, 3 deletions
diff --git a/libfdisk/src/alignment.c b/libfdisk/src/alignment.c
index e06e1afb0..25c0c6467 100644
--- a/libfdisk/src/alignment.c
+++ b/libfdisk/src/alignment.c
@@ -6,9 +6,6 @@
#include "fdiskP.h"
-/* temporary */
-extern int fdisk_reset_alignment(struct fdisk_context *cxt);
-
/*
* Alignment according to logical granulity (usually 1MiB)
*/
@@ -350,3 +347,34 @@ unsigned long fdisk_topology_get_grain(struct fdisk_context *cxt)
return res;
}
+
+/**
+ * fdisk_reset_alignment:
+ * @cxt: fdisk context
+ *
+ * Resets alignment setting to the default or label specific values.
+ *
+ * Returns: 0 on success, < 0 in case of error.
+ */
+int fdisk_reset_alignment(struct fdisk_context *cxt)
+{
+ int rc = 0;
+
+ if (!cxt)
+ return -EINVAL;
+
+ /* default */
+ cxt->grain = fdisk_topology_get_grain(cxt);
+ cxt->first_lba = fdisk_topology_get_first_lba(cxt);
+
+ /* overwrite default by label stuff */
+ if (cxt->label && cxt->label->reset_alignment)
+ rc = cxt->label->reset_alignment(cxt);
+
+ DBG(LABEL, dbgprint("%s alignment reseted to: "
+ "first LBA=%ju, grain=%lu [rc=%d]",
+ cxt->label ? cxt->label->name : NULL,
+ (uintmax_t) cxt->first_lba,
+ cxt->grain, rc));
+ return rc;
+}
diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h
index 6ea08bdb0..08df05bed 100644
--- a/libfdisk/src/libfdisk.h
+++ b/libfdisk/src/libfdisk.h
@@ -68,6 +68,9 @@ extern int fdisk_verify_disklabel(struct fdisk_context *cxt);
extern int fdisk_add_partition(struct fdisk_context *cxt, int partnum, struct fdisk_parttype *t);
extern int fdisk_delete_partition(struct fdisk_context *cxt, int partnum);
+/* alignment.c */
+extern int fdisk_reset_alignment(struct fdisk_context *cxt);
+
#ifdef __cplusplus
}
#endif