p = of_get_flat_dt_prop(node, "bootargs", &l);
if (p != NULL && l > 0) {
- strlcpy(cmdline, p, min((int)l, COMMAND_LINE_SIZE));
+ if (concat_cmdline) {
+ int cmdline_len;
+ int copy_len;
+ strlcat(cmdline, " ", COMMAND_LINE_SIZE);
+ cmdline_len = strlen(cmdline);
+ copy_len = COMMAND_LINE_SIZE - cmdline_len - 1;
+ copy_len = min((int)l, copy_len);
+ strncpy(cmdline + cmdline_len, p, copy_len);
+ cmdline[cmdline_len + copy_len] = '\0';
+ } else {
+ strlcpy(cmdline, p, min((int)l, COMMAND_LINE_SIZE));
+ }
}
- if (concat_cmdline)
- strlcat(cmdline, config_cmdline, COMMAND_LINE_SIZE);
-
pr_debug("Command line is: %s\n", (char*)data);
/* break now */
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
-#include <asm/setup.h> /* for COMMAND_LINE_SIZE */
-#include <asm/uaccess.h> /* copy_from_user */
-
-char proc_cmdline[COMMAND_LINE_SIZE];
-
static int cmdline_proc_show(struct seq_file *m, void *v)
{
- seq_printf(m, "%s\n", proc_cmdline);
+ seq_printf(m, "%s\n", saved_command_line);
return 0;
}
return single_open(file, cmdline_proc_show, NULL);
}
-static ssize_t cmdline_proc_write(struct file *file, const char __user *buf,
- size_t len, loff_t *ppos)
-{
- char str[COMMAND_LINE_SIZE];
- if (copy_from_user(str, buf, len)) {
- printk( KERN_INFO "[cmdline] copy_from_user failed.\n");
- return -EFAULT;
- }
- str[len] = '\0';
- strlcpy(proc_cmdline, str, min((int)len, COMMAND_LINE_SIZE));
-
- return len;
-}
-
static const struct file_operations cmdline_proc_fops = {
.open = cmdline_proc_open,
.read = seq_read,
- .write = cmdline_proc_write,
.llseek = seq_lseek,
.release = single_release,
};
static int __init proc_cmdline_init(void)
{
- strcpy(proc_cmdline, saved_command_line);
proc_create("cmdline", 0, NULL, &cmdline_proc_fops);
return 0;
}