375gnu

Патчам пафіксіў баґу ў Стэлярыюм :)

In stellarium on Сакавік 15, 2010 at 19:05

У вэрсіі 0.10.3 stellarium’а перасталі працаваць old_style краявіды. Зямля ёсьць, а замест бакоў — вялізныя аднаколерныя квадраты. На адсочніку хібаў штукі са 3 паведамленьні. Цікава, што нехта здагадаўся выканаць праґраму з LANG=C, і вуаля, усё працавала як сьлед. І з LANG=en таксама. Больш за тое, поле пошуку звужалася тым, што канкрэтна адказным быў парамэтар LC_NUMERIC.

Бакі краявіду ў landscape.ini апісваюцца радкамі кшталту side0 = tex0:0:0.005:1:1, відавочна, што sscanf ня зможа правільна разабраць такі радок, калі цэлую частку ад дробавай аддзяляе ня кропка, а нешта іншае (напр., коска).

Дзіўна, але такую простую праблему распрацоўнікі даволі доўга не маглі вырашыць. Усё аказалася вельмі проста: яны спачатку выклікалі setlocale(LC_NUMERIC, “C”), а потым стваралі асобнік QApplication, які пры ініцыялізацыі выклікае setlocale. Пераставіў setlocale(LC_NUMERIC, “C”) пасьля QApplication app(argc, argv) і вуаля🙂.

Калі нехта прагне сабраць самастойна апошнюю вэрсію (0.10.4), у якой хіба ня выпраўленая, то вось латка:

diff -uNrb stellarium-0.10.4.orig/src/main.cpp stellarium-0.10.4/src/main.cpp
--- stellarium-0.10.4.orig/src/main.cpp	2010-02-22 13:22:31.000000000 +0200
+++ stellarium-0.10.4/src/main.cpp	2010-03-12 20:59:32.554624218 +0200
@@ -125,12 +125,6 @@
 	QApplication::setStyle(new QPlastiqueStyle());
 #endif
 
-	// Used for getting system date formatting
-	setlocale(LC_TIME, "");
-	// We need scanf()/printf() and friends to always work in the C locale,
-	// otherwise configuration/INI file parsing will be erroneous.
-	setlocale(LC_NUMERIC, "C");
-
 	// Handle command line options for alternative Qt graphics system types.
 	// DEFAULT_GRAPHICS_SYSTEM is defined per platform in the main CMakeLists.txt file.
 	// Avoid overriding if the user already specified the mode on the CLI.
@@ -154,6 +148,11 @@
 	// The QApplication MUST be created before the StelFileMgr is initialized.
 	QApplication app(argc, argv);
 
+        // QApplication sets current locale, but 
+        // we need scanf()/printf() and friends to always work in the C locale,
+        // otherwise configuration/INI file parsing will be erroneous.
+	setlocale(LC_NUMERIC, "C");
+
 	// Init the file manager
 	StelFileMgr::init();

Капіяваць трэба з рэжыму прагляду крынічнага коду старонкі.

  1. Gigant!

    Ja ŭpieršyniu daviedaŭisa pra hetuju aplikacyju. Vyhladaje trochi jak пашчі-шта-Google-Earth.

  2. Гэта крыху іншая праґрама — плянэтарый, яна нават умее кіраваць тэлескапамі.

Пакiнуць каментарый

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Змяніць )

Twitter picture

You are commenting using your Twitter account. Log Out / Змяніць )

Facebook photo

You are commenting using your Facebook account. Log Out / Змяніць )

Google+ photo

You are commenting using your Google+ account. Log Out / Змяніць )

Connecting to %s

%d bloggers like this: