static void reset_context(struct fdisk_context *cxt)
{
- size_t nlbs;
+ size_t nlbs, i;
struct fdisk_label *lbs[ ARRAY_SIZE(cxt->labels) ];
DBG(CONTEXT, dbgprint("\n-----\nresetting context %p", cxt));
- fdisk_deinit_label(cxt); /* reset the current label */
+
+ /* reset drives' private data */
+ for (i = 0; i < cxt->nlabels; i++)
+ fdisk_deinit_label(cxt->labels[i]);
/* remember permanent setting */
memcpy(lbs, cxt->labels, sizeof(lbs));
* Generic label
*/
struct fdisk_label {
- const char *name;
-
+ /* persistent information */
+ const char *name;
struct fdisk_parttype *parttypes;
size_t nparttypes; /* number of items in parttypes[] */
+ struct fdisk_context *cxt;
const struct fdisk_label_operations *op;
- struct fdisk_context *cxt;
};
/* label allocators */
/* label.c */
extern int fdisk_probe_labels(struct fdisk_context *cxt);
-extern void fdisk_deinit_label(struct fdisk_context *cxt);
+extern void fdisk_deinit_label(struct fdisk_label *lb);
#endif /* _LIBFDISK_PRIVATE_H */
#endif
}
- fdisk_deinit_label(cxt); /* deinitialize the current label */
+ if (cxt->label)
+ fdisk_deinit_label(cxt->label);
cxt->label = fdisk_context_get_label(cxt, name);
if (!cxt->label)
/*
* Resets the current used label driver to initial state
*/
-void fdisk_deinit_label(struct fdisk_context *cxt)
+void fdisk_deinit_label(struct fdisk_label *lb)
{
- assert(cxt);
+ assert(lb);
- if (!cxt->label || !cxt->label->op->deinit)
- return;
-
- cxt->label->op->deinit(cxt->label);
+ /* private label information */
+ if (lb->op->deinit)
+ lb->op->deinit(lb);
}