From b5dc0fa7109a2f81b6c5fdd4c6f2b91e8154e112 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Sat, 8 Sep 2012 16:59:25 -0400 Subject: [PATCH] add togglevar for options. --- usr.bin/ftp/cmds.c | 52 +++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/usr.bin/ftp/cmds.c b/usr.bin/ftp/cmds.c index 988e267..435aa68 100644 --- a/usr.bin/ftp/cmds.c +++ b/usr.bin/ftp/cmds.c @@ -46,6 +46,26 @@ extern char reply_string[]; char *mname; jmp_buf jabort; +/* + * Toggle a variable + */ +int togglevar(int argc, char ** argv, int *var, const char *mesg) +{ + if (argc < 2) { + *var = !*var; + } else if (argc == 2 && strcasecmp(argv[1], "on") == 0) { + *var = 1; + } else if (argc == 2 && strcasecmp(argv[1], "off") == 0) { + *var = 0; + } else { + printf("usage: %s [ on | off ]\n", argv[0]); + return (-1); + } + if (mesg) + printf("%s %s.\n", mesg, onoff(*var)); + return (*var); +} + /* * `Another' gets another argument, and stores the new argc and argv. * It reverts to the top level (via main.c's intr()) on EOF/error. @@ -830,9 +850,7 @@ int i; /*VARARGS*/ void setbell (int argc, char **argv) { - bell = !bell; - printf("Bell mode %s.\n", onoff(bell)); - code = bell; + code = togglevar(argc, argv, &bell, "Bell mode"); } /* @@ -841,9 +859,7 @@ void setbell (int argc, char **argv) /*VARARGS*/ void settrace (int argc, char **argv) { - trace = !trace; - printf("Packet tracing %s.\n", onoff(trace)); - code = trace; + code = togglevar(argc, argv, &trace, "Packet tracing"); } /* @@ -866,9 +882,7 @@ void sethash (int argc, char **argv) /*VARARGS*/ void setverbose (int argc, char **argv) { - verbose = !verbose; - printf("Verbose mode %s.\n", onoff(verbose)); - code = verbose; + code = togglevar(argc, argv, &verbose, "Verbose mode"); } /* @@ -877,9 +891,7 @@ void setverbose (int argc, char **argv) /*VARARGS*/ void setport (int argc, char **argv) { - sendport = !sendport; - printf("Use of PORT cmds %s.\n", onoff(sendport)); - code = sendport; + code = togglevar(argc, argv, &sendport, "Use of PORT cmds"); } /* @@ -889,9 +901,7 @@ void setport (int argc, char **argv) /*VARARGS*/ void setprompt (int argc, char **argv) { - interactive = !interactive; - printf("Interactive mode %s.\n", onoff(interactive)); - code = interactive; + code = togglevar(argc, argv, &interactive, "Interactive mode"); } /* @@ -901,9 +911,7 @@ void setprompt (int argc, char **argv) /*VARARGS*/ void setglob (int argc, char **argv) { - doglob = !doglob; - printf("Globbing %s.\n", onoff(doglob)); - code = doglob; + code = togglevar(argc, argv, &doglob, "Globbing"); } /* @@ -1846,16 +1854,12 @@ LOOP: void setsunique (int argc, char **argv) { - sunique = !sunique; - printf("Store unique %s.\n", onoff(sunique)); - code = sunique; + code = togglevar(argc, argv, &sunique, "Store unique"); } void setrunique (int argc, char **argv) { - runique = !runique; - printf("Receive unique %s.\n", onoff(runique)); - code = runique; + code = togglevar(argc, argv, &runique, "Receive unique"); } /* change directory to perent directory */