diff options
author | Karel Zak | 2013-02-11 14:48:18 +0100 |
---|---|---|
committer | Karel Zak | 2013-03-11 13:00:57 +0100 |
commit | cb7ce873a5c01fdd14df2ffd8e56103ecc8dd557 (patch) | |
tree | 32fa866a23c309a6768357963ae332181b2eb913 /libfdisk/src/context.c | |
parent | fdisk: (sun) use yes/no from libfdisk (diff) | |
download | kernel-qcow2-util-linux-cb7ce873a5c01fdd14df2ffd8e56103ecc8dd557.tar.gz kernel-qcow2-util-linux-cb7ce873a5c01fdd14df2ffd8e56103ecc8dd557.tar.xz kernel-qcow2-util-linux-cb7ce873a5c01fdd14df2ffd8e56103ecc8dd557.zip |
libfdisk: add info about display units to context
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/context.c')
-rw-r--r-- | libfdisk/src/context.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c index 4a2faf97d..352f03ac3 100644 --- a/libfdisk/src/context.c +++ b/libfdisk/src/context.c @@ -201,3 +201,58 @@ int fdisk_context_set_ask(struct fdisk_context *cxt, cxt->ask_data = data; return 0; } + + +/* + * @str: "cylinder" or "sector". + * + * This is pure shit, unfortunately for example Sun addresses begin of the + * partition by cylinders... + */ +int fdisk_context_set_unit(struct fdisk_context *cxt, const char *str) +{ + assert(cxt); + + cxt->display_in_cyl_units = 0; + + if (!str) + return 0; + + if (strcmp(str, "cylinder") == 0 || strcmp(str, "cylinders") == 0) + cxt->display_in_cyl_units = 1; + + else if (strcmp(str, "sector") == 0 || strcmp(str, "sectors") == 0) + cxt->display_in_cyl_units = 0; + + DBG(CONTEXT, dbgprint("display unit: %s", fdisk_context_get_unit(cxt, 0))); + return 0; +} + +const char *fdisk_context_get_unit(struct fdisk_context *cxt, int n) +{ + assert(cxt); + + if (fdisk_context_use_cylinders(cxt)) + return P_("cylinder", "cylinders", n); + return P_("sector", "sectors", n); +} + +/* Returns 1 if user wants to display in cylinders. */ +int fdisk_context_use_cylinders(struct fdisk_context *cxt) +{ + assert(cxt); + return cxt->display_in_cyl_units == 1; +} + +/* Returns number of "units" per sector, default is 1 if display unit is sector. + */ +unsigned int fdisk_context_get_units_per_sector(struct fdisk_context *cxt) +{ + assert(cxt); + + if (fdisk_context_use_cylinders(cxt)) { + assert(cxt->geom.heads); + return cxt->geom.heads * cxt->geom.sectors; + } + return 1; +} |