diff options
-rw-r--r-- | libfdisk/docs/libfdisk-sections.txt | 1 | ||||
-rw-r--r-- | libfdisk/src/label.c | 41 | ||||
-rw-r--r-- | libfdisk/src/libfdisk.h.in | 5 | ||||
-rw-r--r-- | libfdisk/src/libfdisk.sym | 11 |
4 files changed, 53 insertions, 5 deletions
diff --git a/libfdisk/docs/libfdisk-sections.txt b/libfdisk/docs/libfdisk-sections.txt index 02b775ea6..ea35e2bc5 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 717a8cd80..dd9fef040 100644 --- a/libfdisk/src/label.c +++ b/libfdisk/src/label.c @@ -157,6 +157,47 @@ int fdisk_label_get_fields_ids( } /** + * 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 * @id: FDISK_FIELD_* diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in index a5a465674..bfb22a2f7 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 1e6394465..15c268ee3 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; |