1 /* cmdline.c - linux command line handling */
3 * GRUB -- GRand Unified Bootloader
4 * Copyright (C) 2010 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/lib/cmdline.h>
21 #include <grub/misc.h>
23 static unsigned int check_arg (char *c
, int *has_space
)
26 unsigned int size
= 0;
30 if (*c
== '\\' || *c
== '\'' || *c
== '"')
48 unsigned int grub_loader_cmdline_size (int argc
, char *argv
[])
51 unsigned int size
= 0;
53 for (i
= 0; i
< argc
; i
++)
55 size
+= check_arg (argv
[i
], 0);
56 size
++; /* Separator space or NULL. */
66 grub_create_loader_cmdline (int argc
, char *argv
[], char *buf
,
67 grub_size_t size
, enum grub_verify_string_type type
)
70 unsigned int arg_size
;
71 char *c
, *orig_buf
= buf
;
73 for (i
= 0; i
< argc
; i
++)
76 arg_size
= check_arg(argv
[i
], &space
);
77 arg_size
++; /* Separator space or NULL. */
89 if (*c
== '\\' && *(c
+1) == 'x' &&
90 grub_isxdigit(*(c
+2)) && grub_isxdigit(*(c
+3)))
98 else if (*c
== '\\' || *c
== '\'' || *c
== '"')
111 /* Replace last space with null. */
117 return grub_verify_string (orig_buf
, type
);