On 27/04/2022 17:19, Junio C Hamano wrote:
Carlo Arenas <carenas@xxxxxxxxx> writes:
The standard is silent on what happens to error when the value is out of
range.
Actually the standard is is very clear what happens to endptr (no,
don't call it "error", that is not the point of the parameter).
>
A pointer to the final string shall be stored in the object
pointed to by endptr, provided that endptr is not a null
pointer.
where "final string" has a precise definition much earlier:
First, they decompose the input string into three parts:
1. An initial, possibly empty, sequence of white-space
characters (as specified by isspace())
2. A subject sequence interpreted as an integer represented in
some radix determined by the value of base
3. A final string of one or more unrecognized characters,
including the terminating null byte of the input string.
Then they shall attempt to convert the subject sequence to an
integer, and return the result.
So, leading whitespace is stripped, then "subject sequence" that is
the sequence of digits (with optional +/- sign) to be turned into a
long is recognised, and what remains is the "final string". endptr
is made to point at that "final string", and it does not matter what
kind of value the interpretation of "subject sequence" yields.
Oh I think I misunderstood when I read the standard this morning. Just
to check I do understand now, in the case of overflow entptr points to
the final string (i.e. to the character following the last digit) even
though the "subject sequence" cannot be successfully converted?
Thanks
Phillip