ACK: [PATCH] lib: fwts_pipeio: remove gcc cleanup attribute, it confuses cppcheck
Alex Hung
alex.hung at canonical.com
Tue Sep 16 02:17:56 UTC 2014
On 14-09-11 10:50 PM, Colin King 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
Acked-by: Alex Hung <alex.hung at canonical.com>
More information about the fwts-devel
mailing list