From: mwilck@suse.com
To: Sagi Grimberg <sagi@grimberg.me>, Hannes Reinecke <hare@suse.de>,
Keith Busch <kbusch@kernel.org>
Cc: Chaitanya Kulkarni <Chaitanya.Kulkarni@wdc.com>,
linux-nvme@lists.infradead.org,
Enzo Matsumiya <ematsumiya@suse.de>,
Martin Wilck <mwilck@suse.com>
Subject: [PATCH 05/10] nvme: add some simplifying macros for __attribute__((cleanup()))
Date: Sat, 6 Mar 2021 01:36:19 +0100 [thread overview]
Message-ID: <20210306003624.21102-6-mwilck@suse.com> (raw)
In-Reply-To: <20210306003624.21102-1-mwilck@suse.com>
From: Martin Wilck <mwilck@suse.com>
Using __attribute__((cleanup())) is very helpful for writing leak-free
code, but it requires lots of awkward boiler plate code. Add some
small helpers to make its use more comfortable.
Signed-off-by: Martin Wilck <mwilck@suse.com>
---
Makefile | 2 +-
util/cleanup.c | 4 ++++
util/cleanup.h | 18 ++++++++++++++++++
3 files changed, 23 insertions(+), 1 deletion(-)
create mode 100644 util/cleanup.c
create mode 100644 util/cleanup.h
diff --git a/Makefile b/Makefile
index 3ea17b5..3412e5d 100644
--- a/Makefile
+++ b/Makefile
@@ -62,7 +62,7 @@ OBJS := nvme-print.o nvme-ioctl.o nvme-rpmb.o \
nvme-lightnvm.o fabrics.o nvme-models.o plugin.o \
nvme-status.o nvme-filters.o nvme-topology.o
-UTIL_OBJS := util/argconfig.o util/suffix.o util/json.o util/parser.o
+UTIL_OBJS := util/argconfig.o util/suffix.o util/json.o util/parser.o util/cleanup.o
PLUGIN_OBJS := \
plugins/intel/intel-nvme.o \
diff --git a/util/cleanup.c b/util/cleanup.c
new file mode 100644
index 0000000..0d5d910
--- /dev/null
+++ b/util/cleanup.c
@@ -0,0 +1,4 @@
+#include <stdlib.h>
+#include "cleanup.h"
+
+DEFINE_CLEANUP_FUNC(cleanup_charp, char *, free);
diff --git a/util/cleanup.h b/util/cleanup.h
new file mode 100644
index 0000000..89a4984
--- /dev/null
+++ b/util/cleanup.h
@@ -0,0 +1,18 @@
+#ifndef __CLEANUP_H
+#define __CLEANUP_H
+
+#define __cleanup__(fn) __attribute__((cleanup(fn)))
+
+#define DECLARE_CLEANUP_FUNC(name, type) \
+ void name(type *__p)
+
+#define DEFINE_CLEANUP_FUNC(name, type, free_fn)\
+DECLARE_CLEANUP_FUNC(name, type) \
+{ \
+ if (*__p) \
+ free_fn(*__p); \
+}
+
+DECLARE_CLEANUP_FUNC(cleanup_charp, char *);
+
+#endif
--
2.29.2
_______________________________________________
Linux-nvme mailing list
Linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme
next prev parent reply other threads:[~2021-03-06 0:38 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-06 0:36 [PATCH 00/10] Some minor fixes/additions for nvme-cli mwilck
2021-03-06 0:36 ` [PATCH 01/10] nvme-discover: lookup existing persistent controllers mwilck
2021-03-15 17:38 ` Sagi Grimberg
2021-03-15 17:43 ` Martin Wilck
2021-03-16 9:36 ` Hannes Reinecke
2021-03-06 0:36 ` [PATCH 02/10] nvme-discover: assume device given on command line is persistent mwilck
2021-03-15 17:41 ` Sagi Grimberg
2021-03-15 17:51 ` Martin Wilck
2021-03-06 0:36 ` [PATCH 03/10] do_discover: free cfg.device when resetting it mwilck
2021-03-06 0:36 ` [PATCH 04/10] nvme-connect-all(1): fix documentation for --quiet/-S mwilck
2021-03-08 7:12 ` Chaitanya Kulkarni
2021-03-15 17:44 ` Sagi Grimberg
2021-03-06 0:36 ` mwilck [this message]
2021-03-08 7:10 ` [PATCH 05/10] nvme: add some simplifying macros for __attribute__((cleanup())) Chaitanya Kulkarni
2021-03-15 17:44 ` Sagi Grimberg
2021-03-06 0:36 ` [PATCH 06/10] nvme-cli: add generic logging functionality mwilck
2021-03-08 7:15 ` Chaitanya Kulkarni
2021-03-08 7:17 ` Chaitanya Kulkarni
2021-03-15 17:45 ` Sagi Grimberg
2021-03-16 8:14 ` Martin Wilck
2021-03-06 0:36 ` [PATCH 07/10] nvme: convert some function arguments from "char *" to "const char *" mwilck
2021-03-08 7:13 ` Chaitanya Kulkarni
2021-03-15 17:46 ` Sagi Grimberg
2021-03-06 0:36 ` [PATCH 08/10] fabrics: use "const char *" in struct config mwilck
2021-03-08 7:08 ` Chaitanya Kulkarni
2021-03-15 17:46 ` Sagi Grimberg
2021-03-06 0:36 ` [PATCH 09/10] fabrics: fix some memory leaks mwilck
2021-03-08 7:13 ` Chaitanya Kulkarni
2021-03-15 17:46 ` Sagi Grimberg
2021-03-06 0:36 ` [PATCH 10/10] fabrics: fix invalid memory access in discover_from_conf_file() mwilck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210306003624.21102-6-mwilck@suse.com \
--to=mwilck@suse.com \
--cc=Chaitanya.Kulkarni@wdc.com \
--cc=ematsumiya@suse.de \
--cc=hare@suse.de \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=sagi@grimberg.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox