On Mon, Apr 15, 2013 at 9:29 PM, <scott.lovenberg@xxxxxxxxx> wrote: > > From: Scott Lovenberg <scott.lovenberg@xxxxxxxxx> > > This is a respin of the last patch that returns EX_USAGE rather than OPT_ERROR as per Jeff's suggestion. > > Signed-off-by: Scott Lovenberg <scott.lovenberg@xxxxxxxxx> > --- > AUTHORS | 1 + > mount.cifs.c | 62 ++++++++++++++++++++++++++++++++++++++++++---------------- > 2 files changed, 46 insertions(+), 17 deletions(-) > > diff --git a/AUTHORS b/AUTHORS > index 2807079..081c2fe 100644 > --- a/AUTHORS > +++ b/AUTHORS > @@ -5,5 +5,6 @@ Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> > Suresh Jayaraman <sjayaraman@xxxxxxx> > Pavel Shilovsky <piastry@xxxxxxxxxxx> > Igor Druzhinin <jaxbrigs@xxxxxxxxx> > +Scott Lovenberg <scott.lovenberg@xxxxxxxxx> > > ...and others. > diff --git a/mount.cifs.c b/mount.cifs.c > index 3b2b89e..561517b 100644 > --- a/mount.cifs.c > +++ b/mount.cifs.c > @@ -751,6 +751,47 @@ static int parse_opt_token(const char *token) > return OPT_ERROR; > } > > +/* > + Extract an ipv4 or ipv6 address and put it into parsed_info. > + Returns 0 on success. > +*/ > +static int parse_ip(char *value, struct parsed_mount_info *parsed_info) > +{ > + char *closingBracket = NULL; > + > + if (!value || !*value) { > + fprintf(stderr, "target ip address argument missing\n"); > + return EX_USAGE; > + } > + > + /* check for ipv6 in brackets */ > + if (value[0] == '[') { > + value++; > + /* temporarily null the closing bracket */ > + closingBracket = strchr(value, ']'); > + if (closingBracket) > + *closingBracket = '\0'; > + } > + > + /* check length of address */ > + if (strnlen(value, MAX_ADDRESS_LEN + 1) > MAX_ADDRESS_LEN) { > + fprintf(stderr, "ip address too long\n"); > + if (closingBracket) > + *closingBracket = ']'; > + return EX_USAGE; > + } > + > + strcpy(parsed_info->addrlist, value); > + if (parsed_info->verboseflag) > + fprintf(stderr, "ip address %s override specified\n", value); > + > + /* put back closing bracket */ > + if (closingBracket) > + *closingBracket = ']'; > + > + return 0; > +} > + > static int > parse_options(const char *data, struct parsed_mount_info *parsed_info) > { > @@ -861,23 +902,10 @@ parse_options(const char *data, struct parsed_mount_info *parsed_info) > break; > > case OPT_IP: > - if (!value || !*value) { > - fprintf(stderr, > - "target ip address argument missing\n"); > - } else if (strnlen(value, MAX_ADDRESS_LEN) <= > - MAX_ADDRESS_LEN) { > - strcpy(parsed_info->addrlist, value); > - if (parsed_info->verboseflag) > - fprintf(stderr, > - "ip address %s override specified\n", > - value); > - goto nocopy; > - } else { > - fprintf(stderr, "ip address too long\n"); > - return EX_USAGE; > - > - } > - break; > + rc = parse_ip(value, parsed_info); > + if (rc) > + return rc; > + goto nocopy; > > /* unc || target || path */ > case OPT_UNC: > -- > 1.7.10.4 > Ping. Any comments? -- Peace and Blessings, -Scott. -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html