Update from db-2.3.12.
[kopensolaris-gnu/glibc.git] / db2 / common / db_byteorder.c
1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 1996, 1997
5  *      Sleepycat Software.  All rights reserved.
6  */
7
8 #include "config.h"
9
10 #ifndef lint
11 static const char sccsid[] = "@(#)db_byteorder.c        10.4 (Sleepycat) 9/4/97";
12 #endif /* not lint */
13
14 #ifndef NO_SYSTEM_INCLUDES
15 #include <sys/types.h>
16
17 #ifdef HAVE_ENDIAN_H
18 #include <endian.h>
19 #if BYTE_ORDER == BIG_ENDIAN
20 #define WORDS_BIGENDIAN 1
21 #endif
22 #endif
23
24 #include <errno.h>
25 #endif
26
27 #include "db_int.h"
28 #include "common_ext.h"
29
30 /*
31  * __db_byteorder --
32  *      Return if we need to do byte swapping, checking for illegal
33  *      values.
34  *
35  * PUBLIC: int __db_byteorder __P((DB_ENV *, int));
36  */
37 int
38 __db_byteorder(dbenv, lorder)
39         DB_ENV *dbenv;
40         int lorder;
41 {
42         switch (lorder) {
43         case 0:
44                 break;
45         case 1234:
46 #if defined(WORDS_BIGENDIAN)
47                 return (DB_SWAPBYTES);
48 #else
49                 break;
50 #endif
51         case 4321:
52 #if defined(WORDS_BIGENDIAN)
53                 break;
54 #else
55                 return (DB_SWAPBYTES);
56 #endif
57         default:
58                 __db_err(dbenv,
59                     "illegal byte order, only big and little-endian supported");
60                 return (EINVAL);
61         }
62         return (0);
63 }