From: Karel Zak Date: Mon, 11 May 2015 10:42:24 +0000 (+0200) Subject: libfdisk: add fdisk_label_get_fields_ids_all() X-Git-Tag: v2.27-rc1~208 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=31ea7fa6d4f978db37cd0efb08d006ca2f1bec6b;p=thirdparty%2Futil-linux.git libfdisk: add fdisk_label_get_fields_ids_all() The current fdisk_label_get_fields_ids() is too smart as it differentiate between details mode etc. It's useful for default output, but in some cases it's better to provide all output fields. Signed-off-by: Karel Zak --- diff --git a/libfdisk/docs/libfdisk-sections.txt b/libfdisk/docs/libfdisk-sections.txt index 02b775ea6b..ea35e2bc59 100644 --- a/libfdisk/docs/libfdisk-sections.txt +++ b/libfdisk/docs/libfdisk-sections.txt @@ -101,6 +101,7 @@ fdisk_is_label fdisk_label_get_field fdisk_label_get_field_by_name fdisk_label_get_fields_ids +fdisk_label_get_fields_ids_all fdisk_label_get_name fdisk_label_get_nparttypes fdisk_label_get_parttype diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c index 717a8cd802..dd9fef040b 100644 --- a/libfdisk/src/label.c +++ b/libfdisk/src/label.c @@ -156,6 +156,47 @@ int fdisk_label_get_fields_ids( return 0; } +/** + * fdisk_label_get_fields_ids_all + * @lb: label (or NULL for the current label) + * @cxt: context + * @ids: returns allocated array with FDISK_FIELD_* IDs + * @nids: returns number of items in fields + * + * This function returns all fields for the label. + * + * Returns: 0 on success, otherwise, a corresponding error. + */ +int fdisk_label_get_fields_ids_all( + const struct fdisk_label *lb, + struct fdisk_context *cxt, + int **ids, size_t *nids) +{ + size_t i, n; + int *c; + + assert(cxt); + + if (!lb) + lb = cxt->label; + if (!lb) + return -EINVAL; + if (!lb->fields || !lb->nfields) + return -ENOSYS; + c = calloc(lb->nfields, sizeof(int)); + if (!c) + return -ENOMEM; + for (n = 0, i = 0; i < lb->nfields; i++) + c[n++] = lb->fields[i].id; + if (ids) + *ids = c; + else + free(c); + if (nids) + *nids = n; + return 0; +} + /** * fdisk_label_get_field: * @lb: label diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in index a5a4656746..bfb22a2f76 100644 --- a/libfdisk/src/libfdisk.h.in +++ b/libfdisk/src/libfdisk.h.in @@ -308,6 +308,11 @@ extern int fdisk_label_get_fields_ids( struct fdisk_context *cxt, int **ids, size_t *nids); +extern int fdisk_label_get_fields_ids_all( + const struct fdisk_label *lb, + struct fdisk_context *cxt, + int **ids, size_t *nids); + extern const struct fdisk_field *fdisk_label_get_field(const struct fdisk_label *lb, int id); extern const struct fdisk_field *fdisk_label_get_field_by_name( const struct fdisk_label *lb, diff --git a/libfdisk/src/libfdisk.sym b/libfdisk/src/libfdisk.sym index 1e6394465d..15c268ee30 100644 --- a/libfdisk/src/libfdisk.sym +++ b/libfdisk/src/libfdisk.sym @@ -241,12 +241,13 @@ local: }; FDISK_2.27 { - fdisk_script_set_fgets; - fdisk_script_set_userdata; - fdisk_script_get_userdata; fdisk_enable_bootbits_protection; - fdisk_has_protected_bootbits; - fdisk_table_get_partition_by_partno; fdisk_gpt_get_partition_attrs; fdisk_gpt_set_partition_attrs; + fdisk_has_protected_bootbits; + fdisk_label_get_fields_ids_all; + fdisk_script_get_userdata; + fdisk_script_set_fgets; + fdisk_script_set_userdata; + fdisk_table_get_partition_by_partno; } FDISK_2.26;