Ignore:
Timestamp:
Nov 30, 2003, 5:34:04 PM (19 years ago)
Author:
Sam Hocevar
Message:
  • src/io.c: + Removed a useless message.
  • src/bitmap.c examples/view.c: + Really fixed the endianness issue.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/bitmap.c

    r239 r240  
    3838#endif
    3939
     40#ifdef HAVE_ENDIAN_H
     41#   include <endian.h>
     42#endif
     43
    4044#include <stdlib.h>
    4145
     
    237241                            unsigned int *g, unsigned int *b)
    238242{
    239     unsigned int bits;
     243    uint32_t bits;
    240244
    241245    pixels += (bitmap->bpp / 8) * x + bitmap->pitch * y;
     
    244248    {
    245249        case 4:
    246             bits = ((uint32_t)pixels[0] << 24) |
    247                    ((uint32_t)pixels[1] << 16) |
    248                    ((uint32_t)pixels[2] << 8) |
    249                    ((uint32_t)pixels[3]);
     250            bits = *(uint32_t *)pixels;
    250251            break;
    251252        case 3:
    252             bits = ((uint32_t)pixels[0] << 16) |
    253                    ((uint32_t)pixels[1] << 8) |
    254                    ((uint32_t)pixels[2]);
     253        {
     254#ifdef HAVE_ENDIAN_H
     255            if(__BYTE_ORDER == __BIG_ENDIAN)
     256#else
     257            static const uint32_t rmask = 0x12345678;
     258            if(*(uint8_t *)&rmask == 0x12)
     259#endif
     260                bits = ((uint32_t)pixels[0] << 16) |
     261                       ((uint32_t)pixels[1] << 8) |
     262                       ((uint32_t)pixels[2]);
     263            else
     264                bits = ((uint32_t)pixels[2] << 16) |
     265                       ((uint32_t)pixels[1] << 8) |
     266                       ((uint32_t)pixels[0]);
    255267            break;
     268        }
    256269        case 2:
    257             bits = ((uint16_t)pixels[0] << 8) |
    258                    ((uint16_t)pixels[1]);
     270            bits = *(uint16_t *)pixels;
    259271            break;
    260272        case 1:
Note: See TracChangeset for help on using the changeset viewer.