summaryrefslogtreecommitdiff
path: root/kern/arg.c
diff options
context:
space:
mode:
Diffstat (limited to 'kern/arg.c')
-rw-r--r--kern/arg.c40
1 files changed, 23 insertions, 17 deletions
diff --git a/kern/arg.c b/kern/arg.c
index 02ed4b7b..7bb616a4 100644
--- a/kern/arg.c
+++ b/kern/arg.c
@@ -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