hi, does setlocale("") reset to the last used locale ?
I would expect something like: old=getlocale() setlocale("C") strtod() setlocale(old); note: i had the same problems years ago and used strtod_l() with a static stored locale_t. re, wh ________________________________________ Von: busybox <busybox-boun...@busybox.net> im Auftrag von Maxim Kochetkov <fido_...@inbox.ru> Gesendet: Montag, 22. März 2021 06:23:06 An: busybox@busybox.net Betreff: [PATCH 1/1] libbb: fix parse_duration_str with LOCALE_SUPPORT WARNUNG: Diese E-Mail kam von außerhalb der Organisation. Klicken Sie nicht auf Links oder öffnen Sie keine Anhänge, es sei denn, Sie kennen den/die Absender*in und wissen, dass der Inhalt sicher ist. Decimal dot may differs from ".", so we need to set LC_NUMERIC to "C" before processing duration string by strtod() Signed-off-by: Maxim Kochetkov <fido_...@inbox.ru> --- coreutils/sleep.c | 4 ---- libbb/duration.c | 7 +++++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/coreutils/sleep.c b/coreutils/sleep.c index 7bfaab920..2658e84df 100644 --- a/coreutils/sleep.c +++ b/coreutils/sleep.c @@ -74,10 +74,6 @@ int sleep_main(int argc UNUSED_PARAM, char **argv) sleep(INT_MAX); #if ENABLE_FEATURE_FANCY_SLEEP -# if ENABLE_FLOAT_DURATION - /* undo busybox.c setlocale */ - setlocale(LC_NUMERIC, "C"); -# endif duration = 0; do { duration += parse_duration_str(*argv); diff --git a/libbb/duration.c b/libbb/duration.c index 086da15fb..cbbb7336d 100644 --- a/libbb/duration.c +++ b/libbb/duration.c @@ -33,6 +33,10 @@ static const struct suffix_mult duration_suffixes[] ALIGN_SUFFIX = { duration_t FAST_FUNC parse_duration_str(char *str) { duration_t duration; +# if ENABLE_LOCALE_SUPPORT + /* undo busybox.c setlocale */ + setlocale(LC_NUMERIC, "C"); +# endif if (strchr(str, '.')) { double d; @@ -54,6 +58,9 @@ duration_t FAST_FUNC parse_duration_str(char *str) duration = xatoul_sfx(str, duration_suffixes); } +#if ENABLE_LOCALE_SUPPORT + setlocale(LC_NUMERIC, ""); +#endif return duration; } void FAST_FUNC sleep_for_duration(duration_t duration) -- 2.30.2 _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox