+struct grub2_resource_info {
+ struct grub2_root *root;
+ char *path;
+};
+
+/* we use slightly different resources for grub2 */
+static struct resource *create_grub2_resource(void *ctx,
+ struct discover_device *orig_device,
+ struct grub2_root *root, const char *path)
+{
+ struct grub2_resource_info *info;
+ struct resource *res;
+
+ res = talloc(ctx, struct resource);
+
+ if (root) {
+ info = talloc(res, struct grub2_resource_info);
+ info->root = root;
+ talloc_reference(info, root);
+ info->path = talloc_strdup(info, path);
+
+ res->resolved = false;
+ res->info = info;
+
+ } else
+ resolve_resource_against_device(res, orig_device, path);
+
+ return res;
+}
+
+static bool resolve_grub2_resource(struct device_handler *handler,
+ struct resource *res)
+{
+ struct grub2_resource_info *info = res->info;
+ struct discover_device *dev;
+
+ assert(!res->resolved);
+
+ dev = device_lookup_by_uuid(handler, info->root->uuid);
+
+ if (!dev)
+ return false;
+
+ resolve_resource_against_device(res, dev, info->path);
+ talloc_free(info);
+
+ return true;
+}
+
+static bool current_option_is_default(struct grub2_state *state)
+{
+ if (state->default_idx < 0)
+ return false;
+ return state->cur_idx == state->default_idx;
+}
+