1 /* libc/sys/linux/sys/cdefs.h - Helper macros for K&R vs. ANSI C compat. */
2 
3 /* Written 2000 by Werner Almesberger */
4 
5 /*-
6  * Copyright (c) 1991, 1993
7  *  The Regents of the University of California.  All rights reserved.
8  *
9  * This code is derived from software contributed to Berkeley by
10  * Berkeley Software Design, Inc.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions and the following disclaimer.
17  * 2. Redistributions in binary form must reproduce the above copyright
18  *    notice, this list of conditions and the following disclaimer in the
19  *    documentation and/or other materials provided with the distribution.
20  * 4. Neither the name of the University nor the names of its contributors
21  *    may be used to endorse or promote products derived from this software
22  *    without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  *  @(#)cdefs.h 8.8 (Berkeley) 1/9/95
37  * $FreeBSD$
38  */
39 
40 #ifndef _SYS_DEFS_H_
41 #define _SYS_DEFS_H_
42 
43 #include "types.h"
44 #include "compiler.h"
45 
46 #ifndef __DEQUALIFY
47 #define __DEQUALIFY(type, var) ((type)(uintptr_t)(const volatile void *)(var))
48 #endif
49 
50 #ifndef offsetof
51 #define offsetof(type, field) \
52     ((size_t)(uintptr_t)((const volatile void *)&((type *)0)->field))
53 #endif
54 
55 #ifndef __offsetof
56 #define __offsetof(type, field) offsetof(type, field)
57 #endif
58 
59 #ifndef __containerof
60 #define __containerof(ptr, type, field) \
61     __DEQUALIFY(type *, (const volatile char *)(ptr) - offsetof(type, field))
62 #endif
63 
64 #ifndef container_of
65 #define container_of(ptr, type, field) __containerof(ptr, type, field)
66 #endif
67 
68 
69 /*
70  * Definitions for byte order, according to byte significance from low
71  * address to high.
72  */
73 #ifndef _LITTLE_ENDIAN
74 #define _LITTLE_ENDIAN  1234    /* LSB first: i386, vax */
75 #endif
76 #ifndef _BIG_ENDIAN
77 #define _BIG_ENDIAN     4321    /* MSB first: 68000, ibm, net */
78 #endif
79 
80 #ifndef LITTLE_ENDIAN
81 #define LITTLE_ENDIAN   _LITTLE_ENDIAN
82 #endif
83 #ifndef BIG_ENDIAN
84 #define BIG_ENDIAN      _BIG_ENDIAN
85 #endif
86 
87 #ifndef _BYTE_ORDER
88 #define _BYTE_ORDER     _LITTLE_ENDIAN
89 #endif
90 #ifndef BYTE_ORDER
91 #define BYTE_ORDER      _BYTE_ORDER
92 #endif
93 
94 #endif /* _SYS_DEFS_H_ */
95