+ if (!strcmp(p, "-4") || !strcmp(p, "-ipv4")) {
+ RETURN(1);
+ SAVEABLE(1);
+ conf_set_int(conf, CONF_addressfamily, ADDRTYPE_IPV4);
+ }
+ if (!strcmp(p, "-6") || !strcmp(p, "-ipv6")) {
+ RETURN(1);
+ SAVEABLE(1);
+ conf_set_int(conf, CONF_addressfamily, ADDRTYPE_IPV6);
+ }
+ if (!strcmp(p, "-sercfg")) {
+ char* nextitem;
+ RETURN(2);
+ UNAVAILABLE_IN(TOOLTYPE_FILETRANSFER | TOOLTYPE_NONNETWORK);
+ SAVEABLE(1);
+ if (conf_get_int(conf, CONF_protocol) != PROT_SERIAL)
+ cmdline_error("the -sercfg option can only be used with the "
+ "serial protocol");
+ /* Value[0] contains one or more , separated values, like 19200,8,n,1,X */
+ nextitem = value;
+ while (nextitem[0] != '\0') {
+ int length, skip;
+ char *end = strchr(nextitem, ',');
+ if (!end) {
+ length = strlen(nextitem);
+ skip = 0;
+ } else {
+ length = end - nextitem;
+ nextitem[length] = '\0';
+ skip = 1;
+ }
+ if (length == 1) {
+ switch (*nextitem) {
+ case '1':
+ case '2':
+ conf_set_int(conf, CONF_serstopbits, 2 * (*nextitem-'0'));
+ break;
+
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ conf_set_int(conf, CONF_serdatabits, *nextitem-'0');
+ break;
+
+ case 'n':
+ conf_set_int(conf, CONF_serparity, SER_PAR_NONE);
+ break;
+ case 'o':
+ conf_set_int(conf, CONF_serparity, SER_PAR_ODD);
+ break;
+ case 'e':
+ conf_set_int(conf, CONF_serparity, SER_PAR_EVEN);
+ break;
+ case 'm':
+ conf_set_int(conf, CONF_serparity, SER_PAR_MARK);
+ break;
+ case 's':
+ conf_set_int(conf, CONF_serparity, SER_PAR_SPACE);
+ break;
+
+ case 'N':
+ conf_set_int(conf, CONF_serflow, SER_FLOW_NONE);
+ break;
+ case 'X':
+ conf_set_int(conf, CONF_serflow, SER_FLOW_XONXOFF);
+ break;
+ case 'R':
+ conf_set_int(conf, CONF_serflow, SER_FLOW_RTSCTS);
+ break;
+ case 'D':
+ conf_set_int(conf, CONF_serflow, SER_FLOW_DSRDTR);
+ break;
+
+ default:
+ cmdline_error("Unrecognised suboption \"-sercfg %c\"",
+ *nextitem);
+ }
+ } else if (length == 3 && !strncmp(nextitem,"1.5",3)) {
+ /* Messy special case */
+ conf_set_int(conf, CONF_serstopbits, 3);
+ } else {
+ int serspeed = atoi(nextitem);
+ if (serspeed != 0) {
+ conf_set_int(conf, CONF_serspeed, serspeed);
+ } else {
+ cmdline_error("Unrecognised suboption \"-sercfg %s\"",
+ nextitem);
+ }
+ }
+ nextitem += length + skip;
+ }
+ }