xref: /openbsd-src/lib/libc/hidden/db.h (revision b5745d0870695a57f2d2806a7925238b4b234f9a)
1*b5745d08Sguenther /*	$OpenBSD: db.h,v 1.4 2016/05/29 20:47:49 guenther Exp $	*/
2181ba704Sguenther /*
3181ba704Sguenther  * Copyright (c) 2015 Philip Guenther <guenther@openbsd.org>
4181ba704Sguenther  *
5181ba704Sguenther  * Permission to use, copy, modify, and distribute this software for any
6181ba704Sguenther  * purpose with or without fee is hereby granted, provided that the above
7181ba704Sguenther  * copyright notice and this permission notice appear in all copies.
8181ba704Sguenther  *
9181ba704Sguenther  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10181ba704Sguenther  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11181ba704Sguenther  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12181ba704Sguenther  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13181ba704Sguenther  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14181ba704Sguenther  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15181ba704Sguenther  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16181ba704Sguenther  */
17181ba704Sguenther 
18181ba704Sguenther #ifndef _LIBC_DB_H_
19181ba704Sguenther #define	_LIBC_DB_H_
20181ba704Sguenther 
21181ba704Sguenther #include_next <db.h>
22181ba704Sguenther 
23d994eebbSguenther /*
24d994eebbSguenther  * Little endian <==> big endian 32-bit swap macros.
25d994eebbSguenther  *	M_32_SWAP	swap a memory location
26d994eebbSguenther  *	P_32_SWAP	swap a referenced memory location
27d994eebbSguenther  *	P_32_COPY	swap from one location to another
28d994eebbSguenther  */
29d994eebbSguenther #define	M_32_SWAP(a) {							\
30d994eebbSguenther 	u_int32_t _tmp = a;						\
31d994eebbSguenther 	((char *)&a)[0] = ((char *)&_tmp)[3];				\
32d994eebbSguenther 	((char *)&a)[1] = ((char *)&_tmp)[2];				\
33d994eebbSguenther 	((char *)&a)[2] = ((char *)&_tmp)[1];				\
34d994eebbSguenther 	((char *)&a)[3] = ((char *)&_tmp)[0];				\
35d994eebbSguenther }
36d994eebbSguenther #define	P_32_SWAP(a) {							\
37d994eebbSguenther 	u_int32_t _tmp = *(u_int32_t *)a;				\
38d994eebbSguenther 	((char *)a)[0] = ((char *)&_tmp)[3];				\
39d994eebbSguenther 	((char *)a)[1] = ((char *)&_tmp)[2];				\
40d994eebbSguenther 	((char *)a)[2] = ((char *)&_tmp)[1];				\
41d994eebbSguenther 	((char *)a)[3] = ((char *)&_tmp)[0];				\
42d994eebbSguenther }
43d994eebbSguenther #define	P_32_COPY(a, b) {						\
44d994eebbSguenther 	((char *)&(b))[0] = ((char *)&(a))[3];				\
45d994eebbSguenther 	((char *)&(b))[1] = ((char *)&(a))[2];				\
46d994eebbSguenther 	((char *)&(b))[2] = ((char *)&(a))[1];				\
47d994eebbSguenther 	((char *)&(b))[3] = ((char *)&(a))[0];				\
48d994eebbSguenther }
49d994eebbSguenther 
50d994eebbSguenther /*
51d994eebbSguenther  * Little endian <==> big endian 16-bit swap macros.
52d994eebbSguenther  *	M_16_SWAP	swap a memory location
53d994eebbSguenther  *	P_16_SWAP	swap a referenced memory location
54d994eebbSguenther  *	P_16_COPY	swap from one location to another
55d994eebbSguenther  */
56d994eebbSguenther #define	M_16_SWAP(a) {							\
57d994eebbSguenther 	u_int16_t _tmp = a;						\
58d994eebbSguenther 	((char *)&a)[0] = ((char *)&_tmp)[1];				\
59d994eebbSguenther 	((char *)&a)[1] = ((char *)&_tmp)[0];				\
60d994eebbSguenther }
61d994eebbSguenther #define	P_16_SWAP(a) {							\
62d994eebbSguenther 	u_int16_t _tmp = *(u_int16_t *)a;				\
63d994eebbSguenther 	((char *)a)[0] = ((char *)&_tmp)[1];				\
64d994eebbSguenther 	((char *)a)[1] = ((char *)&_tmp)[0];				\
65d994eebbSguenther }
66d994eebbSguenther #define	P_16_COPY(a, b) {						\
67d994eebbSguenther 	((char *)&(b))[0] = ((char *)&(a))[1];				\
68d994eebbSguenther 	((char *)&(b))[1] = ((char *)&(a))[0];				\
69d994eebbSguenther }
70d994eebbSguenther 
71181ba704Sguenther __BEGIN_HIDDEN_DECLS
72181ba704Sguenther DB	*__bt_open(const char *, int, int, const BTREEINFO *, int);
73181ba704Sguenther DB	*__hash_open(const char *, int, int, const HASHINFO *, int);
74181ba704Sguenther DB	*__rec_open(const char *, int, int, const RECNOINFO *, int);
75181ba704Sguenther void	__dbpanic(DB *dbp);
76*b5745d08Sguenther 
77*b5745d08Sguenther /* Default hash function, from db/hash/hash_func.c */
78*b5745d08Sguenther u_int32_t	__default_hash(const void *, size_t);
79181ba704Sguenther __END_HIDDEN_DECLS
80181ba704Sguenther 
81181ba704Sguenther PROTO_NORMAL(dbopen);
82181ba704Sguenther 
83181ba704Sguenther #endif /* !_LIBC_DB_H_ */
84