diff options
Diffstat (limited to 'kern/arg.c')
-rw-r--r-- | kern/arg.c | 40 |
1 files changed, 23 insertions, 17 deletions
@@ -15,14 +15,14 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <assert.h> #include <stdbool.h> #include <stddef.h> -#include <stdio.h> #include <string.h> #include <kern/arg.h> -#include <kern/assert.h> #include <kern/init.h> +#include <kern/log.h> #include <kern/macros.h> #include <kern/panic.h> @@ -35,22 +35,17 @@ static char arg_cmdline[ARG_CMDLINE_MAX_SIZE] __initdata; static const char *arg_cmdline_end __initdata; void __init -arg_setup(const char *cmdline) +arg_set_cmdline(const char *cmdline) { - size_t i, length; - - if (cmdline == NULL) { - arg_cmdline[0] = '\0'; - return; - } - - length = strlen(cmdline); + strlcpy(arg_cmdline, cmdline, sizeof(arg_cmdline)); +} - if ((length + 1) > ARRAY_SIZE(arg_cmdline)) { - panic("arg: command line too long"); - } +static int __init +arg_setup(void) +{ + size_t i, length; - memcpy(arg_cmdline, cmdline, length + 1); + length = strlen(arg_cmdline); for (i = 0; i < length; i++) { if (arg_cmdline[i] == ' ') { @@ -59,12 +54,23 @@ arg_setup(const char *cmdline) } arg_cmdline_end = arg_cmdline + length; + return 0; } +INIT_OP_DEFINE(arg_setup); + void __init -arg_info(void) +arg_log_info(void) { - printf("arg: %s\n", arg_cmdline); + char cmdline[sizeof(arg_cmdline)]; + size_t i; + + for (i = 0; &arg_cmdline[i] < arg_cmdline_end; i++) { + cmdline[i] = (arg_cmdline[i] == '\0') ? ' ' : arg_cmdline[i]; + } + + cmdline[i] = '\0'; + log_info("arg: %s", cmdline); } static const char * __init |