db-int.h revision 54925bf60766fbb4f1f2d7c843721406a7b7a3fb
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/*
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * Use is subject to license terms.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef _KRB5_DB2_MISC_H
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define _KRB5_DB2_MISC_H
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#pragma ident "%Z%%M% %I% %E% SMI"
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef __cplusplus
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březinaextern "C" {
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/*
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * Copyright (c) 1991, 1993
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * The Regents of the University of California. All rights reserved.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina *
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * Redistribution and use in source and binary forms, with or without
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * modification, are permitted provided that the following conditions
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * are met:
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * 1. Redistributions of source code must retain the above copyright
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * notice, this list of conditions and the following disclaimer.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * 2. Redistributions in binary form must reproduce the above copyright
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * notice, this list of conditions and the following disclaimer in the
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * documentation and/or other materials provided with the distribution.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * 3. All advertising materials mentioning features or use of this software
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * must display the following acknowledgement:
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * This product includes software developed by the University of
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * California, Berkeley and its contributors.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * 4. Neither the name of the University nor the names of its contributors
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * may be used to endorse or promote products derived from this software
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * without specific prior written permission.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina *
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * SUCH DAMAGE.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina *
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * @(#)compat.h 8.13 (Berkeley) 2/21/94
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef _DB_INT_H_
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define _DB_INT_H_
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <db.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/* deal with autoconf-based stuff */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define DB_LITTLE_ENDIAN 1234
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define DB_BIG_ENDIAN 4321
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <stdlib.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef HAVE_ENDIAN_H
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# include <endian.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef HAVE_MACHINE_ENDIAN_H
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# include <machine/endian.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef HAVE_SYS_PARAM_H
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# include <sys/param.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/* SUNW14resync:
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina The following code is disabled as it correctly determines the
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina endianness of the system. This would break backward compatability
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina for x86 as prior to this resync all architectures are treated
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina similarily - as big endian. See definition of "WORDS_BIGENDIAN" in
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina db-config.h.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina*/
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#if 0
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/* Handle both BIG and LITTLE defined and BYTE_ORDER matches one, or
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina just one defined; both with and without leading underscores.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina Ignore "PDP endian" machines, this code doesn't support them
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina anyways. */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#if !defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN) && !defined(BYTE_ORDER)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# ifdef __LITTLE_ENDIAN__
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define LITTLE_ENDIAN __LITTLE_ENDIAN__
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# ifdef __BIG_ENDIAN__
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define BIG_ENDIAN __BIG_ENDIAN__
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#if !defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN) && !defined(BYTE_ORDER)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# ifdef _LITTLE_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define LITTLE_ENDIAN _LITTLE_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# ifdef _BIG_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define BIG_ENDIAN _BIG_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# ifdef _BYTE_ORDER
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define BYTE_ORDER _BYTE_ORDER
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#if !defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN) && !defined(BYTE_ORDER)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# ifdef __LITTLE_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define LITTLE_ENDIAN __LITTLE_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# ifdef __BIG_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define BIG_ENDIAN __BIG_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# ifdef __BYTE_ORDER
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define BYTE_ORDER __BYTE_ORDER
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#if defined(_MIPSEL) && !defined(LITTLE_ENDIAN)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define LITTLE_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#if defined(_MIPSEB) && !defined(BIG_ENDIAN)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define BIG_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#if defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) && defined(BYTE_ORDER)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# if LITTLE_ENDIAN == BYTE_ORDER
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define DB_BYTE_ORDER DB_LITTLE_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# elif BIG_ENDIAN == BYTE_ORDER
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define DB_BYTE_ORDER DB_BIG_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# else
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# error "LITTLE_ENDIAN and BIG_ENDIAN defined, but can't determine byte order"
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#elif defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define DB_BYTE_ORDER DB_LITTLE_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#elif defined(BIG_ENDIAN) && !defined(LITTLE_ENDIAN)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# define DB_BYTE_ORDER DB_BIG_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#else
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina# error "can't determine byte order from included system headers"
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef WORDS_BIGENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define DB_BYTE_ORDER DB_BIG_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#else
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define DB_BYTE_ORDER DB_LITTLE_ENDIAN
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/* end autoconf-based stuff */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/* include necessary system header files */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef HAVE_UNISTD_H
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <unistd.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <limits.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <fcntl.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <stdio.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <errno.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef HAVE_STDINT_H
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <stdint.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef HAVE_INTTYPES_H
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/* Tru64 5.1: int8_t is defined here, and stdint.h doesn't exist. */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <inttypes.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <sys/types.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <sys/stat.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#include <sys/param.h>
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/* types and constants used for database structure */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define MAX_PAGE_NUMBER 0xffffffff /* >= # of pages in a file */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březinatypedef u_int32_t db_pgno_t;
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define MAX_PAGE_OFFSET 65535 /* >= # of bytes in a page */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březinatypedef u_int16_t indx_t;
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define MAX_REC_NUMBER 0xffffffff /* >= # of records in a tree */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březinatypedef u_int32_t recno_t;
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/*
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * Little endian <==> big endian 32-bit swap macros.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * M_32_SWAP swap a memory location
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * P_32_SWAP swap a referenced memory location
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * P_32_COPY swap from one location to another
83a796ec8de4bde65b11cc8032675406950641faSumit Bose */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define M_32_SWAP(a) { \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina u_int32_t _tmp = a; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&a)[0] = ((char *)&_tmp)[3]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&a)[1] = ((char *)&_tmp)[2]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&a)[2] = ((char *)&_tmp)[1]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&a)[3] = ((char *)&_tmp)[0]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina}
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define P_32_SWAP(a) { \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina u_int32_t _tmp = *(u_int32_t *)a; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)a)[0] = ((char *)&_tmp)[3]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)a)[1] = ((char *)&_tmp)[2]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)a)[2] = ((char *)&_tmp)[1]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)a)[3] = ((char *)&_tmp)[0]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina}
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define P_32_COPY(a, b) { \
3cf7fdfcaedb986f42a6640e26aa057007b64045Jakub Hrozek ((char *)&(b))[0] = ((char *)&(a))[3]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&(b))[1] = ((char *)&(a))[2]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&(b))[2] = ((char *)&(a))[1]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&(b))[3] = ((char *)&(a))[0]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina}
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/*
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * Little endian <==> big endian 16-bit swap macros.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * M_16_SWAP swap a memory location
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * P_16_SWAP swap a referenced memory location
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * P_16_COPY swap from one location to another
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define M_16_SWAP(a) { \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina u_int16_t _tmp = a; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&a)[0] = ((char *)&_tmp)[1]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&a)[1] = ((char *)&_tmp)[0]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina}
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define P_16_SWAP(a) { \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina u_int16_t _tmp = *(u_int16_t *)a; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)a)[0] = ((char *)&_tmp)[1]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)a)[1] = ((char *)&_tmp)[0]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina}
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define P_16_COPY(a, b) { \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&(b))[0] = ((char *)&(a))[1]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina ((char *)&(b))[1] = ((char *)&(a))[0]; \
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina}
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/* open functions for each database type, used in dbopen() */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define __bt_open __kdb2_bt_open
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define __hash_open __kdb2_hash_open
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define __rec_open __kdb2_rec_open
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define __dbpanic __kdb2_dbpanic
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel BřezinaDB *__bt_open __P((const char *, int, int, const BTREEINFO *, int));
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel BřezinaDB *__hash_open __P((const char *, int, int, const HASHINFO *, int));
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel BřezinaDB *__rec_open __P((const char *, int, int, const RECNOINFO *, int));
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březinavoid __dbpanic __P((DB *dbp));
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/*
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * There is no portable way to figure out the maximum value of a file
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * offset, so we put it here.
83a796ec8de4bde65b11cc8032675406950641faSumit Bose */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef OFF_T_MAX
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define DB_OFF_T_MAX OFF_T_MAX
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#else
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define DB_OFF_T_MAX LONG_MAX
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef O_ACCMODE /* POSIX 1003.1 access mode mask. */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina/*
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * If you can't provide lock values in the open(2) call. Note, this
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina * allows races to happen.
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef O_EXLOCK /* 4.4BSD extension. */
3cf7fdfcaedb986f42a6640e26aa057007b64045Jakub Hrozek#define O_EXLOCK 0
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef O_SHLOCK /* 4.4BSD extension. */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define O_SHLOCK 0
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef EFTYPE
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define EFTYPE EINVAL /* POSIX 1003.1 format errno. */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef STDERR_FILENO
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define STDIN_FILENO 0 /* ANSI C #defines */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define STDOUT_FILENO 1
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define STDERR_FILENO 2
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef SEEK_END
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define SEEK_SET 0 /* POSIX 1003.1 seek values */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define SEEK_CUR 1
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define SEEK_END 2
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef NULL /* ANSI C #defines NULL everywhere. */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define NULL 0
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef MAX /* Usually found in <sys/param.h>. */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define MAX(_a,_b) ((_a)<(_b)?(_b):(_a))
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef MIN /* Usually found in <sys/param.h>. */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef S_ISDIR /* POSIX 1003.1 file type tests. */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define S_ISDIR(m) ((m & 0170000) == 0040000) /* directory */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define S_ISCHR(m) ((m & 0170000) == 0020000) /* char special */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define S_ISBLK(m) ((m & 0170000) == 0060000) /* block special */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define S_ISREG(m) ((m & 0170000) == 0100000) /* regular file */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define S_ISFIFO(m) ((m & 0170000) == 0010000) /* fifo */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef S_ISLNK /* BSD POSIX 1003.1 extensions */
83a796ec8de4bde65b11cc8032675406950641faSumit Bose#define S_ISLNK(m) ((m & 0170000) == 0120000) /* symbolic link */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define S_ISSOCK(m) ((m & 0170000) == 0140000) /* socket */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifndef O_BINARY
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#define O_BINARY 0 /* Needed for Win32 compiles */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif /* _DB_INT_H_ */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#ifdef __cplusplus
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina}
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina#endif /* !_KRB5_DB2_MISC_H */
f7ea0b1d46197275c87bdc73a6e38a6fd7f855eePavel Březina