[PATCH] bsp/pc386: Fix --console=/--printk argument parsing.
Joel Sherrill
joel at rtems.org
Wed Mar 30 11:33:13 UTC 2016
What was broken? It worked fine in my testing.
On Mar 29, 2016 11:57 PM, "Chris Johns" <chrisj at rtems.org> wrote:
> ---
> .../lib/libbsp/i386/pc386/console/console_select.c | 62
> ++++++++++++++--------
> 1 file changed, 41 insertions(+), 21 deletions(-)
>
> diff --git a/c/src/lib/libbsp/i386/pc386/console/console_select.c
> b/c/src/lib/libbsp/i386/pc386/console/console_select.c
> index 3fb31ec..7b40f97 100644
> --- a/c/src/lib/libbsp/i386/pc386/console/console_select.c
> +++ b/c/src/lib/libbsp/i386/pc386/console/console_select.c
> @@ -33,6 +33,8 @@
> #include <crt.h>
> #endif
>
> +#include <bsp/bspimpl.h>
> +
> /*
> * Forward prototype
> */
> @@ -137,14 +139,19 @@ static void parse_com1_com4_enable(void)
> }
> }
>
> +extern char* bsp_boot_cmdline;
> +
> static bool parse_printk_or_console(
> const char *param,
> rtems_device_minor_number *minor_out
> )
> {
> - static const char *opt;
> - char working[64] = "";
> - char *p;
> + static const char *opt;
> + const char *option;
> + const char *comma;
> + size_t length;
> + size_t index;
> + rtems_device_minor_number minor;
>
> /*
> * Check the command line for the type of mode the console is.
> @@ -155,30 +162,43 @@ static bool parse_printk_or_console(
> }
>
> /*
> - * bsp_cmdline_arg() returns pointer to a string. It may not be the
> - * last string on the command line.
> + * Fine the length, there can be more command line visible.
> */
> - strncpy( working, opt, sizeof(working) );
> - p = strchr( working, ' ' );
> - if ( p ) {
> - *p = '\0';
> + length = 0;
> + while ((opt[length] != ' ') && (opt[length] != '\0')) {
> + ++length;
> + if (length > NAME_MAX) {
> + printk("invalid option (%s): too long\n", param);
> + return false;
> + }
> }
>
> - const char *comma;
> - size_t length = NAME_MAX;
> - rtems_device_minor_number minor;
> - char *option = working;
> -
> /*
> * Only match up to a comma or NULL
> */
> - comma = strchr (option, ',');
> + index = 0;
> + while ((opt[index] != '=') && (index < length)) {
> + ++index;
> + }
> +
> + if (opt[index] != '=') {
> + printk("invalid option (%s): no equals\n", param);
> + return false;
> + }
> +
> + ++index;
> + option = &opt[index];
>
> - if ( comma ) {
> - length = comma - option;
> + while ((opt[index] != ',') && (index < length)) {
> + ++index;
> }
>
> - option += strnlen(param, 32);
> + if (opt[index] == ',')
> + comma = &opt[index];
> + else
> + comma = NULL;
> +
> + length = &opt[index] - option;
>
> if ( !bsp_find_console_entry( option, length, &minor ) ) {
> return false;
> @@ -186,10 +206,10 @@ static bool parse_printk_or_console(
>
> *minor_out = minor;
> if (comma) {
> - console_tbl *conscfg;
> + console_tbl *conscfg = &Console_Configuration_Ports[minor];
> +
> + option = comma + 1;
>
> - comma += 1;
> - conscfg = &Console_Configuration_Ports[minor];
> if (strncmp (option, "115200", sizeof ("115200") - 1) == 0)
> conscfg->pDeviceParams = (void *)115200;
> else if (strncmp (option, "57600", sizeof ("57600") - 1) == 0)
> --
> 2.3.0
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20160330/3a5e50b3/attachment-0002.html>
More information about the devel
mailing list