[PATCH] lib: fwts_pipeio: remove gcc cleanup attribute, it confuses cppcheck
Colin King
colin.king at canonical.com
Thu Sep 11 14:50:01 UTC 2014
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
More information about the fwts-devel
mailing list