Reduce diff lines between vti and vti6 help printing code. Use @struct link_util ->id field to print correct link help: all callers now pass this data structure to vti_print_help().
Get rid of custom print_usage() and usage() functions and use vti_print_help() directly, return from function on "... type <help|garbage>" instead of exit(2). Signed-off-by: Serhey Popovych <serhe.popov...@gmail.com> --- ip/link_vti.c | 42 ++++++++++++++++++------------------------ ip/link_vti6.c | 34 +++++++++++++++------------------- 2 files changed, 33 insertions(+), 43 deletions(-) diff --git a/ip/link_vti.c b/ip/link_vti.c index 49b87e9..f128e6b 100644 --- a/ip/link_vti.c +++ b/ip/link_vti.c @@ -23,29 +23,27 @@ #include "ip_common.h" #include "tunnel.h" - -static void print_usage(FILE *f) +static void vti_print_help(struct link_util *lu, int argc, char **argv, FILE *f) { fprintf(f, - "Usage: ... vti [ remote ADDR ]\n" - " [ local ADDR ]\n" - " [ [i|o]key KEY ]\n" - " [ dev PHYS_DEV ]\n" - " [ fwmark MARK ]\n" + "Usage: ... %-4s [ remote ADDR ]\n", + lu->id + ); + fprintf(f, + " [ local ADDR ]\n" + " [ [i|o]key KEY ]\n" + " [ dev PHYS_DEV ]\n" + " [ fwmark MARK ]\n" "\n" - "Where: ADDR := { IP_ADDRESS }\n" + ); + fprintf(f, + "Where: ADDR := { IP%s_ADDRESS }\n" " KEY := { DOTTED_QUAD | NUMBER }\n" - " MARK := { 0x0..0xffffffff }\n" + " MARK := { 0x0..0xffffffff }\n", + "" ); } -static void usage(void) __attribute__((noreturn)); -static void usage(void) -{ - print_usage(stderr); - exit(-1); -} - static int vti_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { @@ -147,8 +145,10 @@ get_failed: NEXT_ARG(); if (get_u32(&fwmark, *argv, 0)) invarg("invalid fwmark\n", *argv); - } else - usage(); + } else { + vti_print_help(lu, argc, argv, stderr); + return -1; + } argc--; argv++; } @@ -208,12 +208,6 @@ static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) } } -static void vti_print_help(struct link_util *lu, int argc, char **argv, - FILE *f) -{ - print_usage(f); -} - struct link_util vti_link_util = { .id = "vti", .maxattr = IFLA_VTI_MAX, diff --git a/ip/link_vti6.c b/ip/link_vti6.c index d1fbec5..109f3e8 100644 --- a/ip/link_vti6.c +++ b/ip/link_vti6.c @@ -24,28 +24,28 @@ #include "ip_common.h" #include "tunnel.h" -static void print_usage(FILE *f) +static void vti6_print_help(struct link_util *lu, int argc, char **argv, + FILE *f) { fprintf(f, - "Usage: ... vti6 [ remote ADDR ]\n" + "Usage: ... %-4s [ remote ADDR ]\n", + lu->id + ); + fprintf(f, " [ local ADDR ]\n" " [ [i|o]key KEY ]\n" " [ dev PHYS_DEV ]\n" " [ fwmark MARK ]\n" "\n" - "Where: ADDR := { IPV6_ADDRESS }\n" + ); + fprintf(f, + "Where: ADDR := { IP%s_ADDRESS }\n" " KEY := { DOTTED_QUAD | NUMBER }\n" - " MARK := { 0x0..0xffffffff }\n" + " MARK := { 0x0..0xffffffff }\n", + "V6" ); } -static void usage(void) __attribute__((noreturn)); -static void usage(void) -{ - print_usage(stderr); - exit(-1); -} - static int vti6_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { @@ -153,8 +153,10 @@ get_failed: NEXT_ARG(); if (get_u32(&fwmark, *argv, 0)) invarg("invalid fwmark\n", *argv); - } else - usage(); + } else { + vti6_print_help(lu, argc, argv, stderr); + return -1; + } argc--; argv++; } @@ -214,12 +216,6 @@ static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) } } -static void vti6_print_help(struct link_util *lu, int argc, char **argv, - FILE *f) -{ - print_usage(f); -} - struct link_util vti6_link_util = { .id = "vti6", .maxattr = IFLA_VTI_MAX, -- 1.7.10.4