[PATCH] lib: fwts_pipeio: remove gcc cleanup attribute, it confuses cppcheck

Keng-Yu Lin keng-yu.lin at canonical.com
Fri Sep 12 05:31:56 UTC 2014


On Thu, Sep 11, 2014 at 10:50 PM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> cppcheck is getting a bit confused by the automatic resource
> reaping with the gcc cleanup attribute.  Although this is a
> useful gcc extention I think removing it back to some explicit
> resource free'ing is a low-risk enough change to be an acceptable
> way around the cppcheck issues.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>  src/lib/src/fwts_pipeio.c | 47 ++++++++++++++++++++---------------------------
>  1 file changed, 20 insertions(+), 27 deletions(-)
>
> diff --git a/src/lib/src/fwts_pipeio.c b/src/lib/src/fwts_pipeio.c
> index 162e5cf..06744bd 100644
> --- a/src/lib/src/fwts_pipeio.c
> +++ b/src/lib/src/fwts_pipeio.c
> @@ -39,23 +39,6 @@
>
>  #include "fwts.h"
>
> -static inline void freep(void *);
> -static inline void fclosep(FILE **);
> -
> -#define _cleanup_free_ __attribute__((cleanup(freep)))
> -#define _cleanup_fclose_ __attribute__((cleanup(fclosep)))
> -
> -static inline void freep(void *p)
> -{
> -       free(*(void**) p);
> -}
> -
> -static inline void fclosep(FILE **file)
> -{
> -       if (*file)
> -               fclose(*file);
> -}
> -
>  /*
>   *  fwts_pipe_open()
>   *     execl a command, return pid in *childpid and
> @@ -248,9 +231,10 @@ int fwts_write_string_file(
>         const char *file_name,
>         const char *str)
>  {
> -       _cleanup_fclose_ FILE *file = NULL;
> -       errno = 0;
> +       FILE *file = NULL;
> +       int ret;
>
> +       errno = 0;
>         file = fopen(file_name, "we");
>         if (!file) {
>                 fwts_log_error(fw,
> @@ -262,7 +246,10 @@ int fwts_write_string_file(
>                 return FWTS_ERROR;
>         }
>
> -       return fwts_write_string_to_file(fw, file, str);
> +       ret = fwts_write_string_to_file(fw, file, str);
> +       fclose(file);
> +
> +       return ret;
>  }
>
>  /*
> @@ -276,7 +263,7 @@ int fwts_read_file_first_line(
>         const char *file_name,
>         char **line)
>  {
> -       _cleanup_fclose_ FILE *file = NULL;
> +       FILE *file = NULL;
>         char buffer[LINE_MAX], *temp;
>         errno = 0;
>
> @@ -292,6 +279,7 @@ int fwts_read_file_first_line(
>
>         if (!fgets(buffer, sizeof(buffer), file)) {
>                 if (ferror(file)) {
> +                       fclose(file);
>                         fwts_log_error(fw,
>                                 "Failed to read first line from %s, error: %d (%s).",
>                                 file_name,
> @@ -304,6 +292,7 @@ int fwts_read_file_first_line(
>
>         temp = strdup(buffer);
>         if (!temp) {
> +               fclose(file);
>                 fwts_log_error(fw,
>                         "Failed to read first line from %s: ran out of memory.",
>                         file_name);
> @@ -312,6 +301,7 @@ int fwts_read_file_first_line(
>
>         fwts_chop_newline(temp);
>         *line = temp;
> +       fclose(file);
>
>         return FWTS_OK;
>  }
> @@ -326,15 +316,18 @@ bool fwts_file_first_line_contains_string(
>         const char *file_name,
>         const char *str)
>  {
> -       _cleanup_free_ char *contents = NULL;
> +       char *contents = NULL;
>         int ret;
> +       bool contains;
>
>         ret = fwts_read_file_first_line(fw, file_name, &contents);
> -
>         if (ret != FWTS_OK) {
>                 fwts_log_error(fw, "Failed to get the contents of %s.", file_name);
> -               return false;
> -       }
> +               contains = false;
> +       } else
> +               contains = (strstr(contents, str) != NULL);
> +
> +       free(contents);
> +       return contains;
> +}
>
> -       return (strstr(contents, str) != NULL);
> -}
> \ No newline at end of file
> --
> 2.1.0
>

Acked-by: Keng-Yu Lin <kengyu at canonical.com>



More information about the fwts-devel mailing list