On Fri, 4 Apr 2025 at 21:27, Pádraig Brady <p...@draigbrady.com> wrote: > > On 04/04/2025 16:26, Nicolas Boichat wrote: > > Hi, > > > > Version: timeout (GNU coreutils) 9.6, Archlinux, x86-64. > > > > While playing with different duration parameters to `timeout`, I > > noticed that extremely short durations, like `1e-3000`, are rounded > > down to `0`. The problem is that `0` has a special meaning (disabling > > the timeout), so I don't think this is desired. > > > > All of these commands exit immediately: > > ``` > > timeout 0.0001 cat > > timeout 1e-100 cat > > timeout 1e-300 cat > > timeout 1e-323 cat > > ``` > > > > But these never exits: > > ``` > > timeout 1e-324 cat > > timeout 1e-3000 cat > > ``` > > > > As if we had typed: > > ``` > > timeout 0 cat > > ``` > > > > I think there is some logic in `printf` to handle float parsing > > underflow, so maybe this can be reused in `timeout` as well. > > The following should avoid this issue. > > Marking this as done.
That was fast! Thanks! > > thanks! > Pádraig > > diff --git a/src/timeout.c b/src/timeout.c > index 578d71070..6756cd888 100644 > --- a/src/timeout.c > +++ b/src/timeout.c > @@ -371,6 +371,10 @@ parse_duration (char const *str) > usage (EXIT_CANCELED); > } > > + /* Clamp underflow to 1ns, as 0 disables the timeout. */ > + if (duration == 0 && errno == ERANGE) > + duration = 1e-9; > + > return duration; > } >