On April 27, 2022 2:12 PM, Carlo Arenas wrote: >On Wed, Apr 27, 2022 at 11:06 AM <rsbecker@xxxxxxxxxxxxx> wrote: >> Results on NonStop: strtol("123456789012345678", &endptr, 10) returns >4294967295 and *endptr == '\0' just beyond the last 8. > >Thanks and errno == ERANGE as POSIX requires, right?, the code >(untested) I was planning to use instead looks like : > >static inline void extract_id_from_env(const char *env, uid_t *id) { > const char *real_uid = getenv(env); > > /* discard any empty values */ > if (real_uid && *real_uid) { > unsigned long extracted_id; > int saved_errno = errno; > > errno = 0; > extracted_id = strtoul(real_uid, NULL, 10); > if (!errno) > *id = (uid_t)extracted_id; > errno = saved_errno; > } > return 0; >} errno = 4034 (Value out of range), which is the ERANGE #define. --Randall