diff options
author | Nikias Bassen | 2010-04-05 20:37:15 +0200 |
---|---|---|
committer | Jonathan Beck | 2010-04-06 18:26:03 +0200 |
commit | eb618a0c5c7a3893fc18a8f1e5d39854aa25c597 (patch) | |
tree | 6aa4907aaa1a3d44528da5455457bc8ebf2a16fe /src | |
parent | 774ce25067303111b6ada712339b7d47ad0f87af (diff) | |
download | libplist-eb618a0c5c7a3893fc18a8f1e5d39854aa25c597.tar.gz libplist-eb618a0c5c7a3893fc18a8f1e5d39854aa25c597.tar.bz2 |
plist_to_xml: use POSIX locale to make sure '.' is used for floats
In locales like German, a ',' is used as a decimal separator. When the
program calling plist_to_xml uses LC_NUMBER with something different
than a '.', parsing of the resulting XML document fails. This patch
fixes it.
Diffstat (limited to 'src')
-rw-r--r-- | src/xplist.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/xplist.c b/src/xplist.c index 3e9f043..c7d9cfb 100644 --- a/src/xplist.c +++ b/src/xplist.c @@ -26,6 +26,7 @@ #include <stdio.h> #include <inttypes.h> +#include <locale.h> #include <libxml/parser.h> #include <libxml/tree.h> @@ -371,6 +372,14 @@ void plist_to_xml(plist_t plist, char **plist_xml, uint32_t * length) root_node = xmlDocGetRootElement(plist_doc); root.xml = root_node; + char *current_locale = setlocale(LC_NUMERIC, NULL); + char *saved_locale = NULL; + if (current_locale) { + saved_locale = strdup(current_locale); + } + if (saved_locale) { + setlocale(LC_NUMERIC, "POSIX"); + } node_to_xml(plist, &root); xmlChar* tmp = NULL; @@ -385,6 +394,11 @@ void plist_to_xml(plist_t plist, char **plist_xml, uint32_t * length) tmp = NULL; } xmlFreeDoc(plist_doc); + + if (saved_locale) { + setlocale(LC_NUMERIC, saved_locale); + free(saved_locale); + } } void plist_from_xml(const char *plist_xml, uint32_t length, plist_t * plist) |