On Thu, Mar 10, 2016 at 10:35 AM, Joel Sherrill <j...@rtems.org> wrote:
> > > On Wed, Mar 9, 2016 at 8:15 PM, Gedare Bloom <ged...@rtems.org> wrote: > >> On Wed, Mar 9, 2016 at 5:24 PM, Joel Sherrill <j...@rtems.org> wrote: >> > --- >> > c/src/lib/libbsp/shared/console.c | 49 >> ++++++++++++++++++++++++++++----------- >> > 1 file changed, 36 insertions(+), 13 deletions(-) >> > >> > diff --git a/c/src/lib/libbsp/shared/console.c >> b/c/src/lib/libbsp/shared/console.c >> > index 81a70b1..d030065 100644 >> > --- a/c/src/lib/libbsp/shared/console.c >> > +++ b/c/src/lib/libbsp/shared/console.c >> > @@ -7,7 +7,7 @@ >> > */ >> > >> > /* >> > - * COPYRIGHT (c) 1989-2011. >> > + * COPYRIGHT (c) 1989-2011, 2016. >> > * On-Line Applications Research Corporation (OAR). >> > * >> > * The license and distribution terms for this file may be >> > @@ -46,13 +46,28 @@ void console_initialize_data(void) >> > if ( Console_Port_Tbl ) >> > return; >> > >> > + /* >> > + * Allocate memory for the table of device pointers. >> > + */ >> > Console_Port_Count = Console_Configuration_Count; >> > Console_Port_Tbl = malloc( Console_Port_Count * sizeof( >> console_tbl * ) ); >> > if (Console_Port_Tbl == NULL) >> > bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_0 ); >> > >> > - for (i=0 ; i < Console_Port_Count ; i++) >> > + /* >> > + * Allocate memory for the table of device specific data pointers. >> > + */ >> > + Console_Port_Data = calloc( Console_Port_Count, sizeof( >> console_data ) ); >> why calloc ... >> >> > Good catch. Likely already there but just wasted time. Changing to > malloc(). > I think we both misread it. The calloc() is for data per port. The copy is copying the per port configuration data. They are different. Notice Console_Port_Data vs Console_Port_Tbl. I think this is OK on closer look. Anything else. > > >> > + if ( Console_Port_Data == NULL ) { >> > + bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_3 ); >> > + } >> > + >> > + /* >> > + * Fill in the Console Table >> > + */ >> > + for (i=0 ; i < Console_Port_Count ; i++) { >> > Console_Port_Tbl[i] = &Console_Configuration_Ports[i]; >> > + } >> ... if you will immediately initialize it >> >> > } >> > >> > /* >> > @@ -69,10 +84,13 @@ void console_register_devices( >> > int old_number_of_ports; >> > int i; >> > >> > + /* >> > + * Initialize the console data elements >> > + */ >> > console_initialize_data(); >> > >> > /* >> > - * console_initialize has been invoked so it is now too late to >> > + * console_initialize() has been invoked so it is now too late to >> > * register devices. >> > */ >> > if ( console_initialized ) { >> > @@ -86,23 +104,31 @@ void console_register_devices( >> > Console_Port_Count += number_of_ports; >> > Console_Port_Tbl = realloc( >> > Console_Port_Tbl, >> > - Console_Port_Count * sizeof( console_tbl * ) >> > + Console_Port_Count * sizeof(console_tbl *) >> > ); >> > if ( Console_Port_Tbl == NULL ) { >> > bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_1 ); >> > } >> > >> > - Console_Port_Data = calloc( Console_Port_Count, sizeof( >> console_data ) ); >> > + /* >> > + * Since we can only add devices before console_initialize(), >> > + * the data area will contain no information and must be zero >> > + * before it is used. So extend the area and zero it out. >> > + */ >> > + Console_Port_Data = realloc( >> > + Console_Port_Data, >> > + Console_Port_Count * sizeof(console_tbl *) >> > + ); >> > if ( Console_Port_Data == NULL ) { >> > bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_2 ); >> > } >> > + memset(&Console_Port_Data, '\0', Console_Port_Count * >> sizeof(console_tbl *)); >> > >> > /* >> > * Now add the new devices at the end. >> > */ >> > - >> > for (i=0 ; i < number_of_ports ; i++) { >> > - Console_Port_Tbl[old_number_of_ports + i] = &new_ports[i]; >> > + Console_Port_Tbl[old_number_of_ports + i] = &new_ports[i]; >> > } >> > } >> > >> > @@ -249,14 +275,11 @@ rtems_device_driver console_initialize( >> > >> > /* >> > * If we have no devices which were registered earlier then we >> > - * must still initialize pointers and set Console_Port_Data. >> > + * must still initialize pointers for Console_Port_Tbl and >> > + * Console_Port_Data. >> > */ >> > - if ( ! Console_Port_Tbl ) { >> > + if ( !Console_Port_Tbl ) { >> > console_initialize_data(); >> > - Console_Port_Data = calloc( Console_Port_Count, sizeof( >> console_data ) ); >> > - if ( Console_Port_Data == NULL ) { >> > - bsp_fatal( BSP_FATAL_CONSOLE_NO_MEMORY_3 ); >> > - } >> > } >> > >> > /* >> > -- >> > 1.8.3.1 >> > >> > _______________________________________________ >> > devel mailing list >> > devel@rtems.org >> > http://lists.rtems.org/mailman/listinfo/devel >> > >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel