Author: cazfi
Date: Fri Mar 13 06:43:07 2015
New Revision: 28508

URL: http://svn.gna.org/viewcvs/freeciv?rev=28508&view=rev
Log:
Added inline function is_bigendian() to be used instead of caller side 
conditional compilation.

Inspired by report of David Lowe <doctorjlowe>

See bug #15641

Modified:
    trunk/client/gui-gtk-3.0/mapview.c
    trunk/client/gui-gtk-3.0/sprite.c
    trunk/client/gui-sdl/alphablit.c
    trunk/client/gui-sdl/graphics.c
    trunk/client/gui-sdl/graphics.h
    trunk/client/gui-sdl/gui_iconv.c
    trunk/client/gui-sdl2/graphics.c
    trunk/client/gui-sdl2/graphics.h
    trunk/client/gui-sdl2/gui_iconv.c
    trunk/client/gui-sdl2/sprite.c
    trunk/utility/support.h

Modified: trunk/client/gui-gtk-3.0/mapview.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.0/mapview.c?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.0/mapview.c  (original)
+++ trunk/client/gui-gtk-3.0/mapview.c  Fri Mar 13 06:43:07 2015
@@ -543,11 +543,13 @@
 
     for (i = 0; i < sswidth; i++) {
       for (j = 0; j < ssheight; j++) {
-#ifndef WORDS_BIGENDIAN
-        mask_out[(j * sswidth + i) * 4 + 3] = 0.65 * mask_in[(j * sswidth + i) 
* 4 + 3];
-#else  /* WORDS_BIGENDIAN */
-        mask_out[(j * sswidth + i) * 4 + 0] = 0.65 * mask_in[(j * sswidth + i) 
* 4 + 0];
-#endif /* WORDS_BIGENDIAN */
+        if (!is_bigendian()) {
+          mask_out[(j * sswidth + i) * 4 + 3]
+            = 0.65 * mask_in[(j * sswidth + i) * 4 + 3];
+        } else {
+          mask_out[(j * sswidth + i) * 4 + 0]
+            = 0.65 * mask_in[(j * sswidth + i) * 4 + 0];
+        }
       }
     }
 

Modified: trunk/client/gui-gtk-3.0/sprite.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.0/sprite.c?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.0/sprite.c   (original)
+++ trunk/client/gui-gtk-3.0/sprite.c   Fri Mar 13 06:43:07 2015
@@ -172,21 +172,21 @@
 
     for (i = 0; i < width; i++) {
       for (j = 0; j < height; j++) {
-#ifndef WORDS_BIGENDIAN
-        /* Add alpha channel */
-        new_data[(j * width + i) * 4 + 3] = 0xff;
-        /* Copy RGB */
-        new_data[(j * width + i) * 4 + 1] = old_data[(j * width + i) * 4 + 1];
-        new_data[(j * width + i) * 4 + 2] = old_data[(j * width + i) * 4 + 2];
-        new_data[(j * width + i) * 4 + 0] = old_data[(j * width + i) * 4 + 0];
-#else  /* WORDS_BIGENDIAN */
-        /* Add alpha channel */
-        new_data[(j * width + i) * 4] = 0xff;
-        /* Copy RGB */
-        new_data[(j * width + i) * 4 + 1] = old_data[(j * width + i) * 4 + 1];
-        new_data[(j * width + i) * 4 + 2] = old_data[(j * width + i) * 4 + 2];
-        new_data[(j * width + i) * 4 + 3] = old_data[(j * width + i) * 4 + 3];
-#endif  /* WORDS_BIGENDIAN */
+        if (!is_bigendian()) {
+          /* Add alpha channel */
+          new_data[(j * width + i) * 4 + 3] = 0xff;
+          /* Copy RGB */
+          new_data[(j * width + i) * 4 + 1] = old_data[(j * width + i) * 4 + 
1];
+          new_data[(j * width + i) * 4 + 2] = old_data[(j * width + i) * 4 + 
2];
+          new_data[(j * width + i) * 4 + 0] = old_data[(j * width + i) * 4 + 
0];
+        } else {
+          /* Add alpha channel */
+          new_data[(j * width + i) * 4] = 0xff;
+          /* Copy RGB */
+          new_data[(j * width + i) * 4 + 1] = old_data[(j * width + i) * 4 + 
1];
+          new_data[(j * width + i) * 4 + 2] = old_data[(j * width + i) * 4 + 
2];
+          new_data[(j * width + i) * 4 + 3] = old_data[(j * width + i) * 4 + 
3];
+        }
       }
     }
 
@@ -258,11 +258,11 @@
   int i, j;
   int endian;
 
-#ifdef WORDS_BIGENDIAN
-  endian = 0;
-#else
-  endian = 3;
-#endif
+  if (is_bigendian()) {
+    endian = 0;
+  } else {
+    endian = 3;
+  }
 
   fc_assert(cairo_image_surface_get_format(sprite->surface) == 
CAIRO_FORMAT_ARGB32);
 
@@ -380,24 +380,24 @@
     while (p < end) {
       tmp = p[0];
 
-#ifdef WORDS_BIGENDIAN
-      if (tmp != 0) {
-        p[0] = DIV_UNc(p[1], tmp);
-        p[1] = DIV_UNc(p[2], tmp);
-        p[2] = DIV_UNc(p[3], tmp);
-        p[3] = tmp;
+      if (is_bigendian()) {
+        if (tmp != 0) {
+          p[0] = DIV_UNc(p[1], tmp);
+          p[1] = DIV_UNc(p[2], tmp);
+          p[2] = DIV_UNc(p[3], tmp);
+          p[3] = tmp;
+        } else {
+          p[1] = p[2] = p[3] = 0;
+        }
       } else {
-        p[1] = p[2] = p[3] = 0;
-      }
-#else  /* WORDS_BIGENDIAN */
-      if (p[3] != 0) {
-        p[0] = DIV_UNc(p[2], p[3]);
-        p[1] = DIV_UNc(p[1], p[3]);
-        p[2] = DIV_UNc(tmp, p[3]);
-      } else {
-        p[0] = p[1] = p[2] = 0;
-      }
-#endif /* WORDS_BIGENDIAN */
+        if (p[3] != 0) {
+          p[0] = DIV_UNc(p[2], p[3]);
+          p[1] = DIV_UNc(p[1], p[3]);
+          p[2] = DIV_UNc(tmp, p[3]);
+        } else {
+          p[0] = p[1] = p[2] = 0;
+        }
+      }
 
       p += 4;
     }

Modified: trunk/client/gui-sdl/alphablit.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl/alphablit.c?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-sdl/alphablit.c    (original)
+++ trunk/client/gui-sdl/alphablit.c    Fri Mar 13 06:43:07 2015
@@ -237,7 +237,7 @@
                 break;                                                         
  \
                 default:        {/* case 3: FIXME: broken code (no alpha) */   
                \
                         Uint8 *b = (Uint8 *)buf;                           \
-                        if(SDL_BYTEORDER == SDL_LIL_ENDIAN) {                  
 \
+                        if (!is_bigendian()) {                          \
                                 pixel = b[0] + (b[1] << 8) + (b[2] << 16); \
                         } else {                                           \
                                 pixel = (b[0] << 16) + (b[1] << 8) + b[2]; \
@@ -259,14 +259,14 @@
   } else {                                                        \
     switch (bpp) {                                                \
     case 2:                                                       \
-      if (SDL_BYTEORDER == SDL_LIL_ENDIAN) {                      \
+      if (!is_bigendian()) {                                      \
         pixel = b[0] + (b[1] << 8);                               \
       } else {                                                    \
         pixel = (b[0] << 8) + b[1];                               \
       }                                                           \
       break;                                                      \
     case 4:                                                       \
-      if (SDL_BYTEORDER == SDL_LIL_ENDIAN) {                      \
+      if (!is_bigendian()) {                                      \
         pixel = b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24); \
       } else {                                                    \
         pixel = (b[0] << 24) + (b[1] << 16) + (b[2] << 8) + b[3]; \
@@ -274,7 +274,7 @@
       break;                                                      \
     default:                                                      \
       { /* case 3: FIXME: broken code (no alpha) */               \
-        if (SDL_BYTEORDER == SDL_LIL_ENDIAN) {                    \
+        if (!is_bigendian()) {                                    \
           pixel = b[0] + (b[1] << 8) + (b[2] << 16);              \
         } else {                                                  \
           pixel = (b[0] << 16) + (b[1] << 8) + b[2];              \
@@ -313,7 +313,7 @@
   {                                                               \
     Uint16 pixel;                                                 \
     PIXEL_FROM_RGBA(pixel, fmt, r, g, b, a);                      \
-    if (SDL_BYTEORDER == SDL_LIL_ENDIAN) {                        \
+    if (!is_bigendian()) {                                        \
       buf[0] = (pixel & 0x00ff);                                  \
       buf[1] = (pixel & 0xff00) >> 8;                             \
     } else {                                                      \
@@ -326,7 +326,7 @@
   {                                                               \
     Uint32 pixel;                                                 \
     PIXEL_FROM_RGBA(pixel, fmt, r, g, b, a);                      \
-    if (SDL_BYTEORDER == SDL_LIL_ENDIAN) {                        \
+    if (!is_bigendian()) {                                        \
       buf[0] = (pixel & 0x000000ff);                              \
       buf[1] = (pixel & 0x0000ff00) >> 8;                         \
       buf[2] = (pixel & 0x00ff0000) >> 16;                        \

Modified: trunk/client/gui-sdl/graphics.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl/graphics.c?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-sdl/graphics.c     (original)
+++ trunk/client/gui-sdl/graphics.c     Fri Mar 13 06:43:07 2015
@@ -505,7 +505,7 @@
       /* Here ptr is the address to the pixel we want to retrieve */
       Uint8 *ptr =
          (Uint8 *) pSurface->pixels + y * pSurface->pitch + x * 3;
-      if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+      if (is_bigendian()) {
        return ptr[0] << 16 | ptr[1] << 8 | ptr[2];
       } else {
        return ptr[0] | ptr[1] << 8 | ptr[2] << 16;
@@ -536,7 +536,7 @@
 
   case 3:
     {
-      if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+      if (is_bigendian()) {
        return (((Uint8 *)pSurface->pixels)[0] << 16)|
                (((Uint8 *)pSurface->pixels)[1] << 8)|
                        ((Uint8 *)pSurface->pixels)[2];
@@ -3094,7 +3094,7 @@
       h = pSurface->h;
       while(h--) {
         do {
-         if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+         if (is_bigendian()) {
            color = (pixel[0] << 16 | pixel[1] << 8 | pixel[2]);
           } else {
            color = (pixel[0] | pixel[1] << 8 | pixel[2] << 16);
@@ -3127,7 +3127,7 @@
       start = pixel;
       while(h--) {
         do {
-         if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+         if (is_bigendian()) {
            color = (pixel[0] << 16 | pixel[1] << 8 | pixel[2]);
           } else {
            color = (pixel[0] | pixel[1] << 8 | pixel[2] << 16);

Modified: trunk/client/gui-sdl/graphics.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl/graphics.h?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-sdl/graphics.h     (original)
+++ trunk/client/gui-sdl/graphics.h     Fri Mar 13 06:43:07 2015
@@ -361,7 +361,7 @@
                break;                                                    \
                case 3:                                                   \
                        buf_ptr += (x << 1) + x;                          \
-                       if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {            \
+                       if (is_bigendian()) {                           \
                                buf_ptr[0] = (pixel >> 16) & 0xff;      \
                                buf_ptr[1] = (pixel >> 8) & 0xff;       \
                                buf_ptr[2] = pixel & 0xff;              \

Modified: trunk/client/gui-sdl/gui_iconv.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl/gui_iconv.c?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-sdl/gui_iconv.c    (original)
+++ trunk/client/gui-sdl/gui_iconv.c    Fri Mar 13 06:43:07 2015
@@ -65,11 +65,11 @@
 **************************************************************************/
 static const char *get_display_encoding(void)
 {
-#if SDL_BYTEORDER == SDL_LIL_ENDIAN
-  return "UTF-16LE";
-#else
-  return "UTF-16BE";
-#endif
+  if (is_bigendian()) {
+    return "UTF-16BE";
+  } else {
+    return "UTF-16LE";
+  }
 }
 
 /**************************************************************************

Modified: trunk/client/gui-sdl2/graphics.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl2/graphics.c?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-sdl2/graphics.c    (original)
+++ trunk/client/gui-sdl2/graphics.c    Fri Mar 13 06:43:07 2015
@@ -531,7 +531,7 @@
       Uint8 *ptr =
         (Uint8 *) pSurface->pixels + y * pSurface->pitch + x * 3;
 
-      if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+      if (is_bigendian()) {
         return ptr[0] << 16 | ptr[1] << 8 | ptr[2];
       } else {
         return ptr[0] | ptr[1] << 8 | ptr[2] << 16;
@@ -565,7 +565,7 @@
 
   case 3:
     {
-      if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+      if (is_bigendian()) {
         return (((Uint8 *)pSurface->pixels)[0] << 16)
           | (((Uint8 *)pSurface->pixels)[1] << 8)
           | ((Uint8 *)pSurface->pixels)[2];
@@ -645,21 +645,25 @@
                                  iWidth, iHeight,
                                  0);
 
-  main_surface = SDL_CreateRGBSurface(0, iWidth, iHeight, 32,
-#if SDL_BYTEORDER != SDL_LIL_ENDIAN
-                0x0000FF00, 0x00FF0000, 0xFF000000, 0x000000FF
-#else
-                0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000
-#endif
-);
-
-  Main.map = SDL_CreateRGBSurface(0, iWidth, iHeight, 32,
-#if SDL_BYTEORDER != SDL_LIL_ENDIAN
-                0x0000FF00, 0x00FF0000, 0xFF000000, 0x000000FF
-#else
-                0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000
-#endif
-);
+  if (is_bigendian()) {
+      main_surface = SDL_CreateRGBSurface(0, iWidth, iHeight, 32,
+                                          0x0000FF00, 0x00FF0000,
+                                          0xFF000000, 0x000000FF);
+  } else {
+    main_surface = SDL_CreateRGBSurface(0, iWidth, iHeight, 32,
+                                        0x00FF0000, 0x0000FF00,
+                                        0x000000FF, 0xFF000000);
+  }
+
+  if (is_bigendian()) {
+    Main.map = SDL_CreateRGBSurface(0, iWidth, iHeight, 32,
+                                    0x0000FF00, 0x00FF0000,
+                                    0xFF000000, 0x000000FF);
+  } else {
+    Main.map = SDL_CreateRGBSurface(0, iWidth, iHeight, 32,
+                                    0x00FF0000, 0x0000FF00,
+                                    0x000000FF, 0xFF000000);
+  }
 
   if (options.gui_sdl2_swrenderer) {
     flags = SDL_RENDERER_SOFTWARE;
@@ -3184,7 +3188,7 @@
       h = pSurface->h;
       while (h--) {
         do {
-          if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+          if (is_bigendian()) {
             color = (pixel[0] << 16 | pixel[1] << 8 | pixel[2]);
           } else {
             color = (pixel[0] | pixel[1] << 8 | pixel[2] << 16);
@@ -3217,7 +3221,7 @@
       start = pixel;
       while (h--) {
         do {
-          if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+          if (is_bigendian()) {
             color = (pixel[0] << 16 | pixel[1] << 8 | pixel[2]);
           } else {
             color = (pixel[0] | pixel[1] << 8 | pixel[2] << 16);

Modified: trunk/client/gui-sdl2/graphics.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl2/graphics.h?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-sdl2/graphics.h    (original)
+++ trunk/client/gui-sdl2/graphics.h    Fri Mar 13 06:43:07 2015
@@ -375,7 +375,7 @@
                break;                                                    \
                case 3:                                                   \
                        buf_ptr += (x << 1) + x;                          \
-                       if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {            \
+                       if (is_bigendian()) {                           \
                                buf_ptr[0] = (pixel >> 16) & 0xff;      \
                                buf_ptr[1] = (pixel >> 8) & 0xff;       \
                                buf_ptr[2] = pixel & 0xff;              \

Modified: trunk/client/gui-sdl2/gui_iconv.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl2/gui_iconv.c?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-sdl2/gui_iconv.c   (original)
+++ trunk/client/gui-sdl2/gui_iconv.c   Fri Mar 13 06:43:07 2015
@@ -64,11 +64,11 @@
 **************************************************************************/
 static const char *get_display_encoding(void)
 {
-#if SDL_BYTEORDER == SDL_LIL_ENDIAN
-  return "UTF-16LE";
-#else
-  return "UTF-16BE";
-#endif
+  if (is_bigendian()) {
+    return "UTF-16BE";
+  } else {
+    return "UTF-16LE";
+  }
 }
 
 /**************************************************************************

Modified: trunk/client/gui-sdl2/sprite.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl2/sprite.c?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/client/gui-sdl2/sprite.c      (original)
+++ trunk/client/gui-sdl2/sprite.c      Fri Mar 13 06:43:07 2015
@@ -128,13 +128,15 @@
   fc_assert_ret_val(height > 0, NULL);
   fc_assert_ret_val(pcolor != NULL, NULL);
 
-  mypixbuf = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32,
-#if SDL_BYTEORDER != SDL_LIL_ENDIAN
-                0x0000FF00, 0x00FF0000, 0xFF000000, 0x000000FF
-#else
-                0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000
-#endif
-  );
+  if (is_bigendian()) {
+    mypixbuf = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32,
+                                    0x0000FF00, 0x00FF0000,
+                                    0xFF000000, 0x000000FF);
+  } else {
+    mypixbuf = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32,
+                                    0x00FF0000, 0x0000FF00,
+                                    0x000000FF, 0xFF000000);
+  }
 
   SDL_FillRect(mypixbuf, NULL,
                SDL_MapRGBA(mypixbuf->format,

Modified: trunk/utility/support.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/utility/support.h?rev=28508&r1=28507&r2=28508&view=diff
==============================================================================
--- trunk/utility/support.h     (original)
+++ trunk/utility/support.h     Fri Mar 13 06:43:07 2015
@@ -177,6 +177,15 @@
 
 const char *fc_basename(const char *path);
 
+static bool inline is_bigendian(void)
+{
+#ifdef WORDS_BIGENDIAN 
+  return TRUE;
+#else  /* WORDS_BIGENDIAN */
+  return FALSE;
+#endif /* WORDS_BIGENDIAN */
+}
+
 int fc_at_quick_exit(void (*func)(void));
 
 #ifdef __cplusplus


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to