[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