27
28
#include <unistd.h>
28
29
#include <string.h>
29
30
#include <stdlib.h>
32
33
#include "progname.h"
34
35
#define DEFAULT_ENVBLK_SIZE 1024
36
#define DEFAULT_ENVBLK_PATH DEFAULT_DIRECTORY "/" GRUB_ENVBLK_DEFCFG
38
static struct argp_option options[] = {
39
{0, 0, 0, OPTION_DOC, N_("Commands:"), 1},
40
{"create", 0, 0, OPTION_DOC|OPTION_NO_USAGE,
41
N_("Create a blank environment block file."), 0},
42
{"list", 0, 0, OPTION_DOC|OPTION_NO_USAGE,
43
N_("List the current variables."), 0},
44
{"set [name=value ...]", 0, 0, OPTION_DOC|OPTION_NO_USAGE,
45
N_("Set variables."), 0},
46
{"unset [name ....]", 0, 0, OPTION_DOC|OPTION_NO_USAGE,
47
N_("Delete variables."), 0},
49
{0, 0, 0, OPTION_DOC, N_("Options:"), -1},
50
{"verbose", 'v', 0, 0, N_("Print verbose messages."), 0},
55
/* Print the version information. */
57
print_version (FILE *stream, struct argp_state *state)
59
fprintf (stream, "%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION);
61
void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
63
/* Set the bug report address */
64
const char *argp_program_bug_address = "<"PACKAGE_BUGREPORT">";
66
error_t argp_parser (int key, char *arg, struct argp_state *state)
74
case ARGP_KEY_NO_ARGS:
75
fprintf (stderr, "%s",
76
_("You need to specify at least one command.\n"));
81
return ARGP_ERR_UNKNOWN;
49
grub_xputs_real (const char *str)
54
void (*grub_xputs) (const char *str) = grub_xputs_real;
57
grub_env_get (const char *name __attribute__ ((unused)))
62
static struct option options[] = {
63
{"help", no_argument, 0, 'h'},
64
{"version", no_argument, 0, 'V'},
65
{"verbose", no_argument, 0, 'v'},
88
help_filter (int key, const char *text, void *input __attribute__ ((unused)))
92
case ARGP_KEY_HELP_POST_DOC:
93
return xasprintf(text, DEFAULT_ENVBLK_PATH);
101
options, argp_parser, N_("FILENAME COMMAND"),
103
Tool to edit environment block.")
105
If FILENAME is '-', the default value %s is used."),
106
NULL, help_filter, NULL
73
fprintf (stderr, "Try `%s --help' for more information.\n", program_name);
76
Usage: %s [OPTIONS] [FILENAME] COMMAND\n\
78
Tool to edit environment block.\n\
80
create create a blank environment block file\n\
81
list list the current variables\n\
82
set [name=value ...] set variables\n\
83
unset [name ....] delete variables\n\
85
-h, --help display this message and exit\n\
86
-V, --version print version information and exit\n\
87
-v, --verbose print verbose messages\n\
89
If not given explicitly, FILENAME defaults to %s.\n\
91
Report bugs to <%s>.\n",
92
program_name, DEFAULT_DIRECTORY "/" GRUB_ENVBLK_DEFCFG, PACKAGE_BUGREPORT);
98
110
create_envblk_file (const char *name)
267
int index, arg_count;
256
269
set_program_name (argv[0]);
258
271
grub_util_init_nls ();
260
/* Check for options. */
263
int c = getopt_long (argc, argv, "hVv", options, 0);
275
printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION);
288
/* Obtain the filename. */
291
fprintf (stderr, "no filename specified\n");
295
if (optind + 1 >= argc)
297
filename = DEFAULT_DIRECTORY "/" GRUB_ENVBLK_DEFCFG;
298
command = argv[optind];
273
/* Parse our arguments */
274
if (argp_parse (&argp, argc, argv, 0, &index, 0) != 0)
276
fprintf (stderr, "%s", _("Error in parsing command line arguments\n"));
280
arg_count = argc - index;
284
filename = DEFAULT_ENVBLK_PATH;
285
command = argv[index++];
302
filename = argv[optind];
303
command = argv[optind + 1];
289
filename = argv[index++];
290
if (strcmp (filename, "-") == 0)
291
filename = DEFAULT_ENVBLK_PATH;
292
command = argv[index++];
306
295
if (strcmp (command, "create") == 0)
308
297
else if (strcmp (command, "list") == 0)
309
298
list_variables (filename);
310
299
else if (strcmp (command, "set") == 0)
311
set_variables (filename, argc - optind - 2, argv + optind + 2);
300
set_variables (filename, argc - index, argv + index);
312
301
else if (strcmp (command, "unset") == 0)
313
unset_variables (filename, argc - optind - 2, argv + optind + 2);
302
unset_variables (filename, argc - index, argv + index);
316
fprintf (stderr, "unknown command %s\n", command);
305
char *program = xstrdup(program_name);
306
fprintf (stderr, _("Unknown command `%s'.\n"), command);
307
argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program);