X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Foptions.c;h=6c146a04c28ecb57cc47218296e60f5ae6f4fb06;hb=274ce53d26d1f6fb0a0a963af76162c9a1f19bba;hp=536973c0db67d55d1622a9b0fa107f98d7c0b88e;hpb=b3b832e23dea2466a4235bede35d27c580c4366e;p=ppp.git diff --git a/pppd/options.c b/pppd/options.c index 536973c..6c146a0 100644 --- a/pppd/options.c +++ b/pppd/options.c @@ -18,7 +18,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: options.c,v 1.13 1994/09/01 00:13:16 paulus Exp $"; +static char rcsid[] = "$Id: options.c,v 1.15 1994/09/16 02:34:52 paulus Exp $"; #endif #include @@ -118,6 +118,7 @@ static int setdisconnector __ARGS((char **)); static int setdomain __ARGS((char **)); static int setnetmask __ARGS((char **)); static int setcrtscts __ARGS((void)); +static int setnocrtscts __ARGS((void)); static int setxonxoff __ARGS((void)); static int setnodetach __ARGS((void)); static int setmodem __ARGS((void)); @@ -189,8 +190,8 @@ static struct cmd { {"connect", 1, setconnector}, /* A program to set up a connection */ {"disconnect", 1, setdisconnector}, /* program to disconnect serial dev. */ {"crtscts", 0, setcrtscts}, /* set h/w flow control */ + {"-crtscts", 0, setnocrtscts}, /* clear h/w flow control */ {"xonxoff", 0, setxonxoff}, /* set s/w flow control */ - {"-crtscts", 0, setxonxoff}, /* another name for xonxoff */ {"debug", 0, setdebug}, /* Increase debugging level */ {"kdebug", 1, setkdebug}, /* Enable kernel-level debugging */ {"domain", 1, setdomain}, /* Add given domain name to hostname*/ @@ -1249,6 +1250,13 @@ setcrtscts() return (1); } +static int +setnocrtscts() +{ + crtscts = -1; + return (1); +} + static int setxonxoff() { @@ -1458,16 +1466,41 @@ static int setchapintv(argv) static int setbsdcomp(argv) char **argv; { - int bits; + int rbits, abits; + char *str, *endp; - if (!int_option(*argv, &bits)) + str = *argv; + abits = rbits = strtol(str, &endp, 0); + if (endp != str && *endp == ',') { + str = endp + 1; + abits = strtol(str, &endp, 0); + } + if (*endp != 0 || endp == str) { + fprintf(stderr, "%s: invalid argument format for bsdcomp option\n", + progname); return 0; - ccp_wantoptions[0].bsd_compress = 1; - ccp_wantoptions[0].bsd_bits = bits; + } + if (rbits != 0 && (rbits < MIN_BSD_BITS || rbits > MAX_BSD_BITS) + || abits != 0 && (abits < MIN_BSD_BITS || abits > MAX_BSD_BITS)) { + fprintf(stderr, "%s: bsdcomp option values must be 0 or %d .. %d\n", + progname, MIN_BSD_BITS, MAX_BSD_BITS); + return 0; + } + if (rbits > 0) { + ccp_wantoptions[0].bsd_compress = 1; + ccp_wantoptions[0].bsd_bits = rbits; + } else + ccp_wantoptions[0].bsd_compress = 0; + if (abits > 0) { + ccp_allowoptions[0].bsd_compress = 1; + ccp_allowoptions[0].bsd_bits = abits; + } else + ccp_allowoptions[0].bsd_compress = 0; return 1; } static int setnobsdcomp() { + ccp_wantoptions[0].bsd_compress = 0; ccp_allowoptions[0].bsd_compress = 0; }