tags 369500 + patch
thanks
Hi Cédric,
The attached patch fixes two endianness issues in stellarium:
- translator.cpp: the resulting UCS4 string was needlessly
byteswapped
- hip_star.cpp: the floats read from the data file were not
byteswapped due to gcc optimizing the macro away (that, or aliasing
rules kicking in). The patch does the byteswapping the proper way,
using a union (warning: anonymous unions are not be portable to
some non-gcc compilers).
With these fixes, stellarium works perfectly fine on PPC.
(btw, please add the locale files to the stellarium-data package ;)
JB.
--
Julien BLACHE <[EMAIL PROTECTED]> | Debian, because code matters more
Debian & GNU/Linux Developer | <http://www.debian.org>
Public key available on <http://www.jblache.org> - KeyID: F5D6 5169
GPG Fingerprint : 935A 79F1 C8B3 3521 FD62 7CC7 CD61 4FD7 F5D6 5169
--- stellarium-0.8.0.orig/src/translator.cpp
+++ stellarium-0.8.0/src/translator.cpp
@@ -114,7 +114,7 @@
ch |= (unsigned short)(utf8[++i]&0x3F);
}
-#ifdef WORDS_BIGENDIAN
+#if 0 //def WORDS_BIGENDIAN
unicode[j] = bswap_16(ch);
#else
unicode[j] = ch;
--- stellarium-0.8.0.orig/src/hip_star.cpp
+++ stellarium-0.8.0/src/hip_star.cpp
@@ -145,21 +145,23 @@
// Read datas in binary catalog and compute x,y,z;
// The aliasing bug on some architecture has been fixed by Rainer Canavan on 26/11/2003
+// Really ? -- JB, 20060607
int HipStar::read(FILE * catalog)
{
- float RA=0, DE=0, xDE, xRA;
- fread(&xRA,4,1,catalog);
- LE_TO_CPU_FLOAT(RA, xRA);
+ union { float fl; unsigned int ui; } RA, DE, LY, xRA, xDE, xLY;
- fread(&xDE,4,1,catalog);
- LE_TO_CPU_FLOAT(DE, xDE);
+ fread(&xRA.ui,4,1,catalog);
+ LE_TO_CPU_INT32(RA.ui, xRA.ui);
+
+ fread(&xDE.ui,4,1,catalog);
+ LE_TO_CPU_INT32(DE.ui, xDE.ui);
// for debug printing
- // float rao = RA;
- // float deo = DE;
+ // float rao = RA.fl;
+ // float deo = DE.fl;
- RA*=M_PI/12.; // Convert from hours to rad
- DE*=M_PI/180.; // Convert from deg to rad
+ RA.fl*=M_PI/12.; // Convert from hours to rad
+ DE.fl*=M_PI/180.; // Convert from deg to rad
unsigned short int mag, xmag;
fread(&xmag,2,1,catalog);
@@ -173,7 +175,7 @@
// LE_TO_CPU_INT16(type, xtype);
// Calc the Cartesian coord with RA and DE
- sphe_to_rect(RA,DE,XYZ);
+ sphe_to_rect(RA.fl,DE.fl,XYZ);
XYZ*=RADIUS_STAR;
@@ -198,9 +200,9 @@
setColor(SpType); // Color depending on the spectral type
// distance
- float LY;
- fread(&LY,4,1,catalog);
- LE_TO_CPU_FLOAT(Distance, LY);
+ fread(&xLY.ui,4,1,catalog);
+ LE_TO_CPU_INT32(LY.ui, xLY.ui);
+ Distance = LY.fl;
if (mag==0 && type==0) return 0;