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