@@ -142,14 +142,14 @@ void safe_file_scanf(const char *file, const int lineno,
if (ret == EOF) {
tst_brkm_(file, lineno, TBROK, cleanup_fn,
"The FILE '%s' ended prematurely", path);
- return;
+ goto out;
}
if (ret != exp_convs) {
tst_brkm_(file, lineno, TBROK, cleanup_fn,
"Expected %i conversions got %i FILE '%s'",
exp_convs, ret, path);
- return;
+ goto out;
}
if (fclose(f)) {
@@ -157,6 +157,8 @@ void safe_file_scanf(const char *file, const int lineno,
"Failed to close FILE '%s'", path);
return;
}
+out:
+ fclose(f);
}
@@ -267,7 +269,7 @@ static void safe_file_vprintf(const char *file, const int lineno,
if (vfprintf(f, fmt, va) < 0) {
tst_brkm_(file, lineno, TBROK, cleanup_fn,
"Failed to print to FILE '%s'", path);
- return;
+ goto out;
}
if (fclose(f)) {
@@ -275,6 +277,8 @@ static void safe_file_vprintf(const char *file, const int lineno,
"Failed to close FILE '%s'", path);
return;
}
+out:
+ fclose(f);
}
void safe_file_printf(const char *file, const int lineno,
safe_file_scanf and safe_file_vprintf suffered from resource leak, as opened file descriptor was not closed in case of error. Signed-off-by: Bogdan Lezhepekov <blezhepekov@suse.de> --- lib/safe_file_ops.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)