[PATCH] Fix CppCheck errors

Gedare Bloom gedare at rtems.org
Wed Sep 2 13:39:18 UTC 2015


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 <gedare at rtems.org> wrote:
> Apply to 4.11 and master
>
> On Wed, Sep 2, 2015 at 9:35 AM, Gedare Bloom <gedare at rtems.org> wrote:
>> Looks OK to me.
>>
>> On Tue, Sep 1, 2015 at 3:10 PM, Martin Galvan
>> <martin.galvan at 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
>>>



More information about the devel mailing list