watch,free: interpet intervals in non-locale way

Both watch and free used the locale to determine the required delay
interval for subsequent updates. It's preferable to not care about
locale and accept both 12.34 and 12,34 as meaning 12 seconds and
340 microseconds.

References:
 https://bugs.debian.org/692113

Signed-off-by: Craig Small <csmall@enc.com.au>
This commit is contained in:
Craig Small 2016-07-03 16:14:36 +10:00
parent 8c0b6d60ca
commit 2c5bc47b8e
4 changed files with 7 additions and 9 deletions

1
NEWS
View File

@ -8,6 +8,7 @@ procps-ng-NEXT
* kill: report error if cannot kill process Debian #733172
* watch: Add hostname to header
* library: Find tty quicker Debian #770215
* watch,free: use locale-independent float Debian #692113
procps-ng-3.3.11
----------------

9
free.1
View File

@ -2,7 +2,7 @@
.\" This page Copyright (C) 1993 Matt Welsh, mdw@sunsite.unc.edu.
.\" Long options where added at April 15th, 2011.
.\" Freely distributable under the terms of the GPL
.TH FREE 1 "Jul 2016" "procps-ng" "User Commands"
.TH FREE 1 "2016-06-03" "procps-ng" "User Commands"
.SH NAME
free \- Display amount of free and used memory in the system
.SH SYNOPSIS
@ -110,11 +110,10 @@ option.
\fB\-l\fR, \fB\-\-lohi\fR
Show detailed low and high memory statistics.
.TP
\fB\-s\fR, \fB\-\-seconds\fR \fIseconds\fR
Continuously display the result delay
.I seconds
\fB\-s\fR, \fB\-\-seconds\fR \fIdelay\fR
Continuously display the result \fIdelay\fR seconds
apart. You may actually specify any floating point number for
.IR delay ,
\fIdelay\fR using either . or , for decimal point.
.BR usleep (3)
is used for microsecond resolution delay times.
.TP

4
free.c
View File

@ -325,9 +325,7 @@ int main(int argc, char **argv)
case 's':
flags |= FREE_REPEAT;
errno = 0;
args.repeat_interval = (1000000 * strtof(optarg, &endptr));
if (errno || optarg == endptr || (endptr && *endptr))
xerrx(EXIT_FAILURE, _("seconds argument `%s' failed"), optarg);
args.repeat_interval = (1000000 * strtod_nol_or_err(optarg, "seconds argument failed"));
if (args.repeat_interval < 1)
xerrx(EXIT_FAILURE,
_("seconds argument `%s' is not positive number"), optarg);

View File

@ -724,7 +724,7 @@ int main(int argc, char *argv[])
flags |= WATCH_EXEC;
break;
case 'n':
interval = strtod_or_err(optarg, _("failed to parse argument"));
interval = strtod_nol_or_err(optarg, _("failed to parse argument"));
if (interval < 0.1)
interval = 0.1;
if (interval > UINT_MAX)