Annotation of sys/lib/libkern/libkern.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: libkern.h,v 1.24 2007/05/04 22:17:30 deraadt Exp $ */
2: /* $NetBSD: libkern.h,v 1.7 1996/03/14 18:52:08 christos Exp $ */
3:
4: /*-
5: * Copyright (c) 1992, 1993
6: * The Regents of the University of California. All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. Neither the name of the University nor the names of its contributors
17: * may be used to endorse or promote products derived from this software
18: * without specific prior written permission.
19: *
20: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30: * SUCH DAMAGE.
31: *
32: * @(#)libkern.h 8.1 (Berkeley) 6/10/93
33: */
34:
35: #ifndef __LIBKERN_H__
36: #define __LIBKERN_H__
37:
38: #include <sys/types.h>
39:
40: #ifndef LIBKERN_INLINE
41: #define LIBKERN_INLINE static __inline
42: #define LIBKERN_BODY
43: #endif
44:
45:
46: LIBKERN_INLINE int imax(int, int);
47: LIBKERN_INLINE int imin(int, int);
48: LIBKERN_INLINE u_int max(u_int, u_int);
49: LIBKERN_INLINE u_int min(u_int, u_int);
50: LIBKERN_INLINE long lmax(long, long);
51: LIBKERN_INLINE long lmin(long, long);
52: LIBKERN_INLINE u_long ulmax(u_long, u_long);
53: LIBKERN_INLINE u_long ulmin(u_long, u_long);
54: LIBKERN_INLINE int abs(int);
55:
56: #ifdef LIBKERN_BODY
57: LIBKERN_INLINE int
58: imax(a, b)
59: int a, b;
60: {
61: return (a > b ? a : b);
62: }
63: LIBKERN_INLINE int
64: imin(a, b)
65: int a, b;
66: {
67: return (a < b ? a : b);
68: }
69: LIBKERN_INLINE long
70: lmax(a, b)
71: long a, b;
72: {
73: return (a > b ? a : b);
74: }
75: LIBKERN_INLINE long
76: lmin(a, b)
77: long a, b;
78: {
79: return (a < b ? a : b);
80: }
81: LIBKERN_INLINE u_int
82: max(a, b)
83: u_int a, b;
84: {
85: return (a > b ? a : b);
86: }
87: LIBKERN_INLINE u_int
88: min(a, b)
89: u_int a, b;
90: {
91: return (a < b ? a : b);
92: }
93: LIBKERN_INLINE u_long
94: ulmax(a, b)
95: u_long a, b;
96: {
97: return (a > b ? a : b);
98: }
99: LIBKERN_INLINE u_long
100: ulmin(a, b)
101: u_long a, b;
102: {
103: return (a < b ? a : b);
104: }
105:
106: LIBKERN_INLINE int
107: abs(j)
108: int j;
109: {
110: return(j < 0 ? -j : j);
111: }
112: #endif
113:
114: #ifdef NDEBUG /* tradition! */
115: #define assert(e) ((void)0)
116: #else
117: #ifdef __STDC__
118: #define assert(e) ((e) ? (void)0 : \
119: __assert("", __FILE__, __LINE__, #e))
120: #else
121: #define assert(e) ((e) ? (void)0 : \
122: __assert("", __FILE__, __LINE__, "e"))
123: #endif
124: #endif
125:
126: #ifndef DIAGNOSTIC
127: #define KASSERT(e) ((void)0)
128: #else
129: #ifdef __STDC__
130: #define KASSERT(e) ((e) ? (void)0 : \
131: __assert("diagnostic ", __FILE__, __LINE__, #e))
132: #else
133: #define KASSERT(e) ((e) ? (void)0 : \
134: __assert("diagnostic ", __FILE__, __LINE__, "e"))
135: #endif
136: #endif
137:
138: #ifndef DEBUG
139: #define KDASSERT(e) ((void)0)
140: #else
141: #ifdef __STDC__
142: #define KDASSERT(e) ((e) ? (void)0 : \
143: __assert("debugging ", __FILE__, __LINE__, #e))
144: #else
145: #define KDASSERT(e) ((e) ? (void)0 : \
146: __assert("debugging ", __FILE__, __LINE__, "e"))
147: #endif
148: #endif
149:
150: /* Prototypes for non-quad routines. */
151: void __assert(const char *, const char *, int, const char *)
152: __attribute__ ((__noreturn__));
153: int bcmp(const void *, const void *, size_t);
154: void bzero(void *, size_t);
155: int ffs(int);
156: void *memchr(const void *, int, size_t);
157: int memcmp(const void *, const void *, size_t);
158: u_long random(void);
159: void srandom(u_long);
160: int scanc(u_int, const u_char *, const u_char [], int);
161: int skpc(int, size_t, u_char *);
162: size_t strlen(const char *);
163: char *strncpy(char *, const char *, size_t)
164: __attribute__ ((__bounded__(__string__,1,3)));
165: size_t strlcpy(char *, const char *, size_t)
166: __attribute__ ((__bounded__(__string__,1,3)));
167: size_t strlcat(char *, const char *, size_t)
168: __attribute__ ((__bounded__(__string__,1,3)));
169: int strcmp(const char *, const char *);
170: int strncmp(const char *, const char *, size_t);
171: int strncasecmp(const char *, const char *, size_t);
172: int getsn(char *, int);
173: char *strchr(const char *, int);
174: char *strrchr(const char *, int);
175:
176: #endif /* __LIBKERN_H__ */
CVSweb