[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52449] trunk/blender/intern/locale/ boost_locale_wrapper.cpp: Fixes for OS X default locale: use pclose and do error checking for file read.
Brecht Van Lommel
brechtvanlommel at pandora.be
Wed Nov 21 16:14:19 CET 2012
Revision: 52449
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52449
Author: blendix
Date: 2012-11-21 15:14:19 +0000 (Wed, 21 Nov 2012)
Log Message:
-----------
Fixes for OS X default locale: use pclose and do error checking for file read.
Modified Paths:
--------------
trunk/blender/intern/locale/boost_locale_wrapper.cpp
Modified: trunk/blender/intern/locale/boost_locale_wrapper.cpp
===================================================================
--- trunk/blender/intern/locale/boost_locale_wrapper.cpp 2012-11-21 14:29:34 UTC (rev 52448)
+++ trunk/blender/intern/locale/boost_locale_wrapper.cpp 2012-11-21 15:14:19 UTC (rev 52449)
@@ -26,14 +26,11 @@
*
*/
+#include <stdio.h>
#include <boost/locale.hpp>
#include "boost_locale_wrapper.h"
-#if defined (__APPLE__)
- #include "stdio.h"
-#endif
-
static std::string messages_path;
static std::string default_domain;
@@ -59,24 +56,38 @@
gen.add_messages_path(messages_path);
gen.add_messages_domain(default_domain);
//gen.set_default_messages_domain(default_domain);
-#if defined (__APPLE__)
- // workaround to get osx system locale from user defaults
- FILE* fp;
- char result [10];
- char osx_locale [10];
- fp = popen("defaults read .GlobalPreferences AppleLocale","r");
- fread(result,1,sizeof(result),fp);
- fclose (fp);
- sprintf(osx_locale, """%s.UTF-8""", result);
- locale = osx_locale;
-#endif
+
if (locale && locale[0]) {
std::locale::global(gen(locale));
}
-
else {
+#if defined (__APPLE__)
+ // workaround to get osx system locale from user defaults
+ FILE* fp;
+ std::string locale_osx = "";
+ char result[16];
+ int result_len = 0;
+ fp = popen("defaults read .GlobalPreferences AppleLocale", "r");
+
+ if(fp) {
+ result_len = fread(result, 1, sizeof(result) - 1, fp);
+
+ if(result_len > 0) {
+ result[result_len-1] = '\0'; // \0 terminate and remove \n
+ locale_osx = std::string(result) + std::string(".UTF-8");
+ }
+
+ pclose(fp);
+ }
+
+ if(locale_osx == "")
+ fprintf(stderr, "Locale set: failed to read AppleLocale read from defaults\n");
+
+ std::locale::global(gen(locale_osx.c_str()));
+#else
std::locale::global(gen(""));
+#endif
}
// Note: boost always uses "C" LC_NUMERIC by default!
}
More information about the Bf-blender-cvs
mailing list