aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenaud Métrich <rmetrich@redhat.com>2022-03-07 11:06:19 +0100
committerDaniel Kiper <daniel.kiper@oracle.com>2022-04-04 17:59:11 +0200
commit21aed7b88a5ee1495edf3b6b8f4ee3a6db447d59 (patch)
treefa08ae6e782a18759840bb18d9376e61a9058ab0
parent3e4cbbeca0ef35097301a1086f85fd0d119e64aa (diff)
downloadgrub-21aed7b88a5ee1495edf3b6b8f4ee3a6db447d59.tar.gz
commands/search: Refactor --no-floppy option to have something generic
Signed-off-by: Renaud Métrich <rmetrich@redhat.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
-rw-r--r--grub-core/commands/search.c8
-rw-r--r--grub-core/commands/search_wrap.c13
-rw-r--r--include/grub/search.h15
3 files changed, 23 insertions, 13 deletions
diff --git a/grub-core/commands/search.c b/grub-core/commands/search.c
index de90259cd..125113505 100644
--- a/grub-core/commands/search.c
+++ b/grub-core/commands/search.c
@@ -47,7 +47,7 @@ struct search_ctx
{
const char *key;
const char *var;
- int no_floppy;
+ enum search_flags flags;
char **hints;
unsigned nhints;
int count;
@@ -62,7 +62,7 @@ iterate_device (const char *name, void *data)
int found = 0;
/* Skip floppy drives when requested. */
- if (ctx->no_floppy &&
+ if (ctx->flags & SEARCH_FLAGS_NO_FLOPPY &&
name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
return 0;
@@ -261,13 +261,13 @@ try (struct search_ctx *ctx)
}
void
-FUNC_NAME (const char *key, const char *var, int no_floppy,
+FUNC_NAME (const char *key, const char *var, enum search_flags flags,
char **hints, unsigned nhints)
{
struct search_ctx ctx = {
.key = key,
.var = var,
- .no_floppy = no_floppy,
+ .flags = flags,
.hints = hints,
.nhints = nhints,
.count = 0,
diff --git a/grub-core/commands/search_wrap.c b/grub-core/commands/search_wrap.c
index 47ab56977..b79a2e99e 100644
--- a/grub-core/commands/search_wrap.c
+++ b/grub-core/commands/search_wrap.c
@@ -89,6 +89,7 @@ grub_cmd_search (grub_extcmd_context_t ctxt, int argc, char **args)
const char *id = 0;
int i = 0, j = 0, nhints = 0;
char **hints = NULL;
+ enum search_flags flags = SEARCH_FLAGS_NONE;
if (state[SEARCH_HINT].set)
for (i = 0; state[SEARCH_HINT].args[i]; i++)
@@ -180,15 +181,15 @@ grub_cmd_search (grub_extcmd_context_t ctxt, int argc, char **args)
goto out;
}
+ if (state[SEARCH_NO_FLOPPY].set)
+ flags |= SEARCH_FLAGS_NO_FLOPPY;
+
if (state[SEARCH_LABEL].set)
- grub_search_label (id, var, state[SEARCH_NO_FLOPPY].set,
- hints, nhints);
+ grub_search_label (id, var, flags, hints, nhints);
else if (state[SEARCH_FS_UUID].set)
- grub_search_fs_uuid (id, var, state[SEARCH_NO_FLOPPY].set,
- hints, nhints);
+ grub_search_fs_uuid (id, var, flags, hints, nhints);
else if (state[SEARCH_FILE].set)
- grub_search_fs_file (id, var, state[SEARCH_NO_FLOPPY].set,
- hints, nhints);
+ grub_search_fs_file (id, var, flags, hints, nhints);
else
grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
diff --git a/include/grub/search.h b/include/grub/search.h
index d80347df3..fa71cd950 100644
--- a/include/grub/search.h
+++ b/include/grub/search.h
@@ -19,11 +19,20 @@
#ifndef GRUB_SEARCH_HEADER
#define GRUB_SEARCH_HEADER 1
-void grub_search_fs_file (const char *key, const char *var, int no_floppy,
+enum search_flags
+ {
+ SEARCH_FLAGS_NONE = 0,
+ SEARCH_FLAGS_NO_FLOPPY = 1
+ };
+
+void grub_search_fs_file (const char *key, const char *var,
+ enum search_flags flags,
char **hints, unsigned nhints);
-void grub_search_fs_uuid (const char *key, const char *var, int no_floppy,
+void grub_search_fs_uuid (const char *key, const char *var,
+ enum search_flags flags,
char **hints, unsigned nhints);
-void grub_search_label (const char *key, const char *var, int no_floppy,
+void grub_search_label (const char *key, const char *var,
+ enum search_flags flags,
char **hints, unsigned nhints);
#endif