Joel, Coordinate your patch/fixes with this patch. (I do prefer the separate patches that Joel gave. Small atomic commits are better.) Gedare
On Wed, Sep 2, 2015 at 9:35 AM, Gedare Bloom <ged...@rtems.org> wrote: > Apply to 4.11 and master > > On Wed, Sep 2, 2015 at 9:35 AM, Gedare Bloom <ged...@rtems.org> wrote: >> Looks OK to me. >> >> On Tue, Sep 1, 2015 at 3:10 PM, Martin Galvan >> <martin.gal...@tallertechnologies.com> wrote: >>> This patch fixes the following CppCheck errors found throughout the code: >>> >>> [c/src/lib/libbsp/shared/umon/umon.h:21]: (error) Invalid number of >>> character ({) when these macros are defined: '__cplusplus'. >>> [cpukit/libmisc/dumpbuf/dumpbuf.c:69]: (error) Undefined behavior: Variable >>> 'line_buffer' is used as parameter and destination in s[n]printf(). >>> [cpukit/libmisc/dumpbuf/dumpbuf.c:76]: (error) Undefined behavior: Variable >>> 'line_buffer' is used as parameter and destination in s[n]printf(). >>> [cpukit/libnetworking/rtems/rtems_dhcp.c:401]: (error) Common realloc >>> mistake: 'dhcp_hostname' nulled but not freed upon failure >>> [cpukit/posix/include/rtems/posix/ptimer.h:33]: (error) Invalid number of >>> character ({) when these macros are defined: '__cplusplus'. >>> [cpukit/rtems/include/rtems/rtems/dpmemimpl.h:104]: (error) Invalid number >>> of character ({) when these macros are defined: '__cplusplus'. >>> [tools/cpu/nios2/memory.c:99]: (error) Uninitialized variable: memory >>> [tools/cpu/nios2/ptf.c:582]: (error) Memory leak: new_prefix >>> >>> Closes #2405. >>> >>> --- >>> c/src/lib/libbsp/shared/umon/umon.h | 4 +++ >>> cpukit/libmisc/dumpbuf/dumpbuf.c | 41 >>> ++++++++++++++++------------ >>> cpukit/libnetworking/rtems/rtems_dhcp.c | 18 ++++++++---- >>> cpukit/posix/include/rtems/posix/ptimer.h | 5 +++- >>> cpukit/rtems/include/rtems/rtems/dpmemimpl.h | 6 +++- >>> tools/cpu/nios2/memory.c | 5 ++-- >>> tools/cpu/nios2/ptf.c | 24 +++++++++------- >>> 7 files changed, 65 insertions(+), 38 deletions(-) >>> >>> diff --git a/c/src/lib/libbsp/shared/umon/umon.h >>> b/c/src/lib/libbsp/shared/umon/umon.h >>> index 3c5bdf9..d25a781 100644 >>> --- a/c/src/lib/libbsp/shared/umon/umon.h >>> +++ b/c/src/lib/libbsp/shared/umon/umon.h >>> @@ -61,4 +61,8 @@ int rtems_initialize_tfs_filesystem( >>> */ >>> int umoncons_poll_read(int minor); >>> >>> +#ifdef __cplusplus >>> +} >>> #endif >>> + >>> +#endif /* __rtems_umon_h */ >>> diff --git a/cpukit/libmisc/dumpbuf/dumpbuf.c >>> b/cpukit/libmisc/dumpbuf/dumpbuf.c >>> index 9d34d42..aca32f3 100644 >>> --- a/cpukit/libmisc/dumpbuf/dumpbuf.c >>> +++ b/cpukit/libmisc/dumpbuf/dumpbuf.c >>> @@ -6,7 +6,7 @@ >>> */ >>> >>> /* >>> - * COPYRIGHT (c) 1997-2007. >>> + * COPYRIGHT (c) 1997-2015. >>> * On-Line Applications Research Corporation (OAR). >>> * >>> * The license and distribution terms for this file may in >>> @@ -24,6 +24,9 @@ >>> #include <rtems/dumpbuf.h> >>> #include <rtems/bspIo.h> >>> >>> +#define BUFFER_LENGTH 120 >>> +#define PADDING_LENGTH 16 >>> + >>> /* >>> * Put the body below rtems_print_buffer so it won't get inlined. >>> */ >>> @@ -59,27 +62,29 @@ static inline void Dump_Line( >>> int length >>> ) >>> { >>> + unsigned int i; >>> + static unsigned char line_buffer[BUFFER_LENGTH]; >>> + static unsigned char tmp[BUFFER_LENGTH] = ""; >>> >>> - int i; >>> - char line_buffer[120]; >>> - >>> - line_buffer[0] = '\0'; >>> - >>> - for( i=0 ; i<length ; i++ ) >>> - sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] ); >>> + for ( i = 0; i < length; ++i ) { >>> + sprintf(tmp, "%02x ", buffer[i]); >>> + strncat(line_buffer, tmp, strlen(tmp)); >>> + } >>> >>> - for( ; i<16 ; i++ ) >>> - strcat( line_buffer, " " ); >>> + for ( ; i < PADDING_LENGTH; ++i ) { >>> + strcat(line_buffer, " "); >>> + } >>> >>> - strcat( line_buffer, "|" ); >>> - for( i=0 ; i<length ; i++ ) >>> - sprintf( line_buffer, "%s%c", line_buffer, >>> - isprint( buffer[ i ] ) ? buffer[ i ] : '.' ); >>> + strcat(line_buffer, "|"); >>> >>> - for( ; i<16 ; i++ ) >>> - strcat( line_buffer, " " ); >>> + for ( i = 0; i < length; ++i ) { >>> + sprintf(tmp, "%c", isprint(buffer[i]) ? buffer[i] : '.'); >>> + strncat(line_buffer, tmp, strlen(tmp)); >>> + } >>> >>> - strcat( line_buffer, "|\n" ); >>> + for ( ; i < PADDING_LENGTH; ++i ) { >>> + strcat(line_buffer, " "); >>> + } >>> >>> - printk( line_buffer ); >>> + printk("%s|\n", line_buffer); >>> } >>> diff --git a/cpukit/libnetworking/rtems/rtems_dhcp.c >>> b/cpukit/libnetworking/rtems/rtems_dhcp.c >>> index c938ee0..87be238 100644 >>> --- a/cpukit/libnetworking/rtems/rtems_dhcp.c >>> +++ b/cpukit/libnetworking/rtems/rtems_dhcp.c >>> @@ -394,15 +394,23 @@ process_options (unsigned char *optbuf, int >>> optbufSize) >>> printf ("dhcpc: hostname >= %d bytes\n", MAXHOSTNAMELEN); >>> len = MAXHOSTNAMELEN-1; >>> } >>> - if (sethostname (p, len) < 0) >>> + if (sethostname (p, len) < 0) { >>> printf ("dhcpc: can't set host name"); >>> + } >>> if (dhcp_hostname != NULL) >>> { >>> - dhcp_hostname = realloc (dhcp_hostname, len); >>> - strncpy (dhcp_hostname, p, len); >>> - } >>> - else >>> + char *tmp = realloc (dhcp_hostname, len); >>> + if (tmp != NULL) { >>> + dhcp_hostname = tmp; >>> + strncpy (dhcp_hostname, p, len); >>> + } else { /* realloc failed */ >>> + printf ("dhcpc: realloc failed (%s:%d)", __FILE__, __LINE__); >>> + free (dhcp_hostname); >>> + dhcp_hostname = NULL; >>> + } >>> + } else { /* dhcp_hostname == NULL */ >>> dhcp_hostname = strndup (p, len); >>> + } >>> break; >>> >>> case 7: >>> diff --git a/cpukit/posix/include/rtems/posix/ptimer.h >>> b/cpukit/posix/include/rtems/posix/ptimer.h >>> index 7cc0516..16ac2b8 100644 >>> --- a/cpukit/posix/include/rtems/posix/ptimer.h >>> +++ b/cpukit/posix/include/rtems/posix/ptimer.h >>> @@ -87,6 +87,9 @@ int timer_getoverrun( >>> timer_t timerid >>> ); >>> >>> +#ifdef __cplusplus >>> +} >>> +#endif >>> /** @} */ >>> >>> -#endif >>> +#endif /* _RTEMS_POSIX_PTIMER_H */ >>> diff --git a/cpukit/rtems/include/rtems/rtems/dpmemimpl.h >>> b/cpukit/rtems/include/rtems/rtems/dpmemimpl.h >>> index 9fd2e6c..d2d7a4f 100644 >>> --- a/cpukit/rtems/include/rtems/rtems/dpmemimpl.h >>> +++ b/cpukit/rtems/include/rtems/rtems/dpmemimpl.h >>> @@ -20,6 +20,10 @@ >>> #include <rtems/rtems/dpmem.h> >>> #include <rtems/score/objectimpl.h> >>> >>> +#ifdef __cplusplus >>> +extern "C" { >>> +#endif >>> + >>> /** >>> * @defgroup ClassicDPMEMImpl Dual Ported Memory Manager Implementation >>> * >>> @@ -104,5 +108,5 @@ RTEMS_INLINE_ROUTINE Dual_ported_memory_Control >>> *_Dual_ported_memory_Get ( >>> } >>> #endif >>> >>> -#endif >>> +#endif /* _RTEMS_RTEMS_DPMEM_INL */ >>> /* end of include file */ >>> diff --git a/tools/cpu/nios2/memory.c b/tools/cpu/nios2/memory.c >>> index cd88b8b..cb1ea7f 100644 >>> --- a/tools/cpu/nios2/memory.c >>> +++ b/tools/cpu/nios2/memory.c >>> @@ -18,7 +18,8 @@ memory_desc *find_memory(device_desc *devices) >>> { >>> struct ptf *p; >>> struct ptf_item pi; >>> - memory_desc *tmd, *memory; >>> + memory_desc *tmd; >>> + memory_desc *memory = NULL; >>> >>> /********************************************************/ >>> /* Check which of the devices are memory, sort by size */ >>> @@ -29,8 +30,6 @@ memory_desc *find_memory(device_desc *devices) >>> struct ptf_item pi; >>> device_desc *dd; >>> >>> - memory = NULL; >>> - >>> for(dd = devices; dd; dd=dd->next) >>> { >>> p = ptf_find(dd->ptf->sub, &pi, item, "Is_Memory_Device", "1"); >>> diff --git a/tools/cpu/nios2/ptf.c b/tools/cpu/nios2/ptf.c >>> index 7a31c11..07d6183 100644 >>> --- a/tools/cpu/nios2/ptf.c >>> +++ b/tools/cpu/nios2/ptf.c >>> @@ -567,17 +567,21 @@ void ptf_printf(FILE *s, struct ptf *tree, char >>> *prefix) >>> new_prefix_len += strlen(leaf->value) + 1; >>> }; >>> new_prefix = (char *)malloc(new_prefix_len); >>> - strcpy(new_prefix, prefix); >>> - strcat(new_prefix, leaf->name); >>> - if(leaf->value != NULL && leaf->value[0] != 0) >>> + if (new_prefix != NULL) >>> { >>> - strcat(new_prefix, ":"); >>> - strcat(new_prefix, leaf->value); >>> - }; >>> - strcat(new_prefix, "/"); >>> - fputs(new_prefix, s); >>> - fputs("\n", s); >>> - ptf_printf(s, leaf->sub, new_prefix); >>> + strcpy(new_prefix, prefix); >>> + strcat(new_prefix, leaf->name); >>> + if(leaf->value != NULL && leaf->value[0] != 0) >>> + { >>> + strcat(new_prefix, ":"); >>> + strcat(new_prefix, leaf->value); >>> + }; >>> + strcat(new_prefix, "/"); >>> + fputs(new_prefix, s); >>> + fputs("\n", s); >>> + ptf_printf(s, leaf->sub, new_prefix); >>> + free(new_prefix); >>> + } >>> break; >>> }; >>> >>> -- >>> 2.5.1 >>> _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel