On Wed, 12 Jul 2006 13:25:52 +0900
Tetsuo Takata <[EMAIL PROTECTED]> wrote:

> Hi,
> 
> 
> I found this in drivers/net/bonding/bond_main.c.
> > /* not complete check, but should be good enough to
> >     catch mistakes */
> 
> I made a patch which I believe is little bit better than this,
> I hope...
> 
> 
> best regards,
> 
> ---
> Signed-off-by: Tetsuo Takata <[EMAIL PROTECTED]>
> 
> --- linux-2.6.17.3/drivers/net/bonding/bond_main.c    2006-07-01 
> 02:37:38.000000000 +0900
> +++ linux-2.6.17.3-bonding-ipcheck/drivers/net/bonding/bond_main.c    
> 2006-07-12 09:51:12.000000000 +0900
> @@ -4455,7 +4455,113 @@ static int bond_check_params(struct bond
>            arp_ip_count++) {
>               /* not complete check, but should be good enough to
>                  catch mistakes */
> -             if (!isdigit(arp_ip_target[arp_ip_count][0])) {
> +             int i, notip = 0;
> +             char *cp;
> +
> +             cp = arp_ip_target[arp_ip_count];
> +
> +             /* notip's number is the error code for debug purpose */
> +             do {
> +                     if (cp == NULL) {
> +                             notip = 1;
> +                             break;
> +                     }
> +
> +                     /* check digit */
> +                     for (i = 0; isdigit(*cp); i++) {
> +                             if ((i < 0) || (i >= 3)) {
> +                                     notip = 2;
> +                                     break;
> +                             }
> +                             cp++;
> +                     }
> +                     if (notip)
> +                             break;
> +
> +                     if (i == 0) {
> +                             notip = 3;
> +                             break;
> +                     }
> +
> +                     /* check delimiter */
> +                     if (*cp != '.') {
> +                             notip = 4;
> +                             break;
> +                     }
> +                     cp++;
> +
> +                     /* check digit */
> +                     for (i = 0; isdigit(*cp); i++) {
> +                             if ((i < 0) || (i >= 3)) {
> +                                     notip = 5;
> +                                     break;
> +                             }
> +                             cp++;
> +                     }
> +                     if (notip)
> +                             break;
> +
> +                     if (i == 0) {
> +                             notip = 6;
> +                             break;
> +                     }
> +
> +                     /* check delimiter */
> +                     if (*cp != '.') {
> +                             notip = 7;
> +                             break;
> +                     }
> +                     cp++;
> +
> +                     /* check digit */
> +                     for (i = 0; isdigit(*cp); i++) {
> +                             if ((i < 0) || (i >= 3)) {
> +                                     notip = 8;
> +                                     break;
> +                             }
> +                             cp++;
> +                     }
> +                     if (notip)
> +                             break;
> +
> +                     if (i == 0) {
> +                             notip = 9;
> +                             break;
> +                     }
> +
> +                     /* check delimiter */
> +                     if (*cp != '.') {
> +                             notip = 10;
> +                             break;
> +                     }
> +                     cp++;
> +
> +                     /* check digit */
> +                     for (i = 0; isdigit(*cp); i++) {
> +                             if ((i < 0) || (i >= 3)) {
> +                                     notip = 11;
> +                                     break;
> +                             }
> +                             cp++;
> +                     }
> +                     if (notip)
> +                             break;
> +
> +                     if (i == 0) {
> +                             notip = 12;
> +                             break;
> +                     }
> +
> +
> +                     /* check EOS */
> +                     if (*cp != '\0') {
> +                             notip = 13;
> +                             break;
> +                     }
> +
> +             } while(0);
> +
> +             if (notip) {
>                       printk(KERN_WARNING DRV_NAME
>                              ": Warning: bad arp_ip_target module parameter "
>                              "(%s), ARP monitoring will not be performed\n",
> 
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Why not just use sscanf?

-- 
If one would give me six lines written by the hand of the most honest
man, I would find something in them to have him hanged. -- Cardinal Richlieu
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to