Added endianness check.

pull/15/head
Jussi Pakkanen 12 years ago
parent aef5ef362d
commit 919fcbb6ef
  1. 6
      interpreter.py
  2. 7
      test cases/26 endian/builder.txt
  3. 26
      test cases/26 endian/prog.c

@ -46,7 +46,7 @@ class Host(InterpreterObject):
InterpreterObject.__init__(self)
self.methods.update({'pointer_size' : self.get_ptrsize_method,
'name' : self.get_name_method,
'is_little_endian' : self.is_little_endian_method,
'is_big_endian' : self.is_big_endian_method,
})
def get_ptrsize_method(self, args):
@ -57,8 +57,8 @@ class Host(InterpreterObject):
def get_name_method(self, args):
return platform.system().lower()
def is_little_endian_method(self, args):
return sys.byteorder == 'little'
def is_big_endian_method(self, args):
return sys.byteorder != 'little'
class IncludeDirs(InterpreterObject):
def __init__(self, curdir, dirs):

@ -0,0 +1,7 @@
project('endian check', 'c')
if(host.is_big_endian())
add_global_arguments('c', '-DIS_BE')
endif
add_test('endiantest', executable('prog', 'prog.c'))

@ -0,0 +1,26 @@
#include<stdint.h>
int is_big_endian(void) {
union {
uint32_t i;
char c[4];
} bint = {0x01020304};
return bint.c[0] == 1;
}
int main(int argc, char **argv) {
int is_be_check = is_big_endian();
int is_be;
#ifdef IS_BE
is_be = 1;
#else
is_be = 0;
#endif
if(is_be_check && is_be)
return 0;
if(!is_be_check && !is_be)
return 0;
return 1;
}
Loading…
Cancel
Save