]>
Commit | Line | Data |
---|---|---|
4020aa53 | 1 | /* read.c - Command to read variables from user. */ |
2 | /* | |
3 | * GRUB -- GRand Unified Bootloader | |
4 | * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. | |
5 | * | |
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. | |
10 | * | |
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. | |
15 | * | |
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/>. | |
18 | */ | |
19 | ||
20 | #include <grub/dl.h> | |
21 | #include <grub/misc.h> | |
22 | #include <grub/mm.h> | |
b1b797cb | 23 | #include <grub/env.h> |
4020aa53 | 24 | #include <grub/term.h> |
25 | #include <grub/types.h> | |
b1b797cb | 26 | #include <grub/command.h> |
77a79592 | 27 | #include <grub/i18n.h> |
4020aa53 | 28 | |
e745cf0c VS |
29 | GRUB_MOD_LICENSE ("GPLv3+"); |
30 | ||
4020aa53 | 31 | static char * |
32 | grub_getline (void) | |
33 | { | |
34 | int i; | |
35 | char *line; | |
36 | char *tmp; | |
0059cf6f | 37 | char c; |
4020aa53 | 38 | |
39 | i = 0; | |
40 | line = grub_malloc (1 + i + sizeof('\0')); | |
41 | if (! line) | |
42 | return NULL; | |
43 | ||
0059cf6f | 44 | while (1) |
4020aa53 | 45 | { |
0059cf6f | 46 | c = grub_getkey (); |
47 | if ((c == '\n') || (c == '\r')) | |
48 | break; | |
49 | ||
50 | line[i] = c; | |
51 | if (grub_isprint (c)) | |
dfed5c6b | 52 | grub_printf ("%c", c); |
4020aa53 | 53 | i++; |
54 | tmp = grub_realloc (line, 1 + i + sizeof('\0')); | |
55 | if (! tmp) | |
56 | { | |
57 | grub_free (line); | |
58 | return NULL; | |
59 | } | |
60 | line = tmp; | |
61 | } | |
62 | line[i] = '\0'; | |
63 | ||
64 | return line; | |
65 | } | |
66 | ||
67 | static grub_err_t | |
e0a6ca52 | 68 | grub_cmd_read (grub_command_t cmd __attribute__ ((unused)), int argc, char **args) |
4020aa53 | 69 | { |
70 | char *line = grub_getline (); | |
71 | if (! line) | |
72 | return grub_errno; | |
73 | if (argc > 0) | |
74 | grub_env_set (args[0], line); | |
75 | ||
76 | grub_free (line); | |
77 | return 0; | |
78 | } | |
79 | ||
b1b797cb | 80 | static grub_command_t cmd; |
4020aa53 | 81 | \f |
82 | GRUB_MOD_INIT(read) | |
83 | { | |
b1b797cb | 84 | cmd = grub_register_command ("read", grub_cmd_read, |
77a79592 | 85 | N_("[ENVVAR]"), |
86 | N_("Set variable with user input.")); | |
4020aa53 | 87 | } |
88 | ||
89 | GRUB_MOD_FINI(read) | |
90 | { | |
b1b797cb | 91 | grub_unregister_command (cmd); |
4020aa53 | 92 | } |