modernc.org/ccgo/v3@v3.16.14/lib/testdata/bug/cpl_convert.c (about)

     1  typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
     2  typedef unsigned short u_int16_t __attribute__ ((__mode__ (__SI__)));
     3  typedef unsigned short int __uint16_t;
     4  
     5  enum {
     6      kIsInvisible = 0x4000,
     7  };
     8  
     9  typedef struct finderinfo {
    10      u_int16_t fdFlags;
    11  } __attribute__ ((__packed__)) finderinfo;
    12  
    13  typedef struct fileinfobuf {
    14      u_int32_t info_length;
    15      u_int32_t data[8];
    16  } fileinfobuf;
    17  
    18  void main() {
    19    fileinfobuf finfo;
    20    finderinfo *finder = (finderinfo *) &finfo.data;
    21  
    22    printf("%d\n", kIsInvisible);
    23    printf("%d\n", (((__uint16_t)((((__uint16_t)(kIsInvisible) & 0xff00) >> 8) |          (((__uint16_t)(kIsInvisible) & 0x00ff) << 8)))));
    24    printf("%d\n", finder->fdFlags);
    25    printf("%d\n", ~(((__uint16_t)((((__uint16_t)(kIsInvisible) & 0xff00) >> 8) |                 (((__uint16_t)(kIsInvisible) & 0x00ff) << 8)))));
    26    printf("%d\n", 0 & ~(((__uint16_t)((((__uint16_t)(kIsInvisible) & 0xff00) >> 8) |             (((__uint16_t)(kIsInvisible) & 0x00ff) << 8)))));
    27  
    28    finder->fdFlags &= ~(((__uint16_t)((((__uint16_t)(kIsInvisible) & 0xff00) >> 8) |             (((__uint16_t)(kIsInvisible) & 0x00ff) << 8))));
    29  
    30    printf("%d\n", finder->fdFlags);
    31  }