commit d6013008902a0a4ffedcd76ecac89d3613041cf3 from: Stefan Sperling date: Tue Oct 29 09:54:33 2024 UTC convert all command handlers to variadic functions Resolves dozens of: warning: passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C2x In traditional C the empty argument list () indicates that a function accepts an arbitrary amount of arguments of arbitary types. A function which takes no arguments must be declared with a (void) prototype instead. nsh has been making elaborate use of this feature by defining command handlers with () and passing arbitrary arguments to handlers depending on the use case. This coding style is not future-proof. In C++, () means "no arguments", the same as (void), and clang is now warning about this C feature going away in C2x, aligning C with C++. Make nsh future-proof by using variadic function prototypes (...) instead of () prototypes. Every handler now uses (int argc, char **argv, ...) as prototype: the argument count, an argument vector, followed by arbitrary arguments which can be extracted using the va_arg(3) function from stdarg.h. The variadic part of the argument list can be used to pass arguments of types other than char * without needing to convert them to strings and back. Using () as function prototype defeats type-checking done by the compiler, and the same is true for variadic arguments. We still need to manually make sure that the correct amount and types of arguments are passed in the variadic part of the handler's argument list. Many handlers already use the argument count + argument vector approach and do not need internal changes, just a new prototype. Some handlers now require use of va_start/va_arg/va_end to access additional arguments. For example, the interfaces handlers were passing an interface name and file descriptor before the argument count/vector. The order of arguments is now swapped, such that interface name and file descriptor get passed as part of the variable argument list. commit - b96221e6b0fba68943e0414aebee615838bf6e58 commit + d6013008902a0a4ffedcd76ecac89d3613041cf3 blob - 81e527b15bf334d83848c0a41170935fb559e1f4 blob + a6030ec3030e55cb93190ae6502044171e9eb406 --- arp.c +++ arp.c @@ -160,7 +160,7 @@ rtget(struct sockaddr_inarp **sinp, struct sockaddr_dl * Set an individual arp entry */ int -arpset(int argc, char *argv[]) +arpset(int argc, char *argv[], ...) { struct sockaddr_inarp *sin; struct sockaddr_dl *sdl; blob - 2a3c298673f93f97a419f91e4124069c9e698f95 blob + a6b11b3e6eb64a9ed76aba8e13c055b4c2c90bb4 --- bgpnsh/bgpnsh.c +++ bgpnsh/bgpnsh.c @@ -74,7 +74,7 @@ Menu showlist[] = { }; static int -showcmd(int argc, char **argv) +showcmd(int argc, char **argv, ...) { Menu *s; /* pointer to current command */ @@ -106,7 +106,7 @@ showcmd(int argc, char **argv) } int -quit(void) +quit(int argc, char **argv, ...) { printf("%% Session terminated.\n"); exit(0); blob - d1c00fab01ebd7b6d21509c07078eeb7d1141720 blob + 73f5434c3d252691502815908f2a4f3b33978c03 --- bridge.c +++ bridge.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -115,10 +116,18 @@ static struct brc brps[] = { }; int -brport(char *ifname, int ifs, int argc, char **argv) +brport(int argc, char **argv, ...) { int set, i; struct brc *x; + va_list ap; + char *ifname; + int ifs; + + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); if (NO_ARG(argv[0])) { set = 0; @@ -222,13 +231,21 @@ static struct brc brvs[] = { }; int -brval(char *ifname, int ifs, int argc, char **argv) +brval(int argc, char **argv, ...) { int set; u_int32_t val = 0; const char *errmsg = NULL; struct brc *x; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -323,8 +340,17 @@ brval(char *ifname, int ifs, int argc, char **argv) } int -brrule(char *ifname, int ifs, int argc, char **argv) +brrule(int argc, char **argv, ...) { + va_list ap; + char *ifname; + int ifs; + + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { printf("%% all rules for a member must be applied in order\n"); printf("%% use flush bridge-rules \n"); @@ -345,10 +371,18 @@ brrule(char *ifname, int ifs, int argc, char **argv) } int -brstatic(char *ifname, int ifs, int argc, char **argv) +brstatic(int argc, char **argv, ...) { int set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -387,12 +421,20 @@ static struct brd brds[] = { }; int -brpri(char *ifname, int ifs, int argc, char **argv) +brpri(int argc, char **argv, ...) { int set, val; const char *errmsg = NULL; struct brd *x; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -469,10 +511,16 @@ brpri(char *ifname, int ifs, int argc, char **argv) * flush wrappers here */ int -flush_bridgedyn(char *brdg) +flush_bridgedyn(int argc, char **argv, ...) { + va_list ap; + char *brdg; int ifs; + va_start(ap, argv); + brdg = va_arg(ap, char *); + va_end (ap); + ifs = socket(AF_INET, SOCK_DGRAM, 0); if (ifs < 0) { printf("%% socket: %s\n", strerror(errno)); @@ -492,9 +540,15 @@ flush_bridgedyn(char *brdg) } int -flush_bridgeall(char *brdg) +flush_bridgeall(int argc, char **argv, ...) { + va_list ap; + char *brdg; int ifs; + + va_start(ap, argv); + brdg = va_arg(ap, char *); + va_end(ap); ifs = socket(AF_INET, SOCK_DGRAM, 0); if (ifs < 0) { @@ -515,10 +569,17 @@ flush_bridgeall(char *brdg) } int -flush_bridgerule(char *brdg, char *member) +flush_bridgerule(int argc, char **argv, ...) { + va_list ap; + char *brdg, *member; int ifs; + va_start(ap, argv); + brdg = va_arg(ap, char *); + member = va_arg(ap, char *); + va_end(ap); + ifs = socket(AF_INET, SOCK_DGRAM, 0); if (ifs < 0) { printf("%% socket: %s\n", strerror(errno)); @@ -1625,10 +1686,18 @@ brprotect_usage(void) } int -brprotect(char *ifname, int ifs, int argc, char **argv) +brprotect(int argc, char **argv, ...) { int set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -1755,7 +1824,7 @@ out: } int -show_bridges(int argc, char **argv) +show_bridges(int argc, char **argv, ...) { switch (argc) { case 2: blob - 00d468e4f2977eda1ed8ea03f5c1659914056b36 blob + 7e74fed9a973e2c2fe7f76aa50d48faf1ca39404 --- carp.c +++ carp.c @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -46,14 +47,22 @@ static struct intc { static const char *carp_bal_modes[] = { CARP_BAL_MODES }; int -intcarp(char *ifname, int ifs, int argc, char **argv) +intcarp(int argc, char **argv, ...) { const char *errmsg = NULL; struct ifreq ifr; struct carpreq creq; int set, bal_mode = 0, val = 0; struct intc *x; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -196,12 +205,20 @@ intcarp(char *ifname, int ifs, int argc, char **argv) } int -intcpass(char *ifname, int ifs, int argc, char **argv) +intcpass(int argc, char **argv, ...) { struct ifreq ifr; struct carpreq creq; int set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -238,13 +255,21 @@ intcpass(char *ifname, int ifs, int argc, char **argv) } int -intcnode(char *ifname, int ifs, int argc, char **argv) +intcnode(int argc, char **argv, ...) { struct ifreq ifr; struct carpreq creq; const char *errmsg = NULL; int set, i, last; u_int vhid, advskew; + va_list ap; + char *ifname; + int ifs; + + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); if (NO_ARG(argv[0])) { set = 0; @@ -428,12 +453,20 @@ carp_state(int s, char *ifname, FILE *outfile) } int -intcdev(char *ifname, int ifs, int argc, char **argv) +intcdev(int argc, char **argv, ...) { struct ifreq ifr; struct carpreq creq; int set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; blob - e63ee18dbaf0b739916640ae036259c98f734058 blob + 8c3a359c6c7c21a547858b0fd486cbc10426b849 --- commands.c +++ commands.c @@ -49,6 +49,7 @@ #include #include #include +#include #include #include #include @@ -78,81 +79,81 @@ pid_t child; extern volatile sig_atomic_t caught_sigwinch; -static int disable(void); -static int clear(void); -static int doverbose(int, char**); -static int doediting(int, char**); -static int doconfig(int, char**); -static int exitconfig(int, char**); -int rtable(int, char**); -int group(int, char**); -static int pr_crontab(int, char **, FILE *); -static int pr_routes(int, char **); -static int pr_routes6(int, char **); -static int pr_arp(int, char **); -static int pr_ndp(int, char **); -static int pr_sadb(int, char **); -static int pr_kernel(int, char **); -static int pr_dhcp(int, char **); -static int pr_conf(int, char **); -static int pr_s_conf(int, char **); -static int pr_a_conf(int, char **); -static int pr_conf_diff(int, char **); -static int pr_environment(int, char **); -static int show_hostname(int, char **); -static int wr_startup(void); +static int disable(int, char **, ...); +static int clear(int, char **, ...); +static int doverbose(int, char**, ...); +static int doediting(int, char**, ...); +static int doconfig(int, char**, ...); +static int exitconfig(int, char **, ...); +static int rtable(int, char**, ...); +static int pr_crontab(int, char **, ...); +static int pr_routes(int, char **, ...); +static int pr_routes6(int, char **, ...); +static int pr_arp(int, char **, ...); +static int pr_ndp(int, char **, ...); +static int pr_sadb(int, char **, ...); +static int pr_kernel(int, char **, ...); +static int pr_dhcp(int, char **, ...); +static int pr_conf(int, char **, ...); +static int pr_s_conf(int, char **, ...); +static int pr_a_conf(int, char **, ...); +static int pr_conf_diff(int, char **, ...); +static int pr_environment(int, char **, ...); +static int show_hostname(int, char **, ...); +static int wr_startup(int, char **, ...); static int wr_conf(char *); -static int sysctlhelp(int, char **, char **, int); -static int flush_pf(char *); -static int flush_help(void); -static int flush_line(char *); -static int flush_ip_routes(void); -static int flush_arp_cache(void); -static int flush_ndp_cache(void); -static int flush_history(void); +static int sysctlhelp(int, char **, ...); +static int flush_pf(int, char **, ...); +static int flush_help(int, char **, ...); +static int flush_line(int, char **, ...); +static int flush_ip_routes(int, char **, ...); +static int flush_arp_cache(int, char **, ...); +static int flush_ndp_cache(int, char **, ...); +static int flush_history(int, char **, ...); static int is_bad_input(const char *, size_t); static int read_command_line(EditLine *, History *); -static int int_logger(char *, int, int, char **); -static int int_ping(char *, int, int, char **); -static int int_ping6(char *, int, int, char **); -static int int_traceroute(char *, int, int, char **); -static int int_traceroute6(char *, int, int, char **); -static int int_ssh(char *, int, int, char **); -static int int_telnet(char *, int, int, char **); -static int int_do(char *, int, int, char **); -static int int_setenv(char *, int, int, char **); -static int int_unsetenv(char *, int, int, char **); -static int int_saveenv(char *, int, int, char **); -static int int_show(char *, int, int, char **); -static int int_who(char *, int, int, char **); -static int int_doverbose(char *, int, int, char **); -static int int_doediting(char *, int, int, char **); -static int int_manual(char *, int, int, char **); -static int int_shell(char *, int, int, char **); -static int int_clear(void); -static int int_help(void); -static int int_exit(void); -static int hostname(int, char **); -static int logger(int, char **); -static int manual(int, char**); -static int nocmd(int, char **); -static int docmd(int, char **); -static int setenvcmd(int, char **); -static int unsetenvcmd(int, char **); -static int saveenvcmd(int, char **); -static int shell(int, char*[]); -static int ping(int, char*[]); -static int ping6(int, char*[]); -static int traceroute(int, char*[]); -static int traceroute6(int, char*[]); -static int ssh(int, char*[]); -static int telnet(int, char*[]); - void p_argv(int, char **); -static int nreboot(void); -static int halt(void); -static int powerdown(void); +static int int_logger(int, char **, ...); +static int int_ping(int, char **, ...); +static int int_ping6(int, char **, ...); +static int int_traceroute(int, char **, ...); +static int int_traceroute6(int, char **, ...); +static int int_ssh(int, char **, ...); +static int int_telnet(int, char **, ...); +static int int_do(int, char **, ...); +static int int_setenv(int, char **, ...); +static int int_unsetenv(int, char **, ...); +static int int_saveenv(int, char **, ...); +static int int_show(int, char **, ...); +static int int_who(int, char **, ...); +static int int_doverbose(int, char **, ...); +static int int_doediting(int, char **, ...); +static int int_manual(int, char **, ...); +static int int_shell(int, char ** ,...); +static int int_clear(int, char **, ...); +static int int_help(int, char **, ...); +static int int_exit(int, char **, ...); +static int hostname(int, char **, ...); +static int logger(int, char **, ...); +static int manual(int, char**, ...); +static int nocmd(int, char **, ...); +static int docmd(int, char **, ...); +static int setenvcmd(int, char **, ...); +static int unsetenvcmd(int, char **, ...); +static int saveenvcmd(int, char **, ...); +static int shell(int, char **, ...); +static int ping(int, char **, ...); +static int ping6(int, char**, ...); +static int traceroute(int, char**, ...); +static int traceroute6(int, char**, ...); +static int ssh(int, char**, ...); +static int telnet(int, char**, ...); + void p_argv(int, char **); +static int nreboot(int, char **, ...); +static int halt(int, char **, ...); +static int powerdown(int, char **, ...); static void pf_stats(void); -static int int_interface(char *, int, int, char **); +static int interface(int, char **, ...); +static int int_interface(int, char **, ...); #include "commands.h" @@ -431,7 +432,7 @@ struct prot prots[] = { */ int -quit(void) +quit(int argc, char **argv, ...) { if (privexec) { exit(NSH_REXEC_EXIT_CODE_QUIT); @@ -518,7 +519,7 @@ Menu showlist[] = { }; static int -showcmd(int argc, char **argv) +showcmd(int argc, char **argv, ...) { Menu *s; /* pointer to current command */ int error = 0, outfd = -1; @@ -943,7 +944,7 @@ Menu pipextab[] = { }; static int -ipcmd(int argc, char **argv) +ipcmd(int argc, char **argv, ...) { Menu *i; /* pointer to current command */ struct sysctltab *stab; @@ -992,18 +993,27 @@ ipcmd(int argc, char **argv) } if (i->handler) - success = (*i->handler)(set, argv[1], + success = (*i->handler)(set, &argv[1], (i->maxarg > 0) ? argv[2] : 0, stab->pf); return(success); } static int -sysctlhelp(int unused1, char **unused2, char **unused3, int type) +sysctlhelp(int unused1, char **unused2, ...) { Menu *i = NULL, *j = NULL; /* pointer to current command */ char *prefix = NULL; u_int z = 0; struct sysctltab *stab; + va_list ap; + char **unused3 = NULL; + int type; + + va_start(ap, unused2); + unused3 = va_arg(ap, char **); + if (unused3) { /* silence "unused variable" compiler warning */ } + type = va_arg(ap, int); + va_end(ap); for (stab = sysctls; stab->name != NULL; stab++) if (stab->pf == type) { @@ -1051,12 +1061,12 @@ Menu flushlist[] = { }; static int -flushcmd(int argc, char **argv) +flushcmd(int argc, char **argv, ...) { Menu *f; if (argc < 2) { - flush_help(); + flush_help(argc, argv); return 0; } @@ -1077,22 +1087,30 @@ flushcmd(int argc, char **argv) return 0; } if (f->handler) - (*f->handler)((f->maxarg > 0) ? argv[2] : 0, + (*f->handler)(0, NULL, (f->maxarg > 0) ? argv[2] : 0, (f->maxarg > 1) ? argv[3] : 0); return(1); } static int -flush_line(char *line) +flush_line(int argc, char **argv, ...) { - char *argv[] = { PKILL, "-9", "-t", line, NULL }; - cmdargs(PKILL, argv); + va_list ap; + char *line; + char * args[5] = { PKILL, "-9", "-t", /* line */ NULL, NULL }; + + va_start(ap, argv); + line = va_arg(ap, char *); + va_end(ap); + + args[3] = line; + cmdargs(PKILL, args); return (1); } static int -flush_help(void) +flush_help(int argc, char **argv, ...) { Menu *f; u_int z = 0; @@ -1378,14 +1396,20 @@ read_command_line(EditLine *el, History *hist) * interface/bridge is being configured. */ static int -interface(int argc, char **argv, char *modhvar) +interface(int argc, char **argv, ...) { int ifs, set = 1; char *tmp; char *ifunit = NULL; struct intlist *i; /* pointer to current command */ struct ifreq ifr; + va_list ap; + char *modhvar; + va_start(ap, argv); + modhvar = va_arg(ap, char *); + va_end(ap); + if (!modhvar) { if (NO_ARG(argv[0])) { argv++; @@ -1522,7 +1546,7 @@ interface(int argc, char **argv, char *modhvar) if (cli_rtable != 0 && nsh_setrtable(0) == 0) cli_rtable = 0; - ((*i->handler) (ifname, ifs, argc, argv)); + (*i->handler)(argc, argv, ifname, ifs); if (save_cli_rtable != cli_rtable && nsh_setrtable(cli_rtable) == 0) @@ -1604,7 +1628,7 @@ interface(int argc, char **argv, char *modhvar) if (cli_rtable != 0 && nsh_setrtable(0) == 0) cli_rtable = 0; - ret = (*i->handler) (ifname, ifs, margc, margv); + ret = (*i->handler)(margc, margv, ifname, ifs); if (cli_rtable != save_cli_rtable && nsh_setrtable(cli_rtable) == 0) @@ -1636,11 +1660,19 @@ interface(int argc, char **argv, char *modhvar) } static int -int_interface(char *old_ifname, int ifs, int argc, char **argv) +int_interface(int argc, char **argv, ...) { struct ifreq ifr; char *new_ifname; int set = 1; + va_list ap; + char *old_ifname; + int ifs; + + va_start(ap, argv); + old_ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); if (NO_ARG(argv[0])) { argv++; @@ -1690,120 +1722,119 @@ int_interface(char *old_ifname, int ifs, int argc, cha } static int -int_logger(char *ifname, int ifs, int argc, char **argv) +int_logger(int argc, char **argv, ...) { logger(argc, argv); return 0; /* do not leave interface context */ } - static int -int_ping(char *ifname, int ifs, int argc, char **argv) +int_ping(int argc, char **argv, ...) { ping(argc, argv); return 0; /* do not leave interface context */ } static int -int_ping6(char *ifname, int ifs, int argc, char **argv) +int_ping6(int argc, char **argv, ...) { ping6(argc, argv); return 0; /* do not leave interface context */ } static int -int_traceroute(char *ifname, int ifs, int argc, char **argv) +int_traceroute(int argc, char **argv, ...) { traceroute(argc, argv); return 0; /* do not leave interface context */ } static int -int_traceroute6(char *ifname, int ifs, int argc, char **argv) +int_traceroute6(int argc, char **argv, ...) { traceroute6(argc, argv); return 0; /* do not leave interface context */ } static int -int_ssh(char *ifname, int ifs, int argc, char **argv) +int_ssh(int argc, char **argv, ...) { ssh(argc, argv); return 0; /* do not leave interface context */ } static int -int_telnet(char *ifname, int ifs, int argc, char **argv) +int_telnet(int argc, char **argv, ...) { telnet(argc, argv); return 0; /* do not leave interface context */ } static int -int_do(char *ifname, int ifs, int argc, char **argv) +int_do(int argc, char **argv, ...) { docmd(argc, argv); return 0; /* do not leave interface context */ } static int -int_setenv(char *ifname, int ifs, int argc, char **argv) +int_setenv(int argc, char **argv, ...) { setenvcmd(argc, argv); return 0; /* do not leave interface context */ } static int -int_unsetenv(char *ifname, int ifs, int argc, char **argv) +int_unsetenv(int argc, char **argv, ...) { unsetenvcmd(argc, argv); return 0; /* do not leave interface context */ } static int -int_saveenv(char *ifname, int ifs, int argc, char **argv) +int_saveenv(int argc, char **argv, ...) { saveenvcmd(argc, argv); return 0; /* do not leave interface context */ } static int -int_show(char *ifname, int ifs, int argc, char **argv) +int_show(int argc, char **argv, ...) { showcmd(argc, argv); return 0; /* do not leave interface context */ } static int -int_who(char *ifname, int ifs, int argc, char **argv) +int_who(int argc, char **argv, ...) { who(argc, argv); return 0; /* do not leave interface context */ } static int -int_doverbose(char *ifname, int ifs, int argc, char **argv) +int_doverbose(int argc, char **argv, ...) { doverbose(argc, argv); return 0; /* do not leave interface context */ } static int -int_doediting(char *ifname, int ifs, int argc, char **argv) +int_doediting(int argc, char **argv, ...) { doediting(argc, argv); return 0; /* do not leave interface context */ } static int -int_manual(char *ifname, int ifs, int argc, char **argv) +int_manual(int argc, char **argv, ...) { manual(argc, argv); return 0; /* do not leave interface context */ } static int -int_shell(char *ifname, int ifs, int argc, char **argv) +int_shell(int argc, char **argv, ...) { if (argc >1) { @@ -1815,13 +1846,13 @@ int_shell(char *ifname, int ifs, int argc, char **argv } static int -int_clear(void) +int_clear(int argc, char **argv, ...) { - clear(); + return clear(argc, argv); } static int -int_help(void) +int_help(int argc, char **argv, ...) { struct intlist *i; /* pointer to current command */ u_int z = 0; @@ -1845,7 +1876,7 @@ int_help(void) } static int -int_exit(void) +int_exit(int argc, char **argv, ...) { return 1; /* leave interface config mode */ } @@ -2087,7 +2118,7 @@ command() if (feof(stdin) || ferror(stdin)) { if (interactive_mode) printf("\n"); - (void) quit(); + (void) quit(0, NULL); /* NOTREACHED */ } break; @@ -2167,7 +2198,7 @@ manual_usage(void) } static int -manual(int argc, char **argv) +manual(int argc, char **argv, ...) { sig_t sigint, sigquit, sigchld; char term[32], *termenv = NULL; @@ -2259,8 +2290,8 @@ manual(int argc, char **argv) /* * Hostname command. */ -int -hostname(int argc, char **argv) +static int +hostname(int argc, char **argv, ...) { argv++; argc--; @@ -2278,7 +2309,8 @@ hostname(int argc, char **argv) return 0; } -int show_hostname(int argc, char **argv) +static int +show_hostname(int argc, char **argv, ...) { if (gethostname(hbuf, sizeof(hbuf))) printf("%% gethostname: %s\n", strerror(errno)); @@ -2287,12 +2319,11 @@ int show_hostname(int argc, char **argv) return 0; } + /* logger command */ - - int -logger(int argc, char *argv[]) +logger(int argc, char *argv[], ...) { if (argc < 2) { printf("%% Invalid arguments\n"); @@ -2309,7 +2340,7 @@ logger(int argc, char *argv[]) * This is a pseudo command table entry used for TAB-completion purposes. */ static int -nocmd(int argc, char **argv) +nocmd(int argc, char **argv, ...) { Command *cmd = NULL, *c; @@ -2344,7 +2375,7 @@ nocmd(int argc, char **argv) * switches which offer a "do" command for context switching. */ static int -docmd(int argc, char **argv) +docmd(int argc, char **argv, ...) { if (argc < 2) { printf("%% command name not provided\n"); @@ -2390,7 +2421,7 @@ docmd(int argc, char **argv) if (cli_rtable != 0 && nsh_setrtable(cli_rtable) == 0) cli_rtable = 0; - ((*i->handler) (ifname, ifs, argc, argv)); + (*i->handler)(argc, argv, ifname, ifs); if (save_cli_rtable != cli_rtable && nsh_setrtable(cli_rtable) == 0) @@ -2421,7 +2452,7 @@ usage_setenv(void) } static int -setenvcmd(int argc, char **argv) +setenvcmd(int argc, char **argv, ...) { char *name, *eq, *value; void *name0; @@ -2472,7 +2503,7 @@ setenvcmd(int argc, char **argv) } static int -unsetenvcmd(int argc, char **argv) +unsetenvcmd(int argc, char **argv, ...) { char *name; void *name0; @@ -2513,7 +2544,7 @@ savevar(void *keyptr, size_t keysize, void *value, siz } static int -saveenvcmd(int argc, char **argv) +saveenvcmd(int argc, char **argv, ...) { char tmppath[PATH_MAX], path[PATH_MAX]; FILE *f; @@ -2582,8 +2613,8 @@ saveenvcmd(int argc, char **argv) /* * Shell command. */ -int -shell(int argc, char **argv) +static int +shell(int argc, char **argv, ...) { sig_t sigint, sigquit, sigchld; @@ -2639,7 +2670,7 @@ shell(int argc, char **argv) * ping command. */ int -ping(int argc, char *argv[]) +ping(int argc, char *argv[], ...) { if (argc < 2) { printf("%% Invalid arguments\n"); @@ -2651,7 +2682,7 @@ ping(int argc, char *argv[]) } int -ping6(int argc, char *argv[]) +ping6(int argc, char *argv[], ...) { if (argc < 2) { printf("%% Invalid arguments\n"); @@ -2666,7 +2697,7 @@ ping6(int argc, char *argv[]) * telnet command. */ int -telnet(int argc, char *argv[]) +telnet(int argc, char *argv[], ...) { if (argc < 2) { printf("%% Invalid arguments\n"); @@ -2681,7 +2712,7 @@ telnet(int argc, char *argv[]) * ssh command. */ int -ssh(int argc, char *argv[]) +ssh(int argc, char *argv[], ...) { if (argc < 2) { printf("%% Invalid arguments\n"); @@ -2696,7 +2727,7 @@ ssh(int argc, char *argv[]) * traceroute command. */ int -traceroute(int argc, char *argv[]) +traceroute(int argc, char *argv[], ...) { if (argc < 2) { printf("%% Invalid arguments\n"); @@ -2708,7 +2739,7 @@ traceroute(int argc, char *argv[]) } int -traceroute6(int argc, char *argv[]) +traceroute6(int argc, char *argv[], ...) { if (argc < 2) { printf("%% Invalid arguments\n"); @@ -2741,8 +2772,8 @@ argvtostring(int argc, char **argv, char *string, int return i; } -int -rtable(int argc, char **argv) +static int +rtable(int argc, char **argv, ...) { int table, set, pos, found, curtable; const char *errstr; @@ -2865,7 +2896,7 @@ rtable(int argc, char **argv) * Group attribute command. */ int -group(int argc, char **argv) +group(int argc, char **argv, ...) { int counter = 1, set, ifs; const char *errstr; @@ -2919,18 +2950,18 @@ group(int argc, char **argv) } //clear terminal screen -int -clear(void) +static int +clear(int argc, char **argv, ...) { - char *argv[] = {CLEAR, NULL, NULL }; - cmdargs(CLEAR, argv); + char *args[] = {CLEAR, NULL, NULL }; + cmdargs(CLEAR, args); return 0; } /* * disable privileged mode */ -int -disable(void) +static int +disable(int argc, char **argv, ...) { if (privexec) { exit(0); @@ -2944,8 +2975,8 @@ disable(void) /* * verbose diagnostics */ -int -doverbose(int argc, char **argv) +static int +doverbose(int argc, char **argv, ...) { if (argc > 1) { if (NO_ARG(argv[0])) { @@ -2963,8 +2994,8 @@ doverbose(int argc, char **argv) return 0; } -int -doediting(int argc, char **argv) +static int +doediting(int argc, char **argv, ...) { if (argc > 1) { if (NO_ARG(argv[0])) { @@ -2983,8 +3014,8 @@ doediting(int argc, char **argv) return 0; } -int -doconfig(int argc, char **argv) +static int +doconfig(int argc, char **argv, ...) { if (argc > 1) { if (NO_ARG(argv[0])) { @@ -3002,8 +3033,8 @@ doconfig(int argc, char **argv) return 0; } -int -exitconfig(int argc, char **argv) +static int +exitconfig(int argc, char **argv, ...) { if (!config_mode) { printf ("%% Configuration mode is already disabled\n"); @@ -3015,7 +3046,7 @@ exitconfig(int argc, char **argv) } int -flush_history(void) +flush_history(int argc, char **argv, ...) { if (!editing) { printf("%% Command line editing not enabled\n"); @@ -3037,11 +3068,17 @@ flush_history(void) /* * pf toilet flusher */ -int -flush_pf(char *arg) +static int +flush_pf(int argc, char **argv, ...) { struct fpf *x; + va_list ap; + char *arg; + va_start(ap, argv); + arg = va_arg(ap, char *); + va_end(ap); + if (!arg || arg[0] == '?') { gen_help((char **)fpfs, "flush pf", "flush", sizeof(struct fpf)); @@ -3202,9 +3239,9 @@ p_argv(int argc, char **argv) } int -wr_startup(void) +wr_startup(int argc, char **argv, ...) { - char *argv[] = { SAVESCRIPT, NSHRC_TEMP, NULL }; + char *args[] = { SAVESCRIPT, NSHRC_TEMP, NULL }; if (wr_conf(NSHRC_TEMP)) printf("%% Saving configuration\n"); @@ -3212,7 +3249,7 @@ wr_startup(void) printf("%% Unable to save configuration: %s\n", strerror(errno)); - cmdargs(SAVESCRIPT, argv); + cmdargs(SAVESCRIPT, args); return(1); } @@ -3395,43 +3432,44 @@ done: * Reboot */ int -nreboot(void) +nreboot(int argc, char **argv, ...) { return do_reboot(RB_AUTOBOOT); } int -halt(void) +halt(int argc, char **argv, ...) { return do_reboot(RB_HALT); } int -powerdown(void) +powerdown(int argc, char **argv, ...) { return do_reboot(RB_POWERDOWN); } + /* * Flush wrappers */ -int -flush_ip_routes(void) +static int +flush_ip_routes(int argc, char **argv, ...) { flushroutes(AF_INET, AF_INET); return(0); } -int -flush_arp_cache(void) +static int +flush_arp_cache(int argc, char **argv, ...) { flushroutes(AF_INET, AF_LINK); return(0); } -int -flush_ndp_cache(void) +static int +flush_ndp_cache(int argc, char **argv, ...) { ndpdump(NULL, 1); return(0); @@ -3440,8 +3478,8 @@ flush_ndp_cache(void) /* * Show wrappers */ -int -pr_conf(int argc, char **argv) +static int +pr_conf(int argc, char **argv, ...) { if (priv != 1) { printf ("%% Privilege required\n"); @@ -3461,8 +3499,8 @@ pr_conf(int argc, char **argv) /* * Show startup config */ -int -pr_s_conf(int argc, char **argv) +static int +pr_s_conf(int argc, char **argv, ...) { int ret; @@ -3480,8 +3518,8 @@ pr_s_conf(int argc, char **argv) * Show running-config for the active context. * Currently only supports the interface/bridge context. */ -int -pr_a_conf(int argc, char **argv) +static int +pr_a_conf(int argc, char **argv, ...) { if (priv != 1) { printf ("%% Privilege required\n"); @@ -3500,8 +3538,8 @@ pr_a_conf(int argc, char **argv) /* * Show differences between startup and running config. */ -int -pr_conf_diff(int argc, char **argv) +static int +pr_conf_diff(int argc, char **argv, ...) { int conf_fd = -1, diff_fd = -1; char confpath[PATH_MAX]; @@ -3573,10 +3611,16 @@ done: } static int -pr_crontab(int argc, char **argv, FILE *outfile) +pr_crontab(int argc, char **argv, ...) { char *crontab_argv[] = { CRONTAB, "-l", "-u", "root", NULL }; + va_list ap; + FILE *outfile; + va_start(ap, argv); + outfile = va_arg(ap, FILE *); + va_end(ap); + if (priv != 1) { printf("%% Privilege required\n"); return 0 ; @@ -3592,8 +3636,8 @@ pr_crontab(int argc, char **argv, FILE *outfile) return 0; } -int -pr_routes(int argc, char **argv) +static int +pr_routes(int argc, char **argv, ...) { switch(argc) { case 2: @@ -3609,8 +3653,8 @@ pr_routes(int argc, char **argv) return 0; } -int -pr_routes6(int argc, char **argv) +static int +pr_routes6(int argc, char **argv, ...) { switch(argc) { case 2: @@ -3627,7 +3671,7 @@ pr_routes6(int argc, char **argv) } int -pr_arp(int argc, char **argv) +pr_arp(int argc, char **argv, ...) { switch(argc) { case 2: @@ -3642,8 +3686,8 @@ pr_arp(int argc, char **argv) return 0; } -int -pr_ndp(int argc, char **argv) +static int +pr_ndp(int argc, char **argv, ...) { switch(argc) { case 2: @@ -3658,16 +3702,16 @@ pr_ndp(int argc, char **argv) return 0; } -int -pr_sadb(int argc, char **argv) +static int +pr_sadb(int argc, char **argv, ...) { p_rttables(PF_KEY, 0, 0); return 0; } -int -pr_kernel(int argc, char **argv) +static int +pr_kernel(int argc, char **argv, ...) { struct stt *x; @@ -3701,8 +3745,8 @@ pf_stats(void) return; } -int -pr_dhcp(int argc, char **argv) +static int +pr_dhcp(int argc, char **argv, ...) { if (argc == 3 && argv[2][0] != '?') { if (isprefix(argv[2], "leases")) { @@ -3726,7 +3770,7 @@ envcmp(const void *item1, const void *item2) } static int -pr_environment(int argc, char **argv) +pr_environment(int argc, char **argv, ...) { extern char **environ; char **ep; blob - 538228794818b95a085bd5e3aa46337a017832b2 blob + e3eb2326a9df857f929d08aa1b33f7ae983b6dde --- commands.h +++ commands.h @@ -29,7 +29,7 @@ struct prot { extern char bgpd_socket_path[PATH_MAX]; void init_bgpd_socket_path(int); extern struct prot prots[]; -int show_help(int, char **); +int show_help(int, char **, ...); Command *getcmd(char *); extern Menu showlist[]; void makeargv(void); @@ -38,4 +38,4 @@ extern int nsh_setrtable(int); extern void sigalarm(int); extern char hbuf[MAXHOSTNAMELEN]; extern char ifname[IFNAMSIZ]; -int help(int, char**); +int help(int, char **, ...); blob - 45e48e3aac7ea6216f5f45d3920d8d040bceafee blob + 9270b99463cb1ad4a9e4150d2f673a0608250db5 --- ctl.c +++ ctl.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -35,17 +36,18 @@ /* table variable (for pkill usage) */ static char table[16]; -/* service routines */ -void edit_crontab(char *); -void install_crontab(char *); -void edit_motd(char *); -void call_editor(char *, char **, char *); -void start_dhcpd(char *, char *, char *, char *, char *); -void restart_dhcpd(char *, char *, char *, char *, char *); +/* service routines, used as handlers in struct ctl */ +void edit_crontab(int, char **, ...); +void install_crontab(int, char **, ...); +void edit_motd(int, char **, ...); +void call_editor(int, char **, ...); +void start_dhcpd(int, char **, ...); +void restart_dhcpd(int, char **, ...); + +/* subroutines */ +int fill_tmpfile(char **, char *, char **); int edit_file(char *, mode_t, char *, char **); -void ctl_symlink(char *, char *, char *); int rule_writeline(char *, mode_t, char *); -int fill_tmpfile(char **, char *, char **); int acq_lock(char *); void rls_lock(int); @@ -111,7 +113,7 @@ struct ctl ctl_pf[] = { { PFCTL, "-d", NULL }, { NULL }, NULL, DB_X_DISABLE, T_EXEC }, { "edit", "edit, test and stage firewall rules", { "pf", NULL }, - { PFCTL, "-nf", REQTEMP, NULL }, call_editor, 0, T_HANDLER_FILL1 }, + { PFCTL, "-nf", REQTEMP, NULL }, call_editor, 0, T_HANDLER_TEST }, { "check-config", "test and display staged firewall rules", { PFCTL, "-nvvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "reload", "test and apply staged firewall rules", @@ -129,7 +131,7 @@ struct ctl ctl_ospf[] = { T_EXEC }, { "edit", "edit, test and stage OSPFd config", { "ospf", NULL }, - { OSPFD, "-nf", REQTEMP, NULL }, call_editor, 0, T_HANDLER_FILL1 }, + { OSPFD, "-nf", REQTEMP, NULL }, call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged OSPFd config", { OSPFD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "reload", "test and appy staged OSPFd config", @@ -153,7 +155,7 @@ struct ctl ctl_ospf6[] = { T_EXEC }, { "edit", "edit, test and stage OSPF6d config", { "ospf6", NULL }, { OSPF6D, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged OSPF6d config", { OSPF6D, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "reload", "test and apply staged OSPF6d config", @@ -175,7 +177,7 @@ struct ctl ctl_eigrp[] = { T_EXEC }, { "edit", "edit, test and stage EIGRPd config", { "eigrp", NULL }, { EIGRPD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged EIGRPd config", { EIGRPD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "reload", "test and apply stagged EIGRPd config", @@ -198,7 +200,7 @@ struct ctl ctl_bgp[] = { { PKILL, "bgpd", NULL }, { NULL }, NULL, DB_X_DISABLE, T_EXEC }, { "edit", "edit, test and stage OpenBGPD config", { "bgp", NULL }, { BGPD, "-nf", REQTEMP, NULL, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged OpenBGPD config", { BGPD, "-nvf",REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "reload", "test and apply staged OpenBGPD config", @@ -221,7 +223,7 @@ struct ctl ctl_rip[] = { { PKILL, table, "ripd", NULL }, { NULL }, NULL, DB_X_DISABLE, T_EXEC }, { "edit", "edit, test and stage RIPd config", { "rip", NULL }, { RIPD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged RIPd config", { RIPD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "reload", "test and apply staged ripd config", @@ -241,7 +243,7 @@ struct ctl ctl_ldp[] = { { PKILL, "ldpd", NULL }, { NULL }, NULL, DB_X_DISABLE, T_EXEC }, { "edit", "edit, test and stage LDPd config", { "ldp", NULL }, { LDPD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged LDPd config", { LDPD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "reload", "test and apply staged LDPd config", @@ -264,7 +266,7 @@ struct ctl ctl_ipsec[] = { T_EXEC }, { "edit", "edit, test and stage isakmpd config", { "ipsec", NULL }, { IPSECCTL, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged isakmpd config", { IPSECCTL, "-nvvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "reload", "test and apply staged isakmpd config", @@ -292,7 +294,7 @@ struct ctl ctl_ike[] = { { IKECTL, "decouple", NULL }, { NULL }, NULL, 0, T_EXEC }, { "edit", "edit, test and stage IKEd config", { "ike", NULL }, { IKED, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test IKEd config", { IKED, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "reload", "test and apply IKEd config", @@ -314,7 +316,7 @@ struct ctl ctl_dvmrp[] = { T_EXEC }, { "edit", "edit,test and stage DVMRPd config", { "dvmrp", NULL }, { DVMRPD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "config-test", "test staged DVMRPd config", { DVMRPD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "log", "configure DVMRPd logging, brief/verbose", @@ -332,7 +334,7 @@ struct ctl ctl_rad[] = { { PKILL, "rad", NULL }, { NULL }, NULL, DB_X_DISABLE, T_EXEC }, { "edit", "edit,test and stage RAD config", { "rad", NULL}, { RAD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged RAD config", { RAD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { NULL, NULL, { NULL }, { NULL }, NULL, 0, 0 } @@ -348,7 +350,7 @@ struct ctl ctl_ifstate[] = { T_EXEC }, { "edit", "edit, test and stage ifstated config", { "ifstate", NULL }, { IFSTATED, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "config-test", "test staged ifstated config ", { IFSTATED, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { NULL, NULL, { NULL }, { NULL }, NULL, 0, 0 } @@ -364,7 +366,7 @@ struct ctl ctl_sasync[] = { T_EXEC }, { "edit", "edit, test and stage SAsyncd config", { "sasync", NULL }, { SASYNCD, "-nvvc", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged SAsyncd config", { SASYNCD, "-nvvc", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { NULL, NULL, { NULL }, { NULL }, NULL, 0, 0 } @@ -389,7 +391,7 @@ struct ctl ctl_nppp[] = { T_EXEC }, { "edit", "edit ,test and stage nPPPd config", { "nppp", NULL }, { NPPPD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged nPPPd config", { NPPPD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { NULL, NULL, { NULL }, { NULL }, NULL, 0, 0 } @@ -405,7 +407,7 @@ struct ctl ctl_dhcp[] = { DB_X_DISABLE, T_EXEC }, { "edit", "edit,test and stage DHCPd config", { "dhcp", NULL }, { DHCPD, "-nc", REQTEMP, NULL }, call_editor, 0, - T_HANDLER_FILL1 }, + T_HANDLER_TEST }, { "config-test", "test staged DHCPd config", { DHCPD, "-nc", REQTEMP, "-l", DHCPLEASES, NULL }, { NULL }, NULL, 0, T_EXEC }, @@ -425,7 +427,7 @@ struct ctl ctl_snmp[] = { T_EXEC }, { "edit", "edit,test and stage OpenSNMPD config", { "snmp", NULL }, { SNMPD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "config-test", "test staged OpenSNMPD config", { SNMPD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { NULL, NULL, { NULL }, { NULL }, NULL, 0, 0 } @@ -441,7 +443,7 @@ struct ctl ctl_sshd[] = { DB_X_DISABLE, T_EXEC }, { "edit", "edit, test and stage OpenSSHD config", { "sshd", NULL }, { SSHD, "-tf", REQTEMP, NULL }, call_editor, 0, - T_HANDLER_FILL1 }, + T_HANDLER_TEST }, { "config-test", "test staged OpenSSHD config", { SSHD, "-tf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { NULL, NULL, { NULL }, { NULL }, NULL, 0, 0 } @@ -456,7 +458,7 @@ struct ctl ctl_ntp[] = { { PKILL, "ntpd", NULL }, { NULL }, NULL, DB_X_DISABLE, T_EXEC }, { "edit", "edit, test and stage OpenNTPD config", { "ntp", NULL }, { NTPD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged OpenNTPD config", { NTPD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { NULL, NULL, { NULL }, { NULL }, NULL, 0, 0 } @@ -472,7 +474,7 @@ struct ctl ctl_relay[] = { T_EXEC }, { "edit", "edit, test and stage relayd config", { "relay", NULL }, { RELAYD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "check-config", "test staged relayd config", { RELAYD, "-nvf", REQTEMP, NULL }, { NULL}, NULL, 0, T_EXEC }, { "reload", "test and apply staged relayd config", @@ -503,7 +505,7 @@ struct ctl ctl_smtp[] = { T_EXEC }, { "edit", "edit,test and stage OpenSMTPD config", { "smtp", NULL }, { SMTPD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "config-test", "test OpenSMTPD config", { SMTPD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "log", "set OpenSMTPD logging brief/verbose config", @@ -570,7 +572,7 @@ struct ctl ctl_inet[] = { { PKILL, table, "inetd", NULL }, { NULL }, NULL, DB_X_DISABLE, T_EXEC }, { "edit", "edit inetd superserver config", - { "inet", NULL, NULL }, { NULL }, call_editor, 0, T_HANDLER_FILL1 }, + { "inet", NULL, NULL }, { NULL }, call_editor, 0, T_HANDLER_TEST }, { NULL, NULL, { NULL }, { NULL }, NULL, 0, 0 } }; @@ -583,7 +585,7 @@ struct ctl ctl_ldap[] = { T_EXEC }, { "edit", "edit, test and stage LDAPd config", { "ldap", NULL }, { LDAPD, "-nf", REQTEMP, NULL }, - call_editor, 0, T_HANDLER_FILL1 }, + call_editor, 0, T_HANDLER_TEST }, { "config-test", "test staged LDAPd config", { LDAPD, "-nvf", REQTEMP, NULL }, { NULL }, NULL, 0, T_EXEC }, { "log", "config LDAPd logging, brief/verbose", @@ -595,13 +597,6 @@ struct ctl ctl_ldap[] = { { NULL, NULL, { NULL }, { NULL }, NULL, 0, 0 } }; -void -ctl_symlink(char *temp, char *real, char *z) -{ - rmtemp(temp); - symlink(real, temp); -} - /* flag to other nsh sessions or nsh conf() that actions have been taken */ void flag_x(char *name, char *daemon, int dbflag, char *data) @@ -619,7 +614,7 @@ flag_x(char *name, char *daemon, int dbflag, char *dat /* the main entry point into ctl.c from CLI */ int -ctlhandler(int argc, char **argv, char *modhvar) +ctlhandler(int argc, char **argv, ...) { struct daemons *daemons; struct ctl *x; @@ -629,7 +624,13 @@ ctlhandler(int argc, char **argv, char *modhvar) char **fillargs; int rv = 0; int nargs; + va_list ap; + char *modhvar; + va_start(ap, argv); + modhvar = va_arg(ap, char *); + va_end(ap); + /* loop daemon list to find table pointer */ daemons = (struct daemons *) genget(hname, (char **)ctl_daemons, sizeof(struct daemons)); @@ -689,44 +690,21 @@ ctlhandler(int argc, char **argv, char *modhvar) case T_HANDLER: /* pointer to handler routine, fill main args */ nargs = fill_tmpfile(fillargs, tmpfile, tmp_args); - switch (nargs) { - case 0: - (*x->handler)(); - break; - case 1: - (*x->handler)(tmp_args[0]); - break; - case 2: - (*x->handler)(tmp_args[0], tmp_args[1]); - break; - case 3: - (*x->handler)(tmp_args[0], tmp_args[1], tmp_args[2]); - break; - case 4: - (*x->handler)(tmp_args[0], tmp_args[1], tmp_args[2], - tmp_args[3]); - break; - case 5: - (*x->handler)(tmp_args[0], tmp_args[1], tmp_args[2], - tmp_args[3], tmp_args[4]); - break; - case 6: - (*x->handler)(tmp_args[0], tmp_args[1], tmp_args[2], - tmp_args[3], tmp_args[4], tmp_args[5]); - break; - case NOPTFILL: /* bump this when adding more cases */ - default: + /* bump NOPTFILL when adding more arguments */ + if (nargs < NOPTFILL) { + (*x->handler)(nargs, tmp_args); + } else { printf("%% handler %s %s requires too many " "arguments: %d\n", hname, argv[1], nargs); break; } break; - case T_HANDLER_FILL1: - /* pointer to handler routine, fill args @ args[1] pointer */ + case T_HANDLER_TEST: + /* pointer to handler with a test command, fill test args */ if (fill_tmpfile(x->test_args, tmpfile, tmp_args)) - (*x->handler)(fillargs[0], tmp_args, fillargs[2]); + (*x->handler)(1, &fillargs[0], tmp_args); else - (*x->handler)(fillargs[0], x->test_args, fillargs[2]); + (*x->handler)(1, &fillargs[0], x->test_args); break; case T_EXEC: /* command to execute via execv syscall, fill main args */ @@ -746,13 +724,13 @@ done: } void -restart_dhcpd(char *arg0, char *arg1, char *arg2, char *arg3, char *arg4) +restart_dhcpd(int argc, char **argv, ...) { char *argv_pkill[] = { PKILL, table, "dhcpd", NULL }; cmdargs(argv_pkill[0], argv_pkill); sleep(1); - start_dhcpd(arg0, arg1, arg2, arg3, arg4); + start_dhcpd(argc, argv); } /* @@ -784,8 +762,9 @@ fill_tmpfile(char **fillargs, char *tmpfile, char **tm } void -edit_crontab(char *name) +edit_crontab(int argc, char **argv, ...) { + char *name = argv[0]; char *crontab_argv[] = { CRONTAB, "-u", "root", "-l", NULL }; char tmpfile[PATH_MAX]; int found = 0; @@ -835,8 +814,9 @@ done: } void -install_crontab(char *name) +install_crontab(int argc, char **argv, ...) { + char *name = argv[0]; char *crontab_argv[] = { CRONTAB, "-u", "root", NULL, NULL }; char tmpfile[PATH_MAX]; int fd, found = 0; @@ -865,18 +845,25 @@ install_crontab(char *name) } void -edit_motd(char *name) +edit_motd(int argc, char **argv, ...) { - call_editor(name, NULL, NULL); + call_editor(argc, argv); } void -call_editor(char *name, char **args, char *z) +call_editor(int argc, char **argv, ...) { + char *name = argv[0]; int found = 0; char tmpfile[64]; struct daemons *daemons; + va_list ap; + char **args; + va_start(ap, argv); + args = va_arg(ap, char **); + va_end(ap); + for (daemons = ctl_daemons; daemons->name != 0; daemons++) { if (strncmp(daemons->name, name, strlen(name)) == 0) { found = 1; @@ -1120,7 +1107,7 @@ rmtemp(char *file) } void -start_dhcpd(char *arg0, char *arg1, char *arg2, char *arg3, char *arg4) +start_dhcpd(int argc, char **argv, ...) { struct if_nameindex *ifn_list, *ifnp; char **dhcpd_args = NULL; @@ -1169,16 +1156,16 @@ start_dhcpd(char *arg0, char *arg1, char *arg2, char * } i = 0; - dhcpd_args[i++] = arg0; /* dhcpd */ - dhcpd_args[i++] = arg1; /* -c */ - dhcpd_args[i++] = arg2; /* dhcpd.conf */ - dhcpd_args[i++] = arg3; /* -l */ + dhcpd_args[i++] = argv[0]; /* dhcpd */ + dhcpd_args[i++] = argv[1]; /* -c */ + dhcpd_args[i++] = argv[2]; /* dhcpd.conf */ + dhcpd_args[i++] = argv[3]; /* -l */ if (cli_rtable != 0) { snprintf(leasedb, sizeof(leasedb), "%s.%d", - arg4, cli_rtable); + argv[4], cli_rtable); dhcpd_args[i++] = leasedb; /* rdomain's leasedb */ } else - dhcpd_args[i++] = arg4; /* default leasedb */ + dhcpd_args[i++] = argv[4]; /* default leasedb */ for (ifnp = ifn_list; ifnp->if_name != NULL; ifnp++) { int flags, rdomain; @@ -1195,7 +1182,7 @@ start_dhcpd(char *arg0, char *arg1, char *arg2, char * } dhcpd_args[i] = NULL; - cmdargs(arg0, dhcpd_args); + cmdargs(argv[0], dhcpd_args); done: if_freenameindex(ifn_list); free(dhcpd_args); blob - 1d5f9ba1bb4679f08e868a87794e6443df805da9 blob + 5695aa1cc3e00102dab7f6f7b6dbe5228b52120f --- ctl.h +++ ctl.h @@ -69,20 +69,20 @@ #define IFNAME (void *)3 #define REQTEMP (void *)4 #define SIZE_CONF_TEMP 64 -int ctlhandler(int, char **, char *); +int ctlhandler(int, char **, ...); void rmtemp(char *); struct ctl { char *name; char *help; char *args[32]; char *test_args[32]; - void (*handler)(); + void (*handler)(int, char **, ...); int flag_x; int type; }; #define T_HANDLER 1 -#define T_HANDLER_FILL1 2 +#define T_HANDLER_TEST 2 #define T_EXEC 3 struct daemons { char *name; blob - 5f7bb39e4b9ecc29ba5dbcf43c0c431a81a07d5d blob + d92806d81b6ea75c0e5fe742f5e7d194db8aadc0 --- ctlargs.c +++ ctlargs.c @@ -26,7 +26,7 @@ #include "ctl.h" int -pr_prot1(int argc, char **argv) +pr_prot1(int argc, char **argv, ...) { struct prot1 *x; struct prot *prot; blob - 3eed39cfe7a6df63939115a4588ca1b1a515f480 blob + c5a8966d0b3506a015dd105fb55b3044ddbe1d10 --- externs.h +++ externs.h @@ -74,9 +74,9 @@ extern char *nopterr; int nopt(int, char **, struct nopts *); /* ppp.c */ -int intsppp(char *, int, int, char **); +int intsppp(int, char **, ...); void pppoe_ipcp(char *, int, int); -int intpppoe(char *, int, int, char **); +int intpppoe(int, char **, ...); int is_pppoe(char *, int); #define NSH_PPPOE_IPADDR_IPCP 1 #define NSH_PPPOE_IPADDR_STATIC 2 @@ -144,7 +144,7 @@ extern u_long rtm_inits; #define FLUSH 0 struct rtdump *getrtdump(int, int, int); void freertdump(struct rtdump *); -int monitor(int, char **); +int monitor(int, char **, ...); int rtmsg(int, int, int, int, int); void flushroutes(int, int); void bprintf(FILE *, int, u_char *); @@ -191,7 +191,7 @@ extern pid_t child; #ifndef DHCPLEASES #define DHCPLEASES "/var/db/dhcpd.leases" #endif -int quit(void); +int quit(int, char **, ...); void sigalarm(int); void command(void); int argvtostring(int, char **, char *, int); @@ -206,7 +206,7 @@ void restoreprompt(void); extern char prompt[128]; extern char saved_prompt[sizeof(prompt)]; -int group (int, char **); +int group (int, char **, ...); void gen_help(char **, char *, char *, int); void makeargv(void); extern size_t cursor_argc; @@ -218,7 +218,7 @@ typedef struct cmd { char *complete; /* context sensitive completion list */ char **table; /* next table for context completion */ int stlen; /* struct length (for rows in next table) */ - int (*handler) (); /* routine which executes command */ + int (*handler) (int, char **, ...); /* routine which executes command */ int needpriv; /* Do we need privilege to execute? */ int needconfig; /* Do we need config mode to execute? */ int nocmd; /* Can we specify 'no ...command...'? */ @@ -233,7 +233,7 @@ typedef struct menu { int stlen; /* struct length (for rows in next table) */ int minarg; /* Minimum number of arguments */ int maxarg; /* Maximum number of arguments */ - int (*handler)(); /* Routine to perform (for special ops) */ + int (*handler)(int, char **, ...); /* Routine to perform */ } Menu; struct intlist { @@ -242,7 +242,7 @@ struct intlist { char *complete; /* context sensitive completion list */ char **table; /* next table for context completion */ int stlen; /* struct length (for rows in next table) */ - int (*handler)(); /* Routine to perform (for special ops) */ + int (*handler)(int, char **, ...); /* Routine to perform */ int nocmd; /* Can we specify 'no ...command...'? */ }; @@ -274,9 +274,9 @@ const char *get_string(const char *, const char *, u_i void make_string(char *str, int, const u_int8_t *buf, int); int get_nwinfo(char *, char *, int, int); int get_nwpowersave(int, char *); -int intnwkey(char *, int, int, char **); -int inttxpower(char *, int, int, char **); -int intbssid(char *, int, int, char **); +int intnwkey(int, char **, ...); +int inttxpower(int, char **, ...); +int intbssid(int, char **, ...); /* stats.c */ void rt_stats(void); @@ -306,13 +306,13 @@ int Ambiguous(void *); /* sysctl.c */ int sysctl_int(int[], int, int); -int ipsysctl(int, char *, char *, int); +int ipsysctl(int, char **, ...); void conf_sysctls(FILE *); /* route.c */ #define NO_NETMASK 0 #define ASSUME_NETMASK 1 -int route(int, char**); +int route(int, char**, ...); void show_route(char *, int); int is_ip_addr(char *); #ifdef _IP_T_ @@ -339,10 +339,10 @@ int parse_ipv6(char *, struct in6_addr *); #define DEFAULT_LLPRIORITY 3 void imr_init(char *); int is_valid_ifname(char *); -int show_int(int, char **, FILE *); -int show_vlans(int, char **); -int show_ip(int, char **); -int show_autoconf(int, char **); +int show_int(int, char **, ...); +int show_vlans(int, char **, ...); +int show_ip(int, char **, ...); +int show_autoconf(int, char **, ...); int get_rdomain(int, char *); int get_ifdata(char *, int); int get_ifflags(char *, int); @@ -353,30 +353,30 @@ u_int32_t in4_netaddr(u_int32_t, u_int32_t); u_int32_t in4_brdaddr(u_int32_t, u_int32_t); extern struct ghs intiphelp[]; extern struct ghs intip6help[]; -int intip(char *, int, int, char **); +int intip(int, char **, ...); int intipcp(char *, int, int, char **); -int intmtu(char *, int, int, char **); -int intkeepalive(char *, int, int, char **); -int intrdomain(char *, int, int, char **); -int intdhcrelay(char *, int, int, char **); -int intmetric(char *, int, int, char **); -int intllprio(char *, int, int, char **); -int intflags(char *, int, int, char **); -int intxflags(char *, int, int, char **); +int intmtu(int, char **, ...); +int intkeepalive(int, char **, ...); +int intrdomain(int, char **, ...); +int intdhcrelay(int, char **, ...); +int intmetric(int, char **, ...); +int intllprio(int, char **, ...); +int intflags(int, char **, ...); +int intxflags(int, char **, ...); int intaf(char *, int, int, char **); -int intlink(char *, int, int, char **); -int intnwid(char *, int, int, char **); -int intpowersave(char *, int, int, char **); -int intdesc(char *, int, int, char **); -int intpflow(char *, int, int, char **); -int intlladdr(char *, int, int, char **); -int intgroup(char *, int, int, char **); -int intrtlabel(char *, int, int, char **); -int intparent(char *, int, int, char **); -int intpatch(char *, int, int, char **); -int intmpls(char *, int, int, char **); -int intpwe3(char *, int, int, char **); -int intvnetflowid(char *, int, int, char **); +int intlink(int, char **, ...); +int intnwid(int, char **, ...); +int intpowersave(int, char **, ...); +int intdesc(int, char **, ...); +int intpflow(int, char **, ...); +int intlladdr(int, char **, ...); +int intgroup(int, char **, ...); +int intrtlabel(int, char **, ...); +int intparent(int, char **, ...); +int intpatch(int, char **, ...); +int intmpls(int, char **, ...); +int intpwe3(int, char **, ...); +int intvnetflowid(int, char **, ...); int addaf(char *, int, int); int removeaf(char *, int, int); int check_daemon_control_socket(const char *); @@ -388,7 +388,7 @@ char *get_hwdaddr(char *); void intr(void); /* version.c */ -int version(int, char **); +int version(int, char **, ...); /* compile.c */ extern char compiled[], compiledby[], compiledon[], compilehost[]; @@ -403,20 +403,20 @@ int bridge_addrs(int, char *, char *, char *, FILE *); int set_ifflag(int, char *, short); int clr_ifflag(int, char *, short); int is_bridge(int, char *); -int brport(char *, int, int, char **); -int brval(char *, int, int, char **); -int brrule(char *, int, int, char **); -int brstatic(char *, int, int, char **); -int brpri(char *, int, int, char **); -int flush_bridgedyn(char *); -int flush_bridgeall(char *); -int flush_bridgerule(char *, char*); -int brprotect(char *, int, int, char **); -int show_bridges(int, char **); +int brport(int, char **, ...); +int brval(int, char **, ...); +int brrule(int, char **, ...); +int brstatic(int, char **, ...); +int brpri(int, char **, ...); +int flush_bridgedyn(int , char **, ...); +int flush_bridgeall(int, char **, ...); +int flush_bridgerule(int, char **, ...); +int brprotect(int, char **, ...); +int show_bridges(int, char **, ...); /* tunnel.c */ -int inttunnel(char *, int, int, char **); -int intvnetid(char *, int, int, char **); +int inttunnel(int, char **, ...); +int intvnetid(int, char **, ...); int get_physrtable(int, char *); int get_physttl(int, char *); int get_physecn(int, char *); @@ -428,8 +428,8 @@ int64_t get_vnetid(int, char *); int media_status(int, char *, char *, FILE *); void media_supported(int, char *, char *, char *, FILE *); int phys_status(int, char *, char *, char *, int, int); -int intmedia(char *, int, int, char **); -int intmediaopt(char *, int, int, char **); +int intmedia(int, char **, ...); +int intmediaopt(int, char **, ...); int conf_media_status(FILE *, int, char *); struct ifmediareq; const char *get_ifm_linkstate_str(struct ifmediareq *); @@ -441,13 +441,13 @@ const char *get_ifm_subtype_str(uint64_t); #define NSHPASSWD_TEMP "/var/run/nshpasswd" int read_pass(char *, size_t); int gen_salt(char *, size_t); -int enable(int, char **); +int enable(int, char **, ...); /* pfsync.c */ #define PFSYNC_MAXUPDATES 128 -int intsyncdev(char *, int, int, char **); -int intsyncpeer(char *, int, int, char **); -int intmaxupd(char *, int, int, char **); +int intsyncdev(int, char **, ...); +int intsyncpeer(int, char **, ...); +int intmaxupd(int, char **, ...); int conf_pfsync(FILE *, int, char *); /* carp.c */ @@ -456,26 +456,26 @@ int conf_pfsync(FILE *, int, char *); #define CARP_VHID 2 #define CARP_PEER 3 #define CARP_BALANCING 4 -int intcarp(char *, int, int, char **); -int intcpass(char *, int, int, char **); -int intcnode(char *, int, int, char **); +int intcarp(int, char **, ...); +int intcpass(int, char **, ...); +int intcnode(int, char **, ...); int conf_carp(FILE *, int, char *); int carp_state(int, char *, FILE *); -int intcdev(char *, int, int, char **); +int intcdev(int, char **, ...); int carplock(int); /* trunk.c */ -int inttrunkport(char *, int, int, char **); -int inttrunkproto(char *, int, int, char **); +int inttrunkport(int, char **, ...); +int inttrunkproto(int, char **, ...); int conf_trunk(FILE *output, int ifs, char *ifname); void show_trunk(int ifs, char *ifname, FILE *); /* who.c */ -int who(int, char **); +int who(int, char **, ...); /* arp.c */ int arpget(const char *); -int arpset(int, char **); +int arpset(int, char **, ...); void arpdump(void); void conf_arp(FILE *, char *); char *sec2str(time_t); @@ -483,7 +483,7 @@ struct sockaddr_dl; char *ether_str(struct sockaddr_dl *); /* ndp.c */ -int ndpset(int, char **); +int ndpset(int, char **, ...); void ndpget(const char *); int ndpdelete(const char *); struct sockaddr_in6; @@ -491,7 +491,7 @@ void ndpdump(struct sockaddr_in6 *, int); void conf_ndp(FILE *output, char *delim); /* nameserver.c */ -int nameserverset(int, char **); +int nameserverset(int, char **, ...); void conf_nameserver(FILE *); /* more.c */ @@ -558,13 +558,13 @@ int pflow_addr(const char *, struct sockaddr_storage * int pflow_status(int, int, char *, char *); /* wg.c */ -int intwg(char *, int, int, char **); -int intwgpeer(char *, int, int, char **); +int intwg(int, char **, ...); +int intwgpeer(int, char **, ...); void conf_wg(FILE *, int, char *); void show_wg(int, char *, FILE *); /* umb.c */ -int intumb(char *, int, int, char **); +int intumb(int, char **, ...); void conf_umb(FILE *, int, char *); void show_umb(int, char *, FILE *); @@ -575,7 +575,7 @@ int mbs2ws(wchar_t **, size_t *, const char *); int mbsavis(char**, int *, const char *); /* ctlargs.c */ -int pr_prot1(int, char **); +int pr_prot1(int, char **, ...); char **step_optreq(char **, char **, int, char **, int); /* hashtable.c */ blob - 9564ad11cfdf44c8f81f31ff2f0d694bd6248954 blob + 34c3d146142d071df0804f3dd71f4585db909e98 --- helpcommands.c +++ helpcommands.c @@ -27,7 +27,7 @@ #include "commands.h" int -show_help(int argc, char **argv) +show_help(int argc, char **argv, ...) { Menu *s; /* pointer to current command */ u_int z = 0; @@ -77,7 +77,7 @@ gen_help(char **x, char *cmdprefix, char *descrsuffix, * Help command. */ int -help(int argc, char **argv) +help(int argc, char **argv, ...) { Command *c; blob - 702bb2ba0c42a7061b2a8d5e5ccf4f1eea9dbeb7 blob + b530a2fd7bcb9c19d00c32d3fcb131ad6f5df55c --- ieee80211.c +++ ieee80211.c @@ -64,6 +64,7 @@ #include #include #include +#include #include #include #include @@ -166,12 +167,20 @@ make_string(char *str, int str_len, const u_int8_t *bu /* was setifnwkey() */ int -intnwkey(char *ifname, int ifs, int argc, char **argv) +intnwkey(int argc, char **argv, ...) { int i, len, set; char *cp = NULL, *val = NULL; struct ieee80211_nwkey nwkey; u_int8_t keybuf[IEEE80211_WEP_NKID][16]; + va_list ap; + char *ifname; + int ifs; + + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); if (NO_ARG(argv[0])) { set = 0; @@ -426,12 +435,20 @@ get_nwinfo(char *ifname, char *str, int str_len, int t } int -inttxpower(char *ifname, int ifs, int argc, char **argv) +inttxpower(int argc, char **argv, ...) { const char *errmsg = NULL; struct ieee80211_txpower txpower; short dbm, set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -472,12 +489,20 @@ inttxpower(char *ifname, int ifs, int argc, char **arg } int -intbssid(char *ifname, int ifs, int argc, char **argv) +intbssid(int argc, char **argv, ...) { struct ieee80211_bssid bssid; struct ether_addr *ea; short set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; blob - ab83616edf04a266cb51b2ab7adb8f168bdef2e7 blob + e0d9b2290cd49156e41c518c76e2e3e882a1a6f9 --- if.c +++ if.c @@ -16,6 +16,7 @@ #include +#include #include #include #include @@ -229,7 +230,7 @@ show_int_status(char *ifname, int ifs, FILE *outfile) } int -show_int(int argc, char **argv, FILE *outfile) +show_int(int argc, char **argv, ...) { struct ifaddrs *ifap, *ifa; struct if_nameindex *ifn_list, *ifnp; @@ -238,7 +239,8 @@ show_int(int argc, char **argv, FILE *outfile) struct sockaddr_in *sin = NULL, *sinmask = NULL, *sindest; struct sockaddr_in6 *sin6 = NULL, *sin6mask = NULL, *sin6dest; struct timeval tv; - + FILE *outfile; + va_list ap; short tmp; int ifs, br, flags, days, hours, mins, pntd; int ippntd = 0; @@ -251,6 +253,10 @@ show_int(int argc, char **argv, FILE *outfile) memset(ifname, 0, sizeof(ifname)); + va_start(ap, argv); + outfile = va_arg(ap, FILE *); + va_end(ap); + if (argc == 4) { /* * Allow "interface-name interface-number" as some @@ -595,7 +601,7 @@ show_int(int argc, char **argv, FILE *outfile) } int -show_autoconf(int argc, char **argv) +show_autoconf(int argc, char **argv, ...) { struct if_nameindex *ifn_list, *ifnp; char *ifname = NULL; @@ -719,7 +725,7 @@ RB_PROTOTYPE(ip_tree, ip_tree_entry, entry, ip_tree_cm RB_GENERATE(ip_tree, ip_tree_entry, entry, ip_tree_cmp); int -show_ip(int argc, char **argv) +show_ip(int argc, char **argv, ...) { struct ifaddrs *ifap, *ifa; struct sockaddr_in *sin = NULL, *sinmask = NULL; @@ -1220,7 +1226,7 @@ intipusage(const char *cmdname, const char *msg) } int -intip(char *ifname, int ifs, int argc, char **argv) +intip(int argc, char **argv, ...) { int s, set, flags, argcmax; int argc0 = argc; @@ -1233,6 +1239,14 @@ intip(char *ifname, int ifs, int argc, char **argv) /* ipv6 structures */ struct in6_addr in6dest; struct in6_aliasreq ip6req; + va_list ap; + char *ifname; + int ifs; + + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); if (NO_ARG(argv[0])) { set = 0; @@ -1333,7 +1347,7 @@ intip(char *ifname, int ifs, int argc, char **argv) argv_dhcp = args; argc_dhcp = nitems(args) - 1; } - return intxflags(ifname, ifs, argc_dhcp, argv_dhcp); + return intxflags(argc_dhcp, argv_dhcp, ifname, ifs); } else { printf("%% cannot get DHCP leases because dhcpleased " "is not running\n"); @@ -1354,7 +1368,7 @@ intip(char *ifname, int ifs, int argc, char **argv) argv_xflags = args; argc_xflags = nitems(args) - 1; } - return intxflags(ifname, ifs, argc_xflags, argv_xflags); + return intxflags(argc_xflags, argv_xflags, ifname, ifs); } memset(&ip, 0, sizeof(ip)); @@ -1586,13 +1600,21 @@ ipv6ll_db_store(struct sockaddr_in6 *sin6, struct sock * addr/port parsing lifted from sbin/ifconfig/ifconfig.c */ int -intpflow(char *ifname, int ifs, int argc, char **argv) +intpflow(int argc, char **argv, ...) { struct ifreq ifr; struct pflowreq preq; int set; const char *errmsg = NULL; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -1654,11 +1676,19 @@ intpflow(char *ifname, int ifs, int argc, char **argv) } int -intpatch(char *ifname, int ifs, int argc, char **argv) +intpatch(int argc, char **argv, ...) { int set; struct ifreq ifr; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -1693,12 +1723,20 @@ intpatch(char *ifname, int ifs, int argc, char **argv) } int -intmtu(char *ifname, int ifs, int argc, char **argv) +intmtu(int argc, char **argv, ...) { struct ifreq ifr; int set; const char *errmsg = NULL; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -1732,12 +1770,20 @@ intmtu(char *ifname, int ifs, int argc, char **argv) } int -intkeepalive(char *ifname, int ifs, int argc, char **argv) +intkeepalive(int argc, char **argv, ...) { struct ifkalivereq ikar; int set; const char *errmsg = NULL; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -1800,7 +1846,7 @@ static struct mplsc { /* from ifconfig.c */ int -intmpls(char *ifname, int ifs, int argc, char **argv) +intmpls(int argc, char **argv, ...) { int set; unsigned long cmd; @@ -1808,7 +1854,15 @@ intmpls(char *ifname, int ifs, int argc, char **argv) struct shim_hdr shim; struct mplsc *x; const char *errstr; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + bzero(&ifr, sizeof(ifr)); strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); @@ -1941,7 +1995,7 @@ pwe3usage(void) } int -intpwe3(char *ifname, int ifs, int argc, char **argv) +intpwe3(int argc, char **argv, ...) { int set, ch, error; unsigned long cmd; @@ -1953,6 +2007,14 @@ intpwe3(char *ifname, int ifs, int argc, char **argv) struct if_laddrreq req; struct addrinfo hints, *res; struct sockaddr_mpls *smpls = (struct sockaddr_mpls *)&req.dstaddr; + va_list ap; + char *ifname; + int ifs; + + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); bzero(&ifr, sizeof(ifr)); bzero(&req, sizeof(req)); @@ -2066,12 +2128,18 @@ intpwe3(char *ifname, int ifs, int argc, char **argv) } int -intdhcrelay(char *ifname, int ifs, int argc, char **argv) +intdhcrelay(int argc, char **argv, ...) { - char *cmd[] = { DHCRELAY, "-i", ifname, NULL, NULL }; + char *cmd[] = { DHCRELAY, "-i", NULL, NULL, NULL }; int set, alen; struct in_addr notused; + va_list ap; + char *ifname; + va_start(ap, argv); + ifname = va_arg(ap, char *); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -2135,14 +2203,22 @@ intdhcrelay(char *ifname, int ifs, int argc, char **ar } int -intmetric(char *ifname, int ifs, int argc, char **argv) +intmetric(int argc, char **argv, ...) { struct ifreq ifr; int set, max; unsigned long theioctl; char *type; const char *errmsg = NULL; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -2200,12 +2276,20 @@ intmetric(char *ifname, int ifs, int argc, char **argv } int -intllprio(char *ifname, int ifs, int argc, char **argv) +intllprio(int argc, char **argv, ...) { struct ifreq ifr; int set; const char *errmsg = NULL; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -2246,11 +2330,19 @@ intllprio(char *ifname, int ifs, int argc, char **argv } int -intgroup(char *ifname, int ifs, int argc, char **argv) +intgroup(int argc, char **argv, ...) { int set, i; struct ifgroupreq ifgr; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -2301,11 +2393,19 @@ intgroup(char *ifname, int ifs, int argc, char **argv) } int -intrtlabel(char *ifname, int ifs, int argc, char **argv) +intrtlabel(int argc, char **argv, ...) { int set; struct ifreq ifr; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -2343,12 +2443,20 @@ intrtlabel(char *ifname, int ifs, int argc, char **arg } int -intparent(char *ifname, int ifs, int argc, char **argv) +intparent(int argc, char **argv, ...) { int set, ret; unsigned long cmd; struct if_parent ifp; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -2399,10 +2507,18 @@ intparent(char *ifname, int ifs, int argc, char **argv } int -intflags(char *ifname, int ifs, int argc, char **argv) +intflags(int argc, char **argv, ...) { int set, value, flags, iftype; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -2510,10 +2626,18 @@ intaf(char *ifname, int ifs, int argc, char **argv) } int -intxflags(char *ifname, int ifs, int argc, char **argv) +intxflags(int argc, char **argv, ...) { int set, value, flags; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -2566,11 +2690,19 @@ intxflags(char *ifname, int ifs, int argc, char **argv } int -intlink(char *ifname, int ifs, int argc, char **argv) +intlink(int argc, char **argv, ...) { const char *errmsg = NULL; int set, i, flags, value = 0; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -2628,12 +2760,20 @@ intlink(char *ifname, int ifs, int argc, char **argv) } int -intnwid(char *ifname, int ifs, int argc, char **argv) +intnwid(int argc, char **argv, ...) { struct ieee80211_nwid nwid; struct ifreq ifr; int set, len; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -2671,12 +2811,20 @@ intnwid(char *ifname, int ifs, int argc, char **argv) } int -intpowersave(char *ifname, int ifs, int argc, char **argv) +intpowersave(int argc, char **argv, ...) { const char *errmsg = NULL; struct ieee80211_power power; int set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -2722,14 +2870,23 @@ intpowersave(char *ifname, int ifs, int argc, char **a } int -intlladdr(char *ifname, int ifs, int argc, char **argv) +intlladdr(int argc, char **argv, ...) { StringList *hwdaddr; char *lladdr, llorig[sizeof("00:00:00:00:00:00") + 1]; struct ether_addr *addr; struct ifreq ifr; int set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + + if (NO_ARG(argv[0])) { argv++; argc--; @@ -2822,12 +2979,20 @@ intlladdr(char *ifname, int ifs, int argc, char **argv } int -intrdomain(char *ifname, int ifs, int argc, char **argv) +intrdomain(int argc, char **argv, ...) { int set, rdomain; const char *errmsg = NULL; struct ifreq ifr; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -2862,12 +3027,20 @@ intrdomain(char *ifname, int ifs, int argc, char **arg } int -intdesc(char *ifname, int ifs, int argc, char **argv) +intdesc(int argc, char **argv, ...) { int set; char desc[IFDESCRSIZE]; struct ifreq ifr; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -2898,11 +3071,19 @@ intdesc(char *ifname, int ifs, int argc, char **argv) } int -intvnetflowid(char *ifname, int ifs, int argc, char **argv) +intvnetflowid(int argc, char **argv, ...) { int set; struct ifreq ifr; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argv++; @@ -3057,7 +3238,7 @@ show_vlan(int start_vnetid, int end_vnetid) } int -show_vlans(int argc, char **argv) +show_vlans(int argc, char **argv, ...) { long long start_vnetid = -1, end_vnetid = -1; const char *errstr; blob - b0998f7a401a66c8e179f8731398ea7bc21832c4 blob + a899258cb7f4da6759becc236358b0b715f46fc0 --- kroute.c +++ kroute.c @@ -280,7 +280,7 @@ _monitor_sig(int signo) } int -monitor(int argc, char **argv) +monitor(int argc, char **argv, ...) { int s, m, n, saveverbose; fd_set fds; blob - bf86ca8dabe0a781147f326896a21743a594b1e5 blob + 8f17b0cddf04cf5733c0c39535a23a9be92ec90d --- media.c +++ media.c @@ -33,6 +33,7 @@ */ #include +#include #include #include #include @@ -73,11 +74,19 @@ const struct ifmedia_description ifm_option_descriptio IFM_OPTION_DESCRIPTIONS; int -intmedia(char *ifname, int ifs, int argc, char **argv) +intmedia(int argc, char **argv, ...) { const char *errmsg = NULL; uint64_t set, media_current, type, subtype, inst; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -137,9 +146,17 @@ intmedia(char *ifname, int ifs, int argc, char **argv) } int -intmediaopt(char *ifname, int ifs, int argc, char **argv) +intmediaopt(int argc, char **argv, ...) { int set, media_current, mediaopt; + va_list ap; + char *ifname; + int ifs; + + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); if (NO_ARG(argv[0])) { set = 0; blob - 917e6bfb84da3ced26912f497b3d97ed04be002e blob + bdf7b2652df8577e557a90f07ce6fdc0d8bb1469 --- nameserver.c +++ nameserver.c @@ -74,7 +74,7 @@ resolvd_is_disabled(void) } int -nameserverset(int argc, char *argv[]) +nameserverset(int argc, char *argv[], ...) { int i, set = 1; blob - fb50b6294674355067d69e1886d059c6cfa3e2a1 blob + 90e0c8505715583ce7d0d867d044903b377380bf --- ndp.c +++ ndp.c @@ -117,7 +117,7 @@ char ifix_buf[IFNAMSIZ]; /* if_indextoname() */ static int getsocket(void); int parse_host(const char *, struct sockaddr_in6 *); -int ndpset(int, char **); +int ndpset(int, char **, ...); void ndpget(const char *); int ndpdelete(const char *); void ndpdump(struct sockaddr_in6 *, int); @@ -182,7 +182,7 @@ static int flags, found_entry; * Set an individual neighbor cache entry */ int -ndpset(int argc, char *argv[]) +ndpset(int argc, char *argv[], ...) { struct sockaddr_in6 *sin = &sin_m; struct sockaddr_dl *sdl; blob - 6eb375fbb75af8281fcd5619915fb64f2123f566 blob + eb3264d77e21a24a773e0964e5b2851cbd15accf --- passwd.c +++ passwd.c @@ -298,7 +298,7 @@ write_line(const char *line, size_t len, int fd) } int -enable(int argc, char **argv) +enable(int argc, char **argv, ...) { char *doas_argv[] = { NSHDOAS_PATH_STR, NULL, NULL, NULL @@ -362,7 +362,7 @@ enable(int argc, char **argv) return 0; else if (exit_code == NSH_REXEC_EXIT_CODE_QUIT) { /* The child exited due to a 'quit' command. */ - quit(); + quit(0, NULL); } else { printf("%% Privileged mode child process exited " "with error code %d\n", exit_code); blob - 78caaff6a1e2178bd9294072c088bbfb0ed83794 blob + 701590813efe3b6b89242e334d5e3835205cdcc0 --- pfsync.c +++ pfsync.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -34,12 +35,20 @@ #define PFSYNC_MAXUPDATES 128 int -intsyncdev(char *ifname, int ifs, int argc, char **argv) +intsyncdev(int argc, char **argv, ...) { struct ifreq ifr; struct pfsyncreq preq; int set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -96,13 +105,21 @@ intsyncdev(char *ifname, int ifs, int argc, char **arg } int -intsyncpeer(char *ifname, int ifs, int argc, char **argv) +intsyncpeer(int argc, char **argv, ...) { struct ifreq ifr; struct pfsyncreq preq; struct addrinfo hints, *peerres; int set, ecode; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -169,14 +186,22 @@ intsyncpeer(char *ifname, int ifs, int argc, char **ar } int -intmaxupd(char *ifname, int ifs, int argc, char **argv) +intmaxupd(int argc, char **argv, ...) { struct ifreq ifr; struct pfsyncreq preq; u_int32_t val; int set; const char *errmsg = NULL; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; blob - 8ad52dbef656a881995d75842c2fbdd9477289e6 blob + b82bb9d0657687e27334efed268df533ffe44af2 --- ppp.c +++ ppp.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -68,12 +69,20 @@ peerusage(void) /* auth proto, auth name, auth key, peer proto, peer name, peer key, peer flag */ int -intsppp(char *ifname, int ifs, int argc, char **argv) +intsppp(int argc, char **argv, ...) { struct sauthreq spa; struct ifreq ifr; int set, ch, i, cmd = 0; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + /* command options for 'auth' */ static struct nopts authopts[] = { { "proto", req_arg, 'p' }, @@ -313,10 +322,18 @@ pppoe_ipcp(char *ifname, int ifs, int set) /* pppoe dev, pppoe svc, pppoe ac */ int -intpppoe(char *ifname, int ifs, int argc, char **argv) +intpppoe(int argc, char **argv, ...) { struct pppoediscparms parms; int set, ch; + va_list ap; + char *ifname; + int ifs; + + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); /* command options for 'auth' */ static struct nopts authopts[] = { blob - a558cf19abc8bd22c365719553f577e6a42ebe5b blob + 25a10ba699b50d385b2291b3bbdcb6506995eaa7 --- route.c +++ route.c @@ -44,7 +44,7 @@ routeusage(void) } int -route(int argc, char **argv) +route(int argc, char **argv, ...) { u_short cmd = 0; u_int32_t net; blob - b987820def6eb3b7bc042da908ed72a34ef6a2fb blob + 9d45212bcf2f3dfa4682063566612d2fc49d0f2b --- sysctl.c +++ sysctl.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -196,13 +197,21 @@ struct ipsysctl pipexsysctls[] = { }; int -ipsysctl(int set, char *cmd, char *arg, int type) +ipsysctl(int set, char **cmd, ...) { int32_t larg; const char *errmsg = NULL; struct ipsysctl *x; struct sysctltab *stab; + va_list ap; + char *arg; + int type; + va_start(ap, cmd); + arg = va_arg(ap, char *); + type = va_arg(ap, int); + va_end(ap); + for (stab = sysctls; stab-> name != NULL; stab++) if(stab->pf == type) break; @@ -211,13 +220,13 @@ ipsysctl(int set, char *cmd, char *arg, int type) return 0; } - x = (struct ipsysctl *) genget(cmd, (char **)stab->sysctl, + x = (struct ipsysctl *) genget(*cmd, (char **)stab->sysctl, sizeof(struct ipsysctl)); if (x == 0) { - printf("%% Invalid argument %s\n", cmd); + printf("%% Invalid argument %s\n", *cmd); return 0; } else if (Ambiguous(x)) { - printf("%% Ambiguous argument %s\n", cmd); + printf("%% Ambiguous argument %s\n", *cmd); return 0; } blob - 4be1b9877ac4ebf68133ff2f069e13c859483fce blob + cbd7d80d0d901cb6bd60ef617b0101ebbb4d1b2b --- trunk.c +++ trunk.c @@ -26,6 +26,7 @@ */ #include +#include #include #include #include @@ -41,11 +42,19 @@ struct trunk_protos tpr[] = TRUNK_PROTOS; int -inttrunkport(char *ifname, int ifs, int argc, char **argv) +inttrunkport(int argc, char **argv, ...) { struct trunk_reqport rp; int set, i; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -114,11 +123,19 @@ inttrunkport(char *ifname, int ifs, int argc, char **a } int -inttrunkproto(char *ifname, int ifs, int argc, char **argv) +inttrunkproto(int argc, char **argv, ...) { int i, set; struct trunk_reqall ra; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; blob - 28eb4eaf23744f51e0161fc8e15780d5399e18a7 blob + 92c3754a7128122d5910b0e9e7c4ecc09fede438 --- tunnel.c +++ tunnel.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -36,10 +37,18 @@ static struct nopts tunnelopts[] = { }; int -intvnetid(char *ifname, int ifs, int argc, char **argv) +intvnetid(int argc, char **argv, ...) { int set; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; @@ -70,12 +79,20 @@ tunnelusage(void) } int -inttunnel(char *ifname, int ifs, int argc, char **argv) +inttunnel(int argc, char **argv, ...) { int set, ch, df = 0, ecn = 0; char *src = NULL, *dst = NULL, *rdomain = NULL, *ttl = NULL; char *dstip = NULL, *dstport = NULL; char buf[MAXHOSTNAMELEN+sizeof (":65535")]; + va_list ap; + char *ifname; + int ifs; + + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); if (NO_ARG(argv[0])) { set = 0; blob - cc62569dfd91f9445faca4d1c7972115be691eb7 blob + b3b15a1e6d7b72d5b5b8d9122d176ecf8c337626 --- umb.c +++ umb.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -510,11 +511,19 @@ static struct umbc { }; int -intumb(char *ifname, int ifs, int argc, char **argv) +intumb(int argc, char **argv, ...) { int set; struct umbc *x; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + if (NO_ARG(argv[0])) { set = 0; argc--; blob - 775ab1144d79be492896a8ba89e5d1001a7eeffc blob + f1c8de09bf9cb77daed9fe24ad90f6b1a1fe3de1 --- version.c +++ version.c @@ -27,7 +27,7 @@ #include "externs.h" int -version(int argc, char **argv) +version(int argc, char **argv, ...) { char cpubuf[1024]; char kernver[1024]; blob - aa7eec25d1c7260b8c8851d7fd692918333b0e50 blob + e4a63e09d48fb5d27208253fa13f52076ba07538 --- wg.c +++ wg.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -454,11 +455,19 @@ static struct wgc { }; int -intwg(char *ifname, int ifs, int argc, char **argv) +intwg(int argc, char **argv, ...) { int set; struct wgc *x; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + /* freshen up at the NULL basin */ wgdata.wgd_size = 0; wgdata.wgd_interface = wg_interface = NULL; @@ -557,10 +566,18 @@ wgpeerusage(void) } int -intwgpeer(char *ifname, int ifs, int argc, char **argv) +intwgpeer(int argc, char **argv, ...) { int set, ch; + va_list ap; + char *ifname; + int ifs; + va_start(ap, argv); + ifname = va_arg(ap, char *); + ifs = va_arg(ap, int); + va_end(ap); + /* command options for 'wgpeer' */ static struct nopts wgpeeropts[] = { { "endpoint", req_arg, 'e' }, blob - d74d306eee9958bca13ea4f91638fa7061ba62bd blob + 7300133a8d8e3171818a686e2f5fd664c406e1b1 --- who.c +++ who.c @@ -46,7 +46,7 @@ void output(struct utmp *); void output_labels(void); int -who(int argc, char **argv) +who(int argc, char **argv, ...) { FILE *utmp; struct utmp who;