On Mon, May 22, 2023 at 12:56:31PM +0200, Hanna Czenczek wrote: > > > > +static void test_qemu_strtod_erange_junk(void) > > > > +{ > > > > + const char *str; > > > > + const char *endptr; > > > > + int err; > > > > + double res; > > > > + > > > > + /* EINVAL has priority over ERANGE */ > > > By being placed here, this comment confused me a bit, because the first > > > case > > > does return ERANGE. So I’d prefer it above the second case, where we > > > actually expect EINVAL, but understand that’s a personal preference. > > > (Same > > > for the _finite_ variant) > > The test is what happens when both conditions apply. For > > qemu_strtod("1e-999junk", &endptr), only ERANGE applies (because > > "junk" is returned in endptr); it is not until > > qemu_strtod("1e-999junk", NULL) where EINVAL is also possible > > (trailing junk takes precedence over underflow). > > Yep; it’s just that because the comment is directly above one test case, I > assumed it applied to just that case, and was looking for the EINVAL there. > Only then I realized that EINVAL won’t occur there, and the comment instead > points out the difference between the two cases there are. > > > For qemu_strtosz(), > > I made it a bit more obvious by writing a helper function that shows > > both errno values in a single line, rather than spreading out the > > boilerplate over multiple lines. > > > > Should I do a similar helper function for qemu_strtod[_finite] in v3? > > I mean, from my perspective, all I can see is that it would make reviewing > v3 more tedious…
Okay, v3 will NOT include a helper function for strtoi or strtod (but the helper already in place for strtosz remains). -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org