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;