mirror of
https://github.com/systemd/systemd.git
synced 2024-11-27 12:13:33 +08:00
Add _cleanup_pclose_ and fix mismatching pipe close opened by popen()
Based-on-patch-by: Thomas Jarosch <thomas.jarosch@intra2net.com> cppcheck reported: [src/bootchart/svg.c:791]: (error) Mismatching allocation and deallocation: f
This commit is contained in:
parent
314b4b0a68
commit
e985665d2d
@ -3084,6 +3084,9 @@ systemd_bootchart_SOURCES = \
|
||||
src/bootchart/log.c \
|
||||
src/bootchart/svg.c
|
||||
|
||||
systemd_bootchart_LDADD = \
|
||||
libsystemd-shared.la
|
||||
|
||||
MANPAGES += \
|
||||
man/systemd-bootchart.1 \
|
||||
man/bootchart.conf.5
|
||||
|
@ -22,6 +22,8 @@
|
||||
#include <sys/utsname.h>
|
||||
|
||||
#include "bootchart.h"
|
||||
#include "util.h"
|
||||
#include "macro.h"
|
||||
|
||||
|
||||
#define time_to_graph(t) ((t) * scale_x)
|
||||
@ -702,7 +704,7 @@ static int ps_filter(struct ps_struct *ps)
|
||||
|
||||
static void svg_do_initcall(int count_only)
|
||||
{
|
||||
FILE *f;
|
||||
FILE _cleanup_pclose_ *f = NULL;
|
||||
double t;
|
||||
char func[256];
|
||||
int ret;
|
||||
@ -787,8 +789,6 @@ static void svg_do_initcall(int count_only)
|
||||
|
||||
kcount++;
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
||||
|
@ -196,6 +196,7 @@ static inline size_t IOVEC_INCREMENT(struct iovec *i, unsigned n, size_t k) {
|
||||
|
||||
#define _cleanup_free_ __attribute__((cleanup(freep)))
|
||||
#define _cleanup_fclose_ __attribute__((cleanup(fclosep)))
|
||||
#define _cleanup_pclose_ __attribute__((cleanup(pclosep)))
|
||||
#define _cleanup_close_ __attribute__((cleanup(closep)))
|
||||
#define _cleanup_closedir_ __attribute__((cleanup(closedirp)))
|
||||
#define _cleanup_umask_ __attribute__((cleanup(umaskp)))
|
||||
|
@ -5553,6 +5553,11 @@ void fclosep(FILE **f) {
|
||||
fclose(*f);
|
||||
}
|
||||
|
||||
void pclosep(FILE **f) {
|
||||
if (*f)
|
||||
pclose(*f);
|
||||
}
|
||||
|
||||
void closep(int *fd) {
|
||||
if (*fd >= 0)
|
||||
close_nointr_nofail(*fd);
|
||||
|
@ -522,6 +522,7 @@ int get_home_dir(char **ret);
|
||||
|
||||
void freep(void *p);
|
||||
void fclosep(FILE **f);
|
||||
void pclosep(FILE **f);
|
||||
void closep(int *fd);
|
||||
void closedirp(DIR **d);
|
||||
void umaskp(mode_t *u);
|
||||
|
Loading…
Reference in New Issue
Block a user