Upgraded GRUB2 to 2.00 release.
[AROS.git] / arch / all-pc / boot / grub2-aros / grub-core / kern / corecmd.c
blobeec575c05670300feac8329ba3f263b1e008925e
1 /* corecmd.c - critical commands which are registered in kernel */
2 /*
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/>.
20 #include <grub/mm.h>
21 #include <grub/dl.h>
22 #include <grub/err.h>
23 #include <grub/env.h>
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 */
32 static grub_err_t
33 grub_core_cmd_set (struct grub_command *cmd __attribute__ ((unused)),
34 int argc, char *argv[])
36 char *var;
37 char *val;
39 auto int print_env (struct grub_env_var *env);
41 int print_env (struct grub_env_var *env)
43 grub_printf ("%s=%s\n", env->name, env->value);
44 return 0;
47 if (argc < 1)
49 grub_env_iterate (print_env);
50 return 0;
53 var = argv[0];
54 val = grub_strchr (var, '=');
55 if (! val)
56 return grub_error (GRUB_ERR_BAD_ARGUMENT, "not an assignment");
58 val[0] = 0;
59 grub_env_set (var, val + 1);
60 val[0] = '=';
62 return 0;
65 static grub_err_t
66 grub_core_cmd_unset (struct grub_command *cmd __attribute__ ((unused)),
67 int argc, char *argv[])
69 if (argc < 1)
70 return grub_error (GRUB_ERR_BAD_ARGUMENT,
71 N_("one argument expected"));
73 grub_env_unset (argv[0]);
74 return 0;
77 /* insmod MODULE */
78 static grub_err_t
79 grub_core_cmd_insmod (struct grub_command *cmd __attribute__ ((unused)),
80 int argc, char *argv[])
82 grub_dl_t mod;
84 if (argc == 0)
85 return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
87 if (argv[0][0] == '/' || argv[0][0] == '(' || argv[0][0] == '+')
88 mod = grub_dl_load_file (argv[0]);
89 else
90 mod = grub_dl_load (argv[0]);
92 if (mod)
93 grub_dl_ref (mod);
95 return 0;
98 static int
99 grub_mini_print_devices (const char *name)
101 grub_printf ("(%s) ", name);
103 return 0;
106 static int
107 grub_mini_print_files (const char *filename,
108 const struct grub_dirhook_info *info)
110 grub_printf ("%s%s ", filename, info->dir ? "/" : "");
112 return 0;
115 /* ls [ARG] */
116 static grub_err_t
117 grub_core_cmd_ls (struct grub_command *cmd __attribute__ ((unused)),
118 int argc, char *argv[])
120 if (argc < 1)
122 grub_device_iterate (grub_mini_print_devices);
123 grub_xputs ("\n");
124 grub_refresh ();
126 else
128 char *device_name;
129 grub_device_t dev = 0;
130 grub_fs_t fs;
131 char *path;
133 device_name = grub_file_get_device_name (argv[0]);
134 if (grub_errno)
135 goto fail;
136 dev = grub_device_open (device_name);
137 if (! dev)
138 goto fail;
140 fs = grub_fs_probe (dev);
141 path = grub_strchr (argv[0], ')');
142 if (! path)
143 path = argv[0];
144 else
145 path++;
147 if (! path && ! device_name)
149 grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument");
150 goto fail;
153 if (! path)
155 if (grub_errno == GRUB_ERR_UNKNOWN_FS)
156 grub_errno = GRUB_ERR_NONE;
158 grub_printf ("(%s): Filesystem is %s.\n",
159 device_name, fs ? fs->name : "unknown");
161 else if (fs)
163 (fs->dir) (dev, path, grub_mini_print_files);
164 grub_xputs ("\n");
165 grub_refresh ();
168 fail:
169 if (dev)
170 grub_device_close (dev);
172 grub_free (device_name);
175 return grub_errno;
178 void
179 grub_register_core_commands (void)
181 grub_command_t cmd;
182 cmd = grub_register_command ("set", grub_core_cmd_set,
183 N_("[ENVVAR=VALUE]"),
184 N_("Set an environment variable."));
185 if (cmd)
186 cmd->flags |= GRUB_COMMAND_FLAG_EXTRACTOR;
187 grub_register_command ("unset", grub_core_cmd_unset,
188 N_("ENVVAR"),
189 N_("Remove an environment variable."));
190 grub_register_command ("ls", grub_core_cmd_ls,
191 N_("[ARG]"), N_("List devices or files."));
192 grub_register_command ("insmod", grub_core_cmd_insmod,
193 N_("MODULE"), N_("Insert a module."));