From: Jakub Kicinski <jakub.kicinski@netronome.com>
To: netdev@vger.kernel.org
Cc: oss-drivers@netronome.com, Quentin Monnet <quentin.monnet@netronome.com>
Subject: [PATCH net 2/6] tools: bpftool: clean up the JSON writer before exiting in usage()
Date: Tue, 28 Nov 2017 17:44:29 -0800 [thread overview]
Message-ID: <20171129014434.31694-3-jakub.kicinski@netronome.com> (raw)
In-Reply-To: <20171129014434.31694-1-jakub.kicinski@netronome.com>
From: Quentin Monnet <quentin.monnet@netronome.com>
The writer is cleaned at the end of the main function, but not if the
program exits sooner in usage(). Let's keep it clean and destroy the
writer before exiting.
Destruction and actual call to exit() are moved to another function so
that clean exit can also be performed without printing usage() hints.
Fixes: d35efba99d92 ("tools: bpftool: introduce --json and --pretty options")
Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
---
tools/bpf/bpftool/main.c | 10 +++++++++-
tools/bpf/bpftool/main.h | 3 ++-
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c
index 14ad54a1c404..d72dd73a4016 100644
--- a/tools/bpf/bpftool/main.c
+++ b/tools/bpf/bpftool/main.c
@@ -58,11 +58,19 @@ bool show_pinned;
struct pinned_obj_table prog_table;
struct pinned_obj_table map_table;
+static void __noreturn clean_and_exit(int i)
+{
+ if (json_output)
+ jsonw_destroy(&json_wtr);
+
+ exit(i);
+}
+
void usage(void)
{
last_do_help(last_argc - 1, last_argv + 1);
- exit(-1);
+ clean_and_exit(-1);
}
static int do_help(int argc, char **argv)
diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h
index 9c191e222d6f..0b60ddfb2b93 100644
--- a/tools/bpf/bpftool/main.h
+++ b/tools/bpf/bpftool/main.h
@@ -41,6 +41,7 @@
#include <stdbool.h>
#include <stdio.h>
#include <linux/bpf.h>
+#include <linux/compiler.h>
#include <linux/kernel.h>
#include <linux/hashtable.h>
@@ -80,7 +81,7 @@ void p_info(const char *fmt, ...);
bool is_prefix(const char *pfx, const char *str);
void fprint_hex(FILE *f, void *arg, unsigned int n, const char *sep);
-void usage(void) __attribute__((noreturn));
+void usage(void) __noreturn;
struct pinned_obj_table {
DECLARE_HASHTABLE(table, 16);
--
2.14.1
next prev parent reply other threads:[~2017-11-29 1:45 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-29 1:44 [PATCH net 0/6] tools: bpftool: fix a minor issues with JSON and Makefiles Jakub Kicinski
2017-11-29 1:44 ` [PATCH net 1/6] tools: bpftool: fix crash on bad parameters with JSON Jakub Kicinski
2017-11-29 1:44 ` Jakub Kicinski [this message]
2017-11-29 1:44 ` [PATCH net 3/6] tools: bpftool: make error message from getopt_long() JSON-friendly Jakub Kicinski
2017-11-29 1:44 ` [PATCH net 4/6] tools: bpftool: remove spurious line break from error message Jakub Kicinski
2017-11-29 1:44 ` [PATCH net 5/6] tools: bpftool: unify installation directories Jakub Kicinski
2017-11-29 1:44 ` [PATCH net 6/6] tools: bpftool: declare phony targets as such Jakub Kicinski
2017-11-30 1:17 ` [PATCH net 0/6] tools: bpftool: fix a minor issues with JSON and Makefiles Daniel Borkmann
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=20171129014434.31694-3-jakub.kicinski@netronome.com \
--to=jakub.kicinski@netronome.com \
--cc=netdev@vger.kernel.org \
--cc=oss-drivers@netronome.com \
--cc=quentin.monnet@netronome.com \
/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