Add no-argument version of commands and remove legacy_color
This commit is contained in:
parent
21d7be6612
commit
281d690594
2 changed files with 88 additions and 63 deletions
|
@ -500,39 +500,6 @@ grub_cmd_legacy_initrdnounzip (struct grub_command *mycmd __attribute__ ((unused
|
||||||
"no kernel with module support is loaded in legacy way");
|
"no kernel with module support is loaded in legacy way");
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_cmd_legacy_color (struct grub_command *mycmd __attribute__ ((unused)),
|
|
||||||
int argc, char **args)
|
|
||||||
{
|
|
||||||
if (argc < 1)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "color required");
|
|
||||||
grub_env_set ("color_normal", args[0]);
|
|
||||||
if (argc >= 2)
|
|
||||||
grub_env_set ("color_highlight", args[1]);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char *slash = grub_strchr (args[0], '/');
|
|
||||||
char *invert;
|
|
||||||
grub_size_t len;
|
|
||||||
|
|
||||||
len = grub_strlen (args[0]);
|
|
||||||
if (!slash)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "bad color specification %s",
|
|
||||||
args[0]);
|
|
||||||
invert = grub_malloc (len + 1);
|
|
||||||
if (!invert)
|
|
||||||
return grub_errno;
|
|
||||||
grub_memcpy (invert, slash + 1, len - (slash - args[0]) - 1);
|
|
||||||
invert[len - (slash - args[0]) - 1] = '/';
|
|
||||||
grub_memcpy (invert + len - (slash - args[0]), args[0], slash - args[0]);
|
|
||||||
invert[len] = 0;
|
|
||||||
grub_env_set ("color_highlight", invert);
|
|
||||||
grub_free (invert);
|
|
||||||
}
|
|
||||||
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
check_password_deny (const char *user __attribute__ ((unused)),
|
check_password_deny (const char *user __attribute__ ((unused)),
|
||||||
const char *entered __attribute__ ((unused)),
|
const char *entered __attribute__ ((unused)),
|
||||||
|
@ -714,13 +681,18 @@ grub_cmd_legacy_password (struct grub_command *mycmd __attribute__ ((unused)),
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_command_t cmd_source, cmd_configfile, cmd_kernel, cmd_initrd;
|
static grub_command_t cmd_source, cmd_configfile, cmd_kernel, cmd_initrd;
|
||||||
static grub_command_t cmd_color, cmd_password, cmd_initrdnounzip;
|
static grub_command_t cmd_password, cmd_initrdnounzip;
|
||||||
|
|
||||||
GRUB_MOD_INIT(legacycfg)
|
GRUB_MOD_INIT(legacycfg)
|
||||||
{
|
{
|
||||||
cmd_source = grub_register_command ("legacy_source",
|
cmd_source = grub_register_command ("legacy_source",
|
||||||
grub_cmd_legacy_source,
|
grub_cmd_legacy_source,
|
||||||
N_("FILE"), N_("Parse legacy config"));
|
N_("FILE"), N_("Parse legacy config"));
|
||||||
|
cmd_configfile = grub_register_command ("legacy_configfile",
|
||||||
|
grub_cmd_legacy_configfile,
|
||||||
|
N_("FILE"),
|
||||||
|
N_("Parse legacy config"));
|
||||||
|
|
||||||
cmd_kernel = grub_register_command ("legacy_kernel",
|
cmd_kernel = grub_register_command ("legacy_kernel",
|
||||||
grub_cmd_legacy_kernel,
|
grub_cmd_legacy_kernel,
|
||||||
N_("[--no-mem-option] [--type=TYPE] FILE [ARG ...]"),
|
N_("[--no-mem-option] [--type=TYPE] FILE [ARG ...]"),
|
||||||
|
@ -735,14 +707,6 @@ GRUB_MOD_INIT(legacycfg)
|
||||||
N_("FILE [ARG ...]"),
|
N_("FILE [ARG ...]"),
|
||||||
N_("Simulate grub-legacy modulenounzip command"));
|
N_("Simulate grub-legacy modulenounzip command"));
|
||||||
|
|
||||||
cmd_configfile = grub_register_command ("legacy_configfile",
|
|
||||||
grub_cmd_legacy_configfile,
|
|
||||||
N_("FILE"),
|
|
||||||
N_("Parse legacy config"));
|
|
||||||
cmd_color = grub_register_command ("legacy_color",
|
|
||||||
grub_cmd_legacy_color,
|
|
||||||
N_("NORMAL [HIGHLIGHT]"),
|
|
||||||
N_("Simulate grub-legacy color command"));
|
|
||||||
cmd_password = grub_register_command ("legacy_password",
|
cmd_password = grub_register_command ("legacy_password",
|
||||||
grub_cmd_legacy_password,
|
grub_cmd_legacy_password,
|
||||||
N_("[--md5] PASSWD [FILE]"),
|
N_("[--md5] PASSWD [FILE]"),
|
||||||
|
@ -756,6 +720,5 @@ GRUB_MOD_FINI(legacycfg)
|
||||||
grub_unregister_command (cmd_kernel);
|
grub_unregister_command (cmd_kernel);
|
||||||
grub_unregister_command (cmd_initrd);
|
grub_unregister_command (cmd_initrd);
|
||||||
grub_unregister_command (cmd_initrdnounzip);
|
grub_unregister_command (cmd_initrdnounzip);
|
||||||
grub_unregister_command (cmd_color);
|
|
||||||
grub_unregister_command (cmd_password);
|
grub_unregister_command (cmd_password);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,8 +41,11 @@ struct legacy_command
|
||||||
TYPE_REST_VERBATIM
|
TYPE_REST_VERBATIM
|
||||||
} argt[4];
|
} argt[4];
|
||||||
enum {
|
enum {
|
||||||
FLAG_IGNORE_REST = 1,
|
FLAG_IGNORE_REST = 1,
|
||||||
FLAG_SUFFIX = 2
|
FLAG_SUFFIX = 2,
|
||||||
|
FLAG_FALLBACK_AVAILABLE = 4,
|
||||||
|
FLAG_FALLBACK = 8,
|
||||||
|
FLAG_COLOR_INVERT = 16,
|
||||||
} flags;
|
} flags;
|
||||||
const char *shortdesc;
|
const char *shortdesc;
|
||||||
const char *longdesc;
|
const char *longdesc;
|
||||||
|
@ -65,8 +68,9 @@ struct legacy_command legacy_commands[] =
|
||||||
"FILE1 FILE2",
|
"FILE1 FILE2",
|
||||||
"Compare the file FILE1 with the FILE2 and inform the different values"
|
"Compare the file FILE1 with the FILE2 and inform the different values"
|
||||||
" if any."},
|
" if any."},
|
||||||
{"color", "legacy_color '%s' '%s'\n", 2, {TYPE_VERBATIM, TYPE_VERBATIM},
|
{"color", "set color_normal='%s'; set color_highlight='%s'\n",
|
||||||
FLAG_IGNORE_REST, "NORMAL [HIGHLIGHT]",
|
2, {TYPE_VERBATIM, TYPE_VERBATIM},
|
||||||
|
FLAG_IGNORE_REST | FLAG_FALLBACK_AVAILABLE, "NORMAL [HIGHLIGHT]",
|
||||||
"Change the menu colors. The color NORMAL is used for most"
|
"Change the menu colors. The color NORMAL is used for most"
|
||||||
" lines in the menu, and the color HIGHLIGHT is used to highlight the"
|
" lines in the menu, and the color HIGHLIGHT is used to highlight the"
|
||||||
" line where the cursor points. If you omit HIGHLIGHT, then the"
|
" line where the cursor points. If you omit HIGHLIGHT, then the"
|
||||||
|
@ -77,6 +81,9 @@ struct legacy_command legacy_commands[] =
|
||||||
" light-green, light-cyan, light-red, light-magenta, yellow and white."
|
" light-green, light-cyan, light-red, light-magenta, yellow and white."
|
||||||
" But only the first eight names can be used for BG. You can prefix"
|
" But only the first eight names can be used for BG. You can prefix"
|
||||||
" \"blink-\" to FG if you want a blinking foreground color."},
|
" \"blink-\" to FG if you want a blinking foreground color."},
|
||||||
|
{"color", "set color_normal='%s'; set color_highlight='%s'\n",
|
||||||
|
1, {TYPE_VERBATIM},
|
||||||
|
FLAG_IGNORE_REST | FLAG_FALLBACK | FLAG_COLOR_INVERT, NULL, NULL},
|
||||||
{"configfile", "legacy_configfile '%s'\n", 1, {TYPE_FILE}, 0, "FILE",
|
{"configfile", "legacy_configfile '%s'\n", 1, {TYPE_FILE}, 0, "FILE",
|
||||||
"Load FILE as the configuration file."},
|
"Load FILE as the configuration file."},
|
||||||
{"debug",
|
{"debug",
|
||||||
|
@ -160,10 +167,15 @@ struct legacy_command legacy_commands[] =
|
||||||
"FILE [ARG ...]",
|
"FILE [ARG ...]",
|
||||||
"The same as `module', except that automatic decompression is"
|
"The same as `module', except that automatic decompression is"
|
||||||
" disabled."},
|
" disabled."},
|
||||||
/* FIXME: allow toggle. */
|
{"pager", "set pager=%s; if [ \"$pager\" = 0 ]; then "
|
||||||
{"pager", "set pager=%d\n", 1, {TYPE_BOOL}, 0, "[FLAG]",
|
" echo Internal pager is now off; else echo Internal pager is now on; fi\n",
|
||||||
|
1, {TYPE_BOOL}, FLAG_FALLBACK_AVAILABLE, "[FLAG]",
|
||||||
"Toggle pager mode with no argument. If FLAG is given and its value"
|
"Toggle pager mode with no argument. If FLAG is given and its value"
|
||||||
" is `on', turn on the mode. If FLAG is `off', turn off the mode."},
|
" is `on', turn on the mode. If FLAG is `off', turn off the mode."},
|
||||||
|
{"pager",
|
||||||
|
"if [ \"$pager\" = 1 ]; then pager=0; echo Internal pager is now off;"
|
||||||
|
"else pager=1; echo Internal pager is now on; fi\n", 0, {},
|
||||||
|
FLAG_FALLBACK, NULL, NULL},
|
||||||
/* FIXME: partnew unsupported. */
|
/* FIXME: partnew unsupported. */
|
||||||
{"parttype", "parttool '%s' type=%s\n", 2, {TYPE_PARTITION, TYPE_INT}, 0,
|
{"parttype", "parttool '%s' type=%s\n", 2, {TYPE_PARTITION, TYPE_INT}, 0,
|
||||||
"PART TYPE", "Change the type of the partition PART to TYPE."},
|
"PART TYPE", "Change the type of the partition PART to TYPE."},
|
||||||
|
@ -193,9 +205,8 @@ struct legacy_command legacy_commands[] =
|
||||||
"Read a 32-bit value from memory at address ADDR and"
|
"Read a 32-bit value from memory at address ADDR and"
|
||||||
" display it in hex format."},
|
" display it in hex format."},
|
||||||
{"reboot", "reboot\n", 0, {}, 0, 0, "Reboot your system."},
|
{"reboot", "reboot\n", 0, {}, 0, 0, "Reboot your system."},
|
||||||
/* FIXME: Support printing. */
|
|
||||||
{"root", "set root='%s'; set legacy_hdbias='%s'\n",
|
{"root", "set root='%s'; set legacy_hdbias='%s'\n",
|
||||||
2, {TYPE_PARTITION, TYPE_INT}, 0,
|
2, {TYPE_PARTITION, TYPE_INT}, FLAG_FALLBACK_AVAILABLE,
|
||||||
"[DEVICE [HDBIAS]]",
|
"[DEVICE [HDBIAS]]",
|
||||||
"Set the current \"root device\" to the device DEVICE, then"
|
"Set the current \"root device\" to the device DEVICE, then"
|
||||||
" attempt to mount it to get the partition size (for passing the"
|
" attempt to mount it to get the partition size (for passing the"
|
||||||
|
@ -207,6 +218,7 @@ struct legacy_command legacy_commands[] =
|
||||||
" how many BIOS drive numbers are on controllers before the current"
|
" how many BIOS drive numbers are on controllers before the current"
|
||||||
" one. For example, if there is an IDE disk and a SCSI disk, and your"
|
" one. For example, if there is an IDE disk and a SCSI disk, and your"
|
||||||
" FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS."},
|
" FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS."},
|
||||||
|
{"root", "echo \"$root\"\n", 0, {}, FLAG_FALLBACK, NULL, NULL},
|
||||||
{"rootnoverify", "set root='%s'; set legacy_hdbias='%s'\n",
|
{"rootnoverify", "set root='%s'; set legacy_hdbias='%s'\n",
|
||||||
2, {TYPE_PARTITION, TYPE_INT}, 0,
|
2, {TYPE_PARTITION, TYPE_INT}, 0,
|
||||||
"[DEVICE [HDBIAS]]",
|
"[DEVICE [HDBIAS]]",
|
||||||
|
@ -215,6 +227,7 @@ struct legacy_command legacy_commands[] =
|
||||||
" GRUB can read, but setting the correct root device is still"
|
" GRUB can read, but setting the correct root device is still"
|
||||||
" desired. Note that the items mentioned in `root' which"
|
" desired. Note that the items mentioned in `root' which"
|
||||||
" derived from attempting the mount will NOT work correctly."},
|
" derived from attempting the mount will NOT work correctly."},
|
||||||
|
{"rootnoverify", "echo \"$root\"\n", 0, {}, FLAG_FALLBACK, NULL, NULL},
|
||||||
/* FIXME: support saving NUM and fallback. */
|
/* FIXME: support saving NUM and fallback. */
|
||||||
{"savedefault", "saved_entry=${chosen}; save_env saved_entry\n", 0, {}, 0,
|
{"savedefault", "saved_entry=${chosen}; save_env saved_entry\n", 0, {}, 0,
|
||||||
"[NUM | `fallback']",
|
"[NUM | `fallback']",
|
||||||
|
@ -432,7 +445,6 @@ grub_legacy_parse (const char *buf, char **entryname, int *suffix)
|
||||||
grub_memset (args, 0, sizeof (args));
|
grub_memset (args, 0, sizeof (args));
|
||||||
|
|
||||||
{
|
{
|
||||||
unsigned j = 0;
|
|
||||||
int hold_arg = 0;
|
int hold_arg = 0;
|
||||||
const char *curarg = NULL;
|
const char *curarg = NULL;
|
||||||
for (i = 0; i < legacy_commands[cmdnum].argc + hold_arg; i++)
|
for (i = 0; i < legacy_commands[cmdnum].argc + hold_arg; i++)
|
||||||
|
@ -445,6 +457,8 @@ grub_legacy_parse (const char *buf, char **entryname, int *suffix)
|
||||||
}
|
}
|
||||||
for (; grub_isspace (*ptr); ptr++);
|
for (; grub_isspace (*ptr); ptr++);
|
||||||
curarg = ptr;
|
curarg = ptr;
|
||||||
|
if (!*curarg)
|
||||||
|
break;
|
||||||
for (; *ptr && !grub_isspace (*ptr); ptr++);
|
for (; *ptr && !grub_isspace (*ptr); ptr++);
|
||||||
if (i != legacy_commands[cmdnum].argc - 1
|
if (i != legacy_commands[cmdnum].argc - 1
|
||||||
|| (legacy_commands[cmdnum].flags & FLAG_IGNORE_REST))
|
|| (legacy_commands[cmdnum].flags & FLAG_IGNORE_REST))
|
||||||
|
@ -463,7 +477,7 @@ grub_legacy_parse (const char *buf, char **entryname, int *suffix)
|
||||||
hold_arg = 1;
|
hold_arg = 1;
|
||||||
case TYPE_PARTITION:
|
case TYPE_PARTITION:
|
||||||
case TYPE_FILE:
|
case TYPE_FILE:
|
||||||
args[j++] = adjust_file (curarg, curarglen);
|
args[i] = adjust_file (curarg, curarglen);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_REST_VERBATIM:
|
case TYPE_REST_VERBATIM:
|
||||||
|
@ -481,7 +495,7 @@ grub_legacy_parse (const char *buf, char **entryname, int *suffix)
|
||||||
ptr++;
|
ptr++;
|
||||||
overhead += 3;
|
overhead += 3;
|
||||||
}
|
}
|
||||||
outptr0 = args[j++] = grub_malloc (overhead + (ptr - curarg));
|
outptr0 = args[i] = grub_malloc (overhead + (ptr - curarg));
|
||||||
if (!outptr0)
|
if (!outptr0)
|
||||||
return NULL;
|
return NULL;
|
||||||
ptr = curarg;
|
ptr = curarg;
|
||||||
|
@ -507,7 +521,7 @@ grub_legacy_parse (const char *buf, char **entryname, int *suffix)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_VERBATIM:
|
case TYPE_VERBATIM:
|
||||||
args[j++] = grub_legacy_escape (curarg, curarglen);
|
args[i] = grub_legacy_escape (curarg, curarglen);
|
||||||
break;
|
break;
|
||||||
case TYPE_FORCE_OPTION:
|
case TYPE_FORCE_OPTION:
|
||||||
case TYPE_NOAPM_OPTION:
|
case TYPE_NOAPM_OPTION:
|
||||||
|
@ -515,10 +529,10 @@ grub_legacy_parse (const char *buf, char **entryname, int *suffix)
|
||||||
case TYPE_OPTION:
|
case TYPE_OPTION:
|
||||||
if (is_option (legacy_commands[cmdnum].argt[i], curarg, curarglen))
|
if (is_option (legacy_commands[cmdnum].argt[i], curarg, curarglen))
|
||||||
{
|
{
|
||||||
args[j++] = grub_strndup (curarg, curarglen);
|
args[i] = grub_strndup (curarg, curarglen);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
args[j++] = grub_strdup ("");
|
args[i] = grub_strdup ("");
|
||||||
hold_arg = 1;
|
hold_arg = 1;
|
||||||
break;
|
break;
|
||||||
case TYPE_INT:
|
case TYPE_INT:
|
||||||
|
@ -526,8 +540,6 @@ grub_legacy_parse (const char *buf, char **entryname, int *suffix)
|
||||||
const char *brk;
|
const char *brk;
|
||||||
int base = 10;
|
int base = 10;
|
||||||
brk = curarg;
|
brk = curarg;
|
||||||
if (curarglen < 1)
|
|
||||||
args[j++] = grub_strdup ("0");
|
|
||||||
if (brk[0] == '0' && brk[1] == 'x')
|
if (brk[0] == '0' && brk[1] == 'x')
|
||||||
base = 16;
|
base = 16;
|
||||||
else if (brk[0] == '0')
|
else if (brk[0] == '0')
|
||||||
|
@ -545,21 +557,71 @@ grub_legacy_parse (const char *buf, char **entryname, int *suffix)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (brk == curarg)
|
if (brk == curarg)
|
||||||
args[j++] = grub_strdup ("0");
|
args[i] = grub_strdup ("0");
|
||||||
else
|
else
|
||||||
args[j++] = grub_strndup (curarg, brk - curarg);
|
args[i] = grub_strndup (curarg, brk - curarg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_BOOL:
|
case TYPE_BOOL:
|
||||||
if (curarglen == 2 && curarg[0] == 'o' && curarg[1] == 'n')
|
if (curarglen == 2 && curarg[0] == 'o' && curarg[1] == 'n')
|
||||||
args[j++] = grub_strdup ("1");
|
args[i] = grub_strdup ("1");
|
||||||
else
|
else
|
||||||
args[j++] = grub_strdup ("0");
|
args[i] = grub_strdup ("0");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (legacy_commands[cmdnum].argc > 0
|
||||||
|
&& args[legacy_commands[cmdnum].argc - 1] == NULL
|
||||||
|
&& (legacy_commands[cmdnum].flags & FLAG_FALLBACK_AVAILABLE)
|
||||||
|
&& args[legacy_commands[cmdnum + 1].argc] == NULL)
|
||||||
|
cmdnum++;
|
||||||
|
|
||||||
|
for (; i < legacy_commands[cmdnum].argc; i++)
|
||||||
|
switch (legacy_commands[cmdnum].argt[i])
|
||||||
|
{
|
||||||
|
case TYPE_FILE_NO_CONSUME:
|
||||||
|
case TYPE_PARTITION:
|
||||||
|
case TYPE_FILE:
|
||||||
|
case TYPE_REST_VERBATIM:
|
||||||
|
case TYPE_VERBATIM:
|
||||||
|
case TYPE_FORCE_OPTION:
|
||||||
|
case TYPE_NOAPM_OPTION:
|
||||||
|
case TYPE_TYPE_OR_NOMEM_OPTION:
|
||||||
|
case TYPE_OPTION:
|
||||||
|
args[i] = grub_strdup ("");
|
||||||
|
break;
|
||||||
|
case TYPE_BOOL:
|
||||||
|
case TYPE_INT:
|
||||||
|
args[i] = grub_strdup ("0");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (legacy_commands[cmdnum].flags & FLAG_COLOR_INVERT)
|
||||||
|
{
|
||||||
|
char *corig = args[legacy_commands[cmdnum].argc - 1];
|
||||||
|
char *slash = grub_strchr (corig, '/');
|
||||||
|
char *invert;
|
||||||
|
grub_size_t len;
|
||||||
|
|
||||||
|
len = grub_strlen (corig);
|
||||||
|
if (!slash)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "bad color specification %s",
|
||||||
|
args[0]);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
invert = grub_malloc (len + 1);
|
||||||
|
if (!invert)
|
||||||
|
return NULL;
|
||||||
|
grub_memcpy (invert, slash + 1, len - (slash - corig) - 1);
|
||||||
|
invert[len - (slash - args[0]) - 1] = '/';
|
||||||
|
grub_memcpy (invert + len - (slash - corig), corig, slash - corig);
|
||||||
|
invert[len] = 0;
|
||||||
|
args[legacy_commands[cmdnum].argc] = invert;
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
char *ret = grub_xasprintf (legacy_commands[cmdnum].map, args[0], args[1],
|
char *ret = grub_xasprintf (legacy_commands[cmdnum].map, args[0], args[1],
|
||||||
args[2], args[3]);
|
args[2], args[3]);
|
||||||
|
|
Loading…
Add table
Reference in a new issue