/* rescue_parser.c - rescue mode parser */ /* * VasEBoot -- GRand Unified Bootloader * Copyright (C) 2009 Free Software Foundation, Inc. * * VasEBoot is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * VasEBoot is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with VasEBoot. If not, see . */ #include #include #include #include #include #include #include VasEBoot_err_t VasEBoot_rescue_parse_line (char *line, VasEBoot_reader_getline_t getline, void *getline_data) { char *name; int n; VasEBoot_command_t cmd; char **args; if (VasEBoot_parser_split_cmdline (line, getline, getline_data, &n, &args) || n < 0) return VasEBoot_errno; if (n == 0) return VasEBoot_ERR_NONE; /* In case of an assignment set the environment accordingly instead of calling a function. */ if (n == 1) { char *val = VasEBoot_strchr (args[0], '='); if (val) { val[0] = 0; VasEBoot_env_set (args[0], val + 1); val[0] = '='; goto quit; } } /* Get the command name. */ name = args[0]; /* If nothing is specified, restart. */ if (*name == '\0') goto quit; cmd = VasEBoot_command_find (name); if (cmd) { (cmd->func) (cmd, n - 1, &args[1]); } else { VasEBoot_printf_ (N_("Unknown command `%s'.\n"), name); if (VasEBoot_command_find ("help")) VasEBoot_printf ("Try `help' for usage\n"); } quit: /* Arguments are returned in single memory chunk separated by zeroes */ VasEBoot_free (args[0]); VasEBoot_free (args); return VasEBoot_errno; }