On Thu, Sep 06, 2007, Andreas Oberritter wrote:
> 
> Quoting from the manpage of strtol():
> 
> The strtol() function returns the result of the conversion, unless the
> value would underflow or overflow.  If an  underflow  occurs,  strtol()
> returns  LONG_MIN.   If  an overflow occurs, strtol() returns LONG_MAX.
> In both cases, errno is set to ERANGE.  Precisely the  same  holds  for
> strtoll()  (with  LLONG_MIN  and  LLONG_MAX  instead  of  LONG_MIN  and
> LONG_MAX).

You should've read on:

 NOTES
        Since  strtol()  can  legitimately  return  0, LONG_MAX, or
        LONG_MIN (LLONG_MAX or LLONG_MIN for str‐ toll()) on both
        success and failure, the calling program should set errno to 0
        before the  call,  and then determine if an error occurred by
        checking whether errno has a non-zero value after the call.

I think your patch is buggy, because errno is not guaranteed
to be reset to zero after successful calls (see the errno manpage).


Regards,
Johannes


> diff -r 1923f74d97ae util/szap/azap.c
> --- a/util/szap/azap.c        Wed Jun 27 19:46:43 2007 +0200
> +++ b/util/szap/azap.c        Thu Sep 06 02:47:52 2007 +0200
> @@ -104,6 +104,8 @@ int parse_int(int fd, int *val)
>       };
>  
>       *val = strtol(number, NULL, 10);
> +     if (errno == ERANGE)
> +             return -4;
>  
>       return 0;
>  }
> diff -r 1923f74d97ae util/szap/tzap.c
> --- a/util/szap/tzap.c        Wed Jun 27 19:46:43 2007 +0200
> +++ b/util/szap/tzap.c        Thu Sep 06 02:47:52 2007 +0200
> @@ -180,6 +180,8 @@ int parse_int(int fd, int *val)
>       };
>  
>       *val = strtol(number, NULL, 10);
> +     if (errno == ERANGE)
> +             return -4;
>  
>       return 0;
>  }

> _______________________________________________
> linux-dvb mailing list
> linux-dvb@linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

Reply via email to