libfdisk: move get_parttypes to label API
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
773aae5c51
commit
5ab3760071
|
@ -1509,25 +1509,27 @@ static struct fdisk_parttype *ui_get_parttype(struct cfdisk *cf,
|
|||
{
|
||||
struct cfdisk_menuitem *d, *cm;
|
||||
size_t i = 0, nitems, idx = 0;
|
||||
struct fdisk_parttype *t = NULL;
|
||||
struct fdisk_parttype *types, *t = NULL;
|
||||
struct fdisk_label *lb;
|
||||
int has_typestr = 0;
|
||||
|
||||
DBG(UI, ul_debug("asking for parttype."));
|
||||
|
||||
lb = fdisk_get_label(cf->cxt, NULL);
|
||||
|
||||
/* create cfdisk menu according to label types, note that the
|
||||
* last cm[] item has to be empty -- so nitems + 1 */
|
||||
nitems = cf->cxt->label->nparttypes;
|
||||
if (!nitems)
|
||||
if (fdisk_label_get_parttypes(lb, &types, &nitems) || !nitems)
|
||||
return NULL;
|
||||
|
||||
cm = xcalloc(nitems + 1, sizeof(struct cfdisk_menuitem));
|
||||
if (!cm)
|
||||
return NULL;
|
||||
|
||||
has_typestr = cf->cxt->label->parttypes[0].typestr &&
|
||||
*cf->cxt->label->parttypes[0].typestr;
|
||||
has_typestr = fdisk_label_is_parttype_string(lb);
|
||||
|
||||
for (i = 0; i < nitems; i++) {
|
||||
struct fdisk_parttype *x = &cf->cxt->label->parttypes[i];
|
||||
struct fdisk_parttype *x = &types[i];
|
||||
char *name;
|
||||
|
||||
if (!x || !x->name)
|
||||
|
|
|
@ -354,11 +354,12 @@ int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask,
|
|||
struct fdisk_parttype *ask_partition_type(struct fdisk_context *cxt)
|
||||
{
|
||||
const char *q;
|
||||
struct fdisk_label *lb = fdisk_get_label(cxt, NULL);
|
||||
|
||||
if (!cxt || !cxt->label || !cxt->label->nparttypes)
|
||||
return NULL;
|
||||
|
||||
q = fdisk_is_parttype_string(cxt) ?
|
||||
q = fdisk_label_is_parttype_string(lb) ?
|
||||
_("Partition type (type L to list all types): ") :
|
||||
_("Hex code (type L to list all codes): ");
|
||||
do {
|
||||
|
|
|
@ -53,6 +53,43 @@ const char *fdisk_label_get_name(struct fdisk_label *lb)
|
|||
return lb ? lb->name : NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* fdisk_label_get_parttypes:
|
||||
* @lb: label
|
||||
* @types: returns array with supported partition types
|
||||
* @ntypes: returns number of types
|
||||
*
|
||||
* Returns: 0 on success, <0 on error.
|
||||
*/
|
||||
int fdisk_label_get_parttypes(struct fdisk_label *lb,
|
||||
struct fdisk_parttype **types,
|
||||
size_t *ntypes)
|
||||
{
|
||||
if (!lb)
|
||||
return -EINVAL;
|
||||
if (types)
|
||||
*types = lb->parttypes;
|
||||
if (ntypes)
|
||||
*ntypes = lb->nparttypes;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* fdisk_label_is_parttype_string:
|
||||
* @lb: label
|
||||
*
|
||||
* Returns: 1 if the label uses strings as partition type
|
||||
* identifiers (e.g. GPT UUIDS) or 0.
|
||||
*/
|
||||
int fdisk_label_is_parttype_string(struct fdisk_label *lb)
|
||||
{
|
||||
assert(lb);
|
||||
|
||||
if (lb->parttypes && lb->parttypes[0].typestr)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* fdisk_label_require_geometry:
|
||||
* @lb: label
|
||||
|
@ -176,8 +213,6 @@ int fdisk_write_disklabel(struct fdisk_context *cxt)
|
|||
return cxt->label->op->write(cxt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* fdisk_verify_disklabel:
|
||||
* @cxt: fdisk context
|
||||
|
@ -198,8 +233,6 @@ int fdisk_verify_disklabel(struct fdisk_context *cxt)
|
|||
return cxt->label->op->verify(cxt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* fdisk_list_disklabel:
|
||||
* @cxt: fdisk context
|
||||
|
@ -267,7 +300,20 @@ int fdisk_create_disklabel(struct fdisk_context *cxt, const char *name)
|
|||
return cxt->label->op->create(cxt);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* fdisk_locate_disklabel:
|
||||
* @cxt: context
|
||||
* @n: N item
|
||||
* @name: return item name
|
||||
* @offset: return offset where is item
|
||||
* @size: of the item
|
||||
*
|
||||
* Locate disklabel and returns info about @n item of the label. For example
|
||||
* GPT is composed from two items, PMBR and GPT, n=0 return offset to PMBR and n=1
|
||||
* return offset to GPT. For more details see 'D' expect fdisk command.
|
||||
*
|
||||
* Returns: 0 on succes, <0 on error, 1 no more items.
|
||||
*/
|
||||
int fdisk_locate_disklabel(struct fdisk_context *cxt, int n, const char **name,
|
||||
off_t *offset, size_t *size)
|
||||
{
|
||||
|
@ -300,7 +346,7 @@ int fdisk_get_disklabel_id(struct fdisk_context *cxt, char **id)
|
|||
}
|
||||
|
||||
/**
|
||||
* fdisk_get_disklabel_id:
|
||||
* fdisk_set_disklabel_id:
|
||||
* @cxt: fdisk context
|
||||
*
|
||||
* Returns 0 on success, otherwise, a corresponding error.
|
||||
|
@ -337,19 +383,6 @@ int fdisk_set_partition_type(struct fdisk_context *cxt,
|
|||
return cxt->label->op->part_set_type(cxt, partnum, t);
|
||||
}
|
||||
|
||||
/**
|
||||
* fdisk_get_nparttypes:
|
||||
* @cxt: fdisk context
|
||||
*
|
||||
* Returns: number of partition types supported by the current label
|
||||
*/
|
||||
size_t fdisk_get_nparttypes(struct fdisk_context *cxt)
|
||||
{
|
||||
if (!cxt || !cxt->label)
|
||||
return 0;
|
||||
|
||||
return cxt->label->nparttypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* fdisk_partition_taggle_flag:
|
||||
|
|
|
@ -129,7 +129,6 @@ extern struct fdisk_parttype *fdisk_parse_parttype(struct fdisk_context *cxt, co
|
|||
|
||||
extern struct fdisk_parttype *fdisk_new_unknown_parttype(unsigned int type, const char *typestr);
|
||||
extern void fdisk_free_parttype(struct fdisk_parttype *type);
|
||||
extern size_t fdisk_get_nparttypes(struct fdisk_context *cxt);
|
||||
|
||||
extern int fdisk_is_parttype_string(struct fdisk_context *cxt);
|
||||
|
||||
|
@ -180,6 +179,10 @@ extern int fdisk_delete_partition(struct fdisk_context *cxt, size_t partnum);
|
|||
extern int fdisk_set_partition_type(struct fdisk_context *cxt, size_t partnum,
|
||||
struct fdisk_parttype *t);
|
||||
|
||||
extern int fdisk_label_get_parttypes(struct fdisk_label *lb,
|
||||
struct fdisk_parttype **types,
|
||||
size_t *ntypes);
|
||||
extern int fdisk_label_is_parttype_string(struct fdisk_label *lb);
|
||||
|
||||
extern int fdisk_label_get_fields_ids(
|
||||
struct fdisk_label *lb,
|
||||
|
|
|
@ -20,7 +20,7 @@ struct fdisk_parttype *fdisk_get_parttype_from_code(
|
|||
{
|
||||
size_t i;
|
||||
|
||||
if (!fdisk_get_nparttypes(cxt))
|
||||
if (!cxt->label->nparttypes)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < cxt->label->nparttypes; i++)
|
||||
|
@ -45,7 +45,7 @@ struct fdisk_parttype *fdisk_get_parttype_from_string(
|
|||
{
|
||||
size_t i;
|
||||
|
||||
if (!fdisk_get_nparttypes(cxt))
|
||||
if (!cxt->label->nparttypes)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < cxt->label->nparttypes; i++)
|
||||
|
@ -107,7 +107,7 @@ struct fdisk_parttype *fdisk_parse_parttype(
|
|||
unsigned int code = 0;
|
||||
char *typestr = NULL, *end = NULL;
|
||||
|
||||
if (!fdisk_get_nparttypes(cxt))
|
||||
if (!cxt->label->nparttypes)
|
||||
return NULL;
|
||||
|
||||
DBG(CXT, ul_debugobj(cxt, "parsing '%s' partition type", str));
|
||||
|
@ -138,7 +138,7 @@ struct fdisk_parttype *fdisk_parse_parttype(
|
|||
errno = 0;
|
||||
i = strtol(str, &end, 0);
|
||||
if (errno == 0 && *end == '\0' && i > 0
|
||||
&& i - 1 < (int) fdisk_get_nparttypes(cxt)) {
|
||||
&& i - 1 < (int) cxt->label->nparttypes) {
|
||||
ret = &types[i - 1];
|
||||
goto done;
|
||||
}
|
||||
|
@ -165,19 +165,4 @@ void fdisk_free_parttype(struct fdisk_parttype *t)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fdisk_is_parttype_string:
|
||||
* @cxt: context
|
||||
*
|
||||
* Returns: 1 if the current label uses strings as partition type
|
||||
* identifiers (e.g. GPT UUIDS) or 0.
|
||||
*/
|
||||
int fdisk_is_parttype_string(struct fdisk_context *cxt)
|
||||
{
|
||||
assert(cxt);
|
||||
assert(cxt->label);
|
||||
|
||||
if (cxt->label->parttypes && cxt->label->parttypes[0].typestr)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue