00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "db_config.h"
00011
00012 #ifndef NO_SYSTEM_INCLUDES
00013 #include <sys/types.h>
00014 #endif
00015
00016 #include "db_int.h"
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 int
00028 __db_isbigendian()
00029 {
00030 union {
00031 long l;
00032 char c[sizeof(long)];
00033 } u;
00034
00035 u.l = 1;
00036 return (u.c[sizeof(long) - 1] == 1);
00037 }
00038
00039
00040
00041
00042
00043
00044
00045
00046 int
00047 __db_byteorder(dbenv, lorder)
00048 DB_ENV *dbenv;
00049 int lorder;
00050 {
00051 int is_bigendian;
00052
00053 is_bigendian = __db_isbigendian();
00054
00055 switch (lorder) {
00056 case 0:
00057 break;
00058 case 1234:
00059 if (is_bigendian)
00060 return (DB_SWAPBYTES);
00061 break;
00062 case 4321:
00063 if (!is_bigendian)
00064 return (DB_SWAPBYTES);
00065 break;
00066 default:
00067 __db_err(dbenv,
00068 "unsupported byte order, only big and little-endian supported");
00069 return (EINVAL);
00070 }
00071 return (0);
00072 }