Changeset 0a2f5bdd in rtems for c/src/lib/libbsp/i386


Ignore:
Timestamp:
Mar 30, 2016, 4:51:46 AM (4 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
935e9c7d
Parents:
d33ab82
git-author:
Chris Johns <chrisj@…> (03/30/16 04:51:46)
git-committer:
Chris Johns <chrisj@…> (03/31/16 03:45:59)
Message:

bsp/pc386: Fix --console=/--printk= argument parsing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/i386/pc386/console/console_select.c

    rd33ab82 r0a2f5bdd  
    3434#endif
    3535
     36#include <bsp/bspimpl.h>
     37
    3638/*
    3739 * Forward prototype
     
    143145)
    144146{
    145   static const char *opt;
    146   char               working[64] = "";
    147   char              *p;
     147  static const char         *opt;
     148  const char                *option;
     149  const char                *comma;
     150  size_t                     length;
     151  size_t                     index;
     152  rtems_device_minor_number  minor;
    148153
    149154  /*
     
    156161
    157162  /*
    158    * bsp_cmdline_arg() returns pointer to a string. It may not be the
    159    * last string on the command line.
    160    */
    161   strncpy( working, opt, sizeof(working) );
    162   p = strchr( working, ' ' );
    163   if ( p ) {
    164     *p = '\0';
    165   }
    166 
    167   const char                *comma;
    168   size_t                     length = NAME_MAX;
    169   rtems_device_minor_number  minor;
    170   char                      *option = working;
     163   * Fine the length, there can be more command line visible.
     164   */
     165  length = 0;
     166  while ((opt[length] != ' ') && (opt[length] != '\0')) {
     167    ++length;
     168    if (length > NAME_MAX) {
     169      printk("invalid option (%s): too long\n", param);
     170      return false;
     171    }
     172  }
    171173
    172174  /*
    173175   * Only match up to a comma or NULL
    174176   */
    175   comma = strchr (option, ',');
    176 
    177   if ( comma ) {
    178     length = comma - option;
    179   }
    180 
    181   option += strnlen(param, 32);
     177  index = 0;
     178  while ((opt[index] != '=') && (index < length)) {
     179    ++index;
     180  }
     181
     182  if (opt[index] != '=') {
     183    printk("invalid option (%s): no equals\n", param);
     184    return false;
     185  }
     186
     187  ++index;
     188  option = &opt[index];
     189
     190  while ((opt[index] != ',') && (index < length)) {
     191    ++index;
     192  }
     193
     194  if (opt[index] == ',')
     195    comma = &opt[index];
     196  else
     197    comma = NULL;
     198
     199  length = &opt[index] - option;
    182200
    183201  if ( !bsp_find_console_entry( option, length, &minor ) ) {
     
    187205  *minor_out = minor;
    188206  if (comma) {
    189     console_tbl *conscfg;
    190 
    191     comma += 1;
    192     conscfg = &Console_Configuration_Ports[minor];
     207    console_tbl *conscfg = &Console_Configuration_Ports[minor];
     208
     209    option = comma + 1;
     210
    193211    if (strncmp (option, "115200", sizeof ("115200") - 1) == 0)
    194212      conscfg->pDeviceParams = (void *)115200;
Note: See TracChangeset for help on using the changeset viewer.