1 /* corecmd.c - critical commands which are registered in kernel */
3 * GRUB -- GRand Unified Bootloader
4 * Copyright (C) 2009 Free Software Foundation, Inc.
6 * GRUB is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * GRUB is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
24 #include <grub/misc.h>
25 #include <grub/term.h>
26 #include <grub/file.h>
27 #include <grub/device.h>
28 #include <grub/command.h>
29 #include <grub/i18n.h>
31 /* set ENVVAR=VALUE */
33 grub_core_cmd_set (struct grub_command
*cmd
__attribute__ ((unused
)),
34 int argc
, char *argv
[])
41 struct grub_env_var
*env
;
43 grub_printf ("%s=%s\n", env
->name
, grub_env_get (env
->name
));
48 val
= grub_strchr (var
, '=');
50 return grub_error (GRUB_ERR_BAD_ARGUMENT
, "not an assignment");
53 grub_env_set (var
, val
+ 1);
60 grub_core_cmd_unset (struct grub_command
*cmd
__attribute__ ((unused
)),
61 int argc
, char *argv
[])
64 return grub_error (GRUB_ERR_BAD_ARGUMENT
,
65 N_("one argument expected"));
67 grub_env_unset (argv
[0]);
73 grub_core_cmd_insmod (struct grub_command
*cmd
__attribute__ ((unused
)),
74 int argc
, char *argv
[])
79 return grub_error (GRUB_ERR_BAD_ARGUMENT
, N_("one argument expected"));
81 if (argv
[0][0] == '/' || argv
[0][0] == '(' || argv
[0][0] == '+')
82 mod
= grub_dl_load_file (argv
[0]);
84 mod
= grub_dl_load (argv
[0]);
93 grub_mini_print_devices (const char *name
, void *data
__attribute__ ((unused
)))
95 grub_printf ("(%s) ", name
);
101 grub_mini_print_files (const char *filename
,
102 const struct grub_dirhook_info
*info
,
103 void *data
__attribute__ ((unused
)))
105 grub_printf ("%s%s ", filename
, info
->dir
? "/" : "");
112 grub_core_cmd_ls (struct grub_command
*cmd
__attribute__ ((unused
)),
113 int argc
, char *argv
[])
117 grub_device_iterate (grub_mini_print_devices
, NULL
);
124 grub_device_t dev
= 0;
128 device_name
= grub_file_get_device_name (argv
[0]);
131 dev
= grub_device_open (device_name
);
135 fs
= grub_fs_probe (dev
);
136 path
= grub_strchr (argv
[0], ')');
142 if (! *path
&& ! device_name
)
144 grub_error (GRUB_ERR_BAD_ARGUMENT
, "invalid argument");
150 if (grub_errno
== GRUB_ERR_UNKNOWN_FS
)
151 grub_errno
= GRUB_ERR_NONE
;
153 grub_printf ("(%s): Filesystem is %s.\n",
154 device_name
, fs
? fs
->name
: "unknown");
158 (fs
->dir
) (dev
, path
, grub_mini_print_files
, NULL
);
165 grub_device_close (dev
);
167 grub_free (device_name
);
174 grub_register_core_commands (void)
177 cmd
= grub_register_command ("set", grub_core_cmd_set
,
178 N_("[ENVVAR=VALUE]"),
179 N_("Set an environment variable."));
181 cmd
->flags
|= GRUB_COMMAND_FLAG_EXTRACTOR
;
182 grub_register_command ("unset", grub_core_cmd_unset
,
184 N_("Remove an environment variable."));
185 grub_register_command ("ls", grub_core_cmd_ls
,
186 N_("[ARG]"), N_("List devices or files."));
187 grub_register_command ("insmod", grub_core_cmd_insmod
,
188 N_("MODULE"), N_("Insert a module."));