tool_operate: override the numeric locale and set "C" by force

Makes curl always use dot as decimal separator for options,
independently of what the locale says. Makes scripts and command lines
portable.

Updated docs accordingly.

Reported-by: Daniel Faust

Fixes #9969
Closes #9972
This commit is contained in:
Daniel Stenberg 2022-11-23 11:24:26 +01:00
parent cde8f28489
commit 975efec61b
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
4 changed files with 11 additions and 1 deletions

View File

@ -14,3 +14,6 @@ Maximum time in seconds that you allow curl's connection to take. This only
limits the connection phase, so if curl connects within the given period it
will continue - if not it will exit. Since version 7.32.0, this option
accepts decimal values.
The decimal value needs to provided using a dot (.) as decimal separator - not
the local version even if it might be using another separator.

View File

@ -14,3 +14,6 @@ Maximum time in seconds that you allow curl to wait for a 100-continue
response when curl emits an Expects: 100-continue header in its request. By
default curl will wait one second. This option accepts decimal values! When
curl stops waiting, it will continue as if the response has been received.
The decimal value needs to provided using a dot (.) as decimal separator - not
the local version even if it might be using another separator.

View File

@ -20,3 +20,6 @@ timeout increases in decimal precision.
If you enable retrying the transfer (--retry) then the maximum time counter is
reset each time the transfer is retried. You can use --retry-max-time to limit
the retry time.
The decimal value needs to provided using a dot (.) as decimal separator - not
the local version even if it might be using another separator.

View File

@ -2638,9 +2638,10 @@ CURLcode operate(struct GlobalConfig *global, int argc, argv_item_t argv[])
CURLcode result = CURLE_OK;
char *first_arg = argc > 1 ? curlx_convert_tchar_to_UTF8(argv[1]) : NULL;
/* Setup proper locale from environment */
#ifdef HAVE_SETLOCALE
/* Override locale for number parsing (only) */
setlocale(LC_ALL, "");
setlocale(LC_NUMERIC, "C");
#endif
/* Parse .curlrc if necessary */