Am 27.07.24 um 16:14 schrieb Francesco Poli:
P.S.: If anyone is curious about what I do not fully understand, here's my naive reasoning: the strtoull(3) man page states that strtoull returns an 'unsigned long long' (which is guaranteed to be at least 64 bit wide, but could be wider than 64 bit on some architectures, in principle...); but the returned value is assigned to a variable of type 'uint64_t' (which is always exactly 64 bit wide); what happens on an (existing or hypothetical) architecture where the width of 'unsigned long long' is greater than 64 bit? is the returned value converted from 'unsigned long long' to 'uint64_t'? if this is the case, how can login_t ever be equal to ULLONG_MAX, on architectures where ULLONG_MAX is strictly greater than UINT64_MAX ?
Just to be sure - currently it uses "unsigned long strtoul(...)". This means on i386 it returns just a 32-bit integer. The fix is to use "unsigned long long strtoull(...)" which returns also on i386 a 64-bit integer. And it looks like there is already 0.13 packaged and nearly in unstable ...