[linux-dvb] Asys P7131 Hybrid: DVB out of range
Johannes Stezenbach
js at linuxtv.org
Thu Sep 6 14:39:18 CEST 2007
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 at linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
More information about the linux-dvb
mailing list