Commit 7868620a authored by Quentin Monnet's avatar Quentin Monnet Committed by Daniel Borkmann

tools: bpftool: clean up the JSON writer before exiting in usage()

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: d35efba9 ("tools: bpftool: introduce --json and --pretty options")
Signed-off-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
Acked-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 9b85c2d4
...@@ -58,11 +58,19 @@ bool show_pinned; ...@@ -58,11 +58,19 @@ bool show_pinned;
struct pinned_obj_table prog_table; struct pinned_obj_table prog_table;
struct pinned_obj_table map_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) void usage(void)
{ {
last_do_help(last_argc - 1, last_argv + 1); last_do_help(last_argc - 1, last_argv + 1);
exit(-1); clean_and_exit(-1);
} }
static int do_help(int argc, char **argv) static int do_help(int argc, char **argv)
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <linux/bpf.h> #include <linux/bpf.h>
#include <linux/compiler.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/hashtable.h> #include <linux/hashtable.h>
...@@ -80,7 +81,7 @@ void p_info(const char *fmt, ...); ...@@ -80,7 +81,7 @@ void p_info(const char *fmt, ...);
bool is_prefix(const char *pfx, const char *str); bool is_prefix(const char *pfx, const char *str);
void fprint_hex(FILE *f, void *arg, unsigned int n, const char *sep); 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 { struct pinned_obj_table {
DECLARE_HASHTABLE(table, 16); DECLARE_HASHTABLE(table, 16);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment