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