[libvirt] [PATCH 1/2] util: implement virStrToDoubleSafe().
Martin Kletzander
mkletzan at redhat.com
Thu Jun 15 08:27:14 UTC 2017
On Wed, Jun 14, 2017 at 01:24:42PM -0300, Julio Faracco wrote:
>Following the GNU Documentation, functions to convert double/float to string
>and vice versa, use the locale to set the mantissa separator. Some languages
>use comma and other use dot as a separator.
>
>For example: 1,212.67 (en_US) = 1.112,67 (pt_BR).
>
>This can be used to parse values in float/double from XML and other definition
>files.
>
>Signed-off-by: Julio Faracco <jcfaracco at gmail.com>
>---
> src/libvirt_private.syms | 1 +
> src/util/virstring.c | 31 +++++++++++++++++++++++++++++++
> src/util/virstring.h | 4 ++++
> 3 files changed, 36 insertions(+)
>
>diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
>index 044510f..9d791e6 100644
>--- a/src/libvirt_private.syms
>+++ b/src/libvirt_private.syms
>@@ -2659,6 +2659,7 @@ virStringTrimOptionalNewline;
> virStrncpy;
> virStrndup;
> virStrToDouble;
>+virStrToDoubleSafe;
> virStrToLong_i;
> virStrToLong_l;
> virStrToLong_ll;
>diff --git a/src/util/virstring.c b/src/util/virstring.c
>index 089b539..6dad00f 100644
>--- a/src/util/virstring.c
>+++ b/src/util/virstring.c
>@@ -537,6 +537,37 @@ virStrToDouble(char const *s,
> }
>
> int
>+virStrToDoubleSafe(char const *s,
>+ char **end_ptr,
>+ double *result)
>+{
>+ char *cur_locale = NULL;
>+ char *saved_locale = NULL;
>+ int ret = -1;
>+
>+ cur_locale = setlocale (LC_ALL, NULL);
>+ if (!cur_locale)
>+ return ret;
>+
>+ if (VIR_STRDUP(saved_locale, cur_locale) < 0)
>+ goto cleanup;
>+
>+ if (!setlocale (LC_ALL, "C"))
>+ goto cleanup;
>+
This is MT-Unsafe. We cannot set this for the whole process, so NACK to
this approach. You need to use uselocale() as in commit 43bfa23e6f96
(or just see virDoubleToStr()).
Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170615/9c9ed3a5/attachment-0001.sig>
More information about the libvir-list
mailing list