X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/820ebe3b54a21cfb8d42e43c567d952415c1d05d..055817455466c8eb60392f30bb7c689763962e17:/cmdline.c?ds=sidebyside diff --git a/cmdline.c b/cmdline.c index eb98f606..d306959c 100644 --- a/cmdline.c +++ b/cmdline.c @@ -51,6 +51,14 @@ static void cmdline_save_param(char *p, char *value, int pri) saves[pri].nsaved++; } +void cmdline_cleanup(void) +{ + int pri; + + for (pri = 0; pri < NPRIORITIES; pri++) + sfree(saves[pri].params); +} + #define SAVEABLE(pri) do { \ if (need_save) { cmdline_save_param(p, value, pri); return ret; } \ } while (0) @@ -103,6 +111,12 @@ static int cmdline_check_unavailable(int flag, char *p) * Process a standard command-line parameter. `p' is the parameter * in question; `value' is the subsequent element of argv, which * may or may not be required as an operand to the parameter. + * If `need_save' is 1, arguments which need to be saved as + * described at this top of this file are, for later execution; + * if 0, they are processed normally. (-1 is a special value used + * by pterm to count arguments for a preliminary pass through the + * argument list; it causes immediate return with an appropriate + * value with no action taken.) * Return value is 2 if both arguments were used; 1 if only p was * used; 0 if the parameter wasn't one we recognised; -2 if it * should have been 2 but value was NULL. @@ -123,6 +137,7 @@ int cmdline_process_param(char *p, char *value, int need_save, Config *cfg) /* This parameter must be processed immediately rather than being * saved. */ do_defaults(value, cfg); + loaded_session = TRUE; return 2; } if (!strcmp(p, "-ssh")) { @@ -299,6 +314,13 @@ int cmdline_process_param(char *p, char *value, int need_save, Config *cfg) cfg->nopty = 1; } + if (!strcmp(p, "-N")) { + RETURN(1); + UNAVAILABLE_IN(TOOLTYPE_FILETRANSFER | TOOLTYPE_NONNETWORK); + SAVEABLE(0); + cfg->ssh_no_shell = 1; + } + if (!strcmp(p, "-C")) { RETURN(1); UNAVAILABLE_IN(TOOLTYPE_NONNETWORK); @@ -326,6 +348,17 @@ int cmdline_process_param(char *p, char *value, int need_save, Config *cfg) cfg->keyfile = filename_from_str(value); } + if (!strcmp(p, "-4") || !strcmp(p, "-ipv4")) { + RETURN(1); + SAVEABLE(1); + cfg->addressfamily = ADDRTYPE_IPV4; + } + if (!strcmp(p, "-6") || !strcmp(p, "-ipv6")) { + RETURN(1); + SAVEABLE(1); + cfg->addressfamily = ADDRTYPE_IPV6; + } + return ret; /* unrecognised */ }