On Sun, Mar 20, 2022 at 3:11 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > > Even after reading the man page for strtol, it's not clear to me that > > this is needed. That page represents checking *endptr != '\0' as > > sufficient to tell whether an error occurred. > > I'm not sure whose man page you looked at, but the POSIX standard [1] > has a pretty clear opinion about this: > > Since 0, {LONG_MIN} or {LLONG_MIN}, and {LONG_MAX} or {LLONG_MAX} are > returned on error and are also valid returns on success, an > application wishing to check for error situations should set errno to > 0, then call strtol() or strtoll(), then check errno. > > Checking *endptr != '\0' is for detecting whether there is trailing > garbage after the number; which may be an error case or not as you > choose, but it's a different matter.
I think I'm guilty of verbal inexactitude here but not bad coding. Checking for *endptr != '\0', as I did, is not sufficient to detect "whether an error occurred," as I alleged. But, in the part of my response you didn't quote, I believe I made it clear that I only need to detect garbage, not out-of-range values. And I think *endptr != '\0' will do that. -- Robert Haas EDB: http://www.enterprisedb.com