On Mon, Feb 5, 2018 at 10:44 AM, walter harms <[email protected]> wrote: > > Am 05.02.2018 02:47, schrieb Giuseppe Bilotta: >> { >> double sx, sy; >> + char junk; >> if (!config_output) argerr ("%s must be used after --output\n", >> argv[i]); >> if (++i >= argc) argerr ("%s requires an argument\n", argv[i-1]); >> - if (sscanf (argv[i], "%lfx%lf", &sx, &sy) != 2) >> + if (sscanf (argv[i], "%lfx%lf%c", &sx, &sy, &junk) != 2) >> { >> - if (sscanf (argv[i], "%lf", &sx) != 1) >> + if (sscanf (argv[i], "%lf%c", &sx, &junk) != 1) >> argerr ("failed to parse '%s' as a scaling factor\n", >> argv[i]); >> sy = sx; >> } > > can the scanf be converted to strtod ? there you get an endpointer by default.
I'm not a big fan of strtod because with it it's impossible to know if a conversion actually happened. xrandr --scale ' ' would actually be accepted (resulting in a scale value of 0), while the scanf catches it. For the same reason I use two sscanf instead of a single one (because that wouldn't be able to catch something like xrandr --scale 1j). Of course there's also to be said that we could reject a scale factor of 0, regardless of whether it comes from a correct parsing of the string '0.0' or from the parse of an empty string (but of course then we couldn't customize the error message to differentiate between “incorrect parse” and “value out of range”). -- Giuseppe "Oblomov" Bilotta _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
