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>
This commit is contained in:
Renaud Métrich 2022-03-07 11:06:19 +01:00 committed by Daniel Kiper
parent 3e4cbbeca0
commit 21aed7b88a
3 changed files with 23 additions and 13 deletions

View File

@ -47,7 +47,7 @@ struct search_ctx
{ {
const char *key; const char *key;
const char *var; const char *var;
int no_floppy; enum search_flags flags;
char **hints; char **hints;
unsigned nhints; unsigned nhints;
int count; int count;
@ -62,7 +62,7 @@ iterate_device (const char *name, void *data)
int found = 0; int found = 0;
/* Skip floppy drives when requested. */ /* 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') name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
return 0; return 0;
@ -261,13 +261,13 @@ try (struct search_ctx *ctx)
} }
void 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) char **hints, unsigned nhints)
{ {
struct search_ctx ctx = { struct search_ctx ctx = {
.key = key, .key = key,
.var = var, .var = var,
.no_floppy = no_floppy, .flags = flags,
.hints = hints, .hints = hints,
.nhints = nhints, .nhints = nhints,
.count = 0, .count = 0,

View File

@ -89,6 +89,7 @@ grub_cmd_search (grub_extcmd_context_t ctxt, int argc, char **args)
const char *id = 0; const char *id = 0;
int i = 0, j = 0, nhints = 0; int i = 0, j = 0, nhints = 0;
char **hints = NULL; char **hints = NULL;
enum search_flags flags = SEARCH_FLAGS_NONE;
if (state[SEARCH_HINT].set) if (state[SEARCH_HINT].set)
for (i = 0; state[SEARCH_HINT].args[i]; i++) 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; goto out;
} }
if (state[SEARCH_NO_FLOPPY].set)
flags |= SEARCH_FLAGS_NO_FLOPPY;
if (state[SEARCH_LABEL].set) if (state[SEARCH_LABEL].set)
grub_search_label (id, var, state[SEARCH_NO_FLOPPY].set, grub_search_label (id, var, flags, hints, nhints);
hints, nhints);
else if (state[SEARCH_FS_UUID].set) else if (state[SEARCH_FS_UUID].set)
grub_search_fs_uuid (id, var, state[SEARCH_NO_FLOPPY].set, grub_search_fs_uuid (id, var, flags, hints, nhints);
hints, nhints);
else if (state[SEARCH_FILE].set) else if (state[SEARCH_FILE].set)
grub_search_fs_file (id, var, state[SEARCH_NO_FLOPPY].set, grub_search_fs_file (id, var, flags, hints, nhints);
hints, nhints);
else else
grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type"); grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");

View File

@ -19,11 +19,20 @@
#ifndef GRUB_SEARCH_HEADER #ifndef GRUB_SEARCH_HEADER
#define GRUB_SEARCH_HEADER 1 #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); 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); 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); char **hints, unsigned nhints);
#endif #endif