xref: /freebsd/lib/libc/iconv/citrus_db_file.h (revision ad30f8e79bd1007cc2476e491bd21b4f5e389e0a)
1*ad30f8e7SGabor Kovesdan /* $FreeBSD$ */
2*ad30f8e7SGabor Kovesdan /* $NetBSD: citrus_db_file.h,v 1.4 2008/02/10 05:58:22 junyoung Exp $ */
3*ad30f8e7SGabor Kovesdan 
4*ad30f8e7SGabor Kovesdan /*-
5*ad30f8e7SGabor Kovesdan  * Copyright (c)2003 Citrus Project,
6*ad30f8e7SGabor Kovesdan  * All rights reserved.
7*ad30f8e7SGabor Kovesdan  *
8*ad30f8e7SGabor Kovesdan  * Redistribution and use in source and binary forms, with or without
9*ad30f8e7SGabor Kovesdan  * modification, are permitted provided that the following conditions
10*ad30f8e7SGabor Kovesdan  * are met:
11*ad30f8e7SGabor Kovesdan  * 1. Redistributions of source code must retain the above copyright
12*ad30f8e7SGabor Kovesdan  *    notice, this list of conditions and the following disclaimer.
13*ad30f8e7SGabor Kovesdan  * 2. Redistributions in binary form must reproduce the above copyright
14*ad30f8e7SGabor Kovesdan  *    notice, this list of conditions and the following disclaimer in the
15*ad30f8e7SGabor Kovesdan  *    documentation and/or other materials provided with the distribution.
16*ad30f8e7SGabor Kovesdan  *
17*ad30f8e7SGabor Kovesdan  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18*ad30f8e7SGabor Kovesdan  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*ad30f8e7SGabor Kovesdan  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*ad30f8e7SGabor Kovesdan  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21*ad30f8e7SGabor Kovesdan  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*ad30f8e7SGabor Kovesdan  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23*ad30f8e7SGabor Kovesdan  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24*ad30f8e7SGabor Kovesdan  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25*ad30f8e7SGabor Kovesdan  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26*ad30f8e7SGabor Kovesdan  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27*ad30f8e7SGabor Kovesdan  * SUCH DAMAGE.
28*ad30f8e7SGabor Kovesdan  */
29*ad30f8e7SGabor Kovesdan 
30*ad30f8e7SGabor Kovesdan #ifndef _CITRUS_DB_FILE_H_
31*ad30f8e7SGabor Kovesdan #define _CITRUS_DB_FILE_H_
32*ad30f8e7SGabor Kovesdan 
33*ad30f8e7SGabor Kovesdan /*
34*ad30f8e7SGabor Kovesdan  * db format:
35*ad30f8e7SGabor Kovesdan  *  +---
36*ad30f8e7SGabor Kovesdan  *  | header
37*ad30f8e7SGabor Kovesdan  *  |  - magic
38*ad30f8e7SGabor Kovesdan  *  |  - num entries
39*ad30f8e7SGabor Kovesdan  *  +---
40*ad30f8e7SGabor Kovesdan  *  | entry directory
41*ad30f8e7SGabor Kovesdan  *  |  +------------
42*ad30f8e7SGabor Kovesdan  *  |  | entry0
43*ad30f8e7SGabor Kovesdan  *  |  |  - hash value
44*ad30f8e7SGabor Kovesdan  *  |  |  - next entry
45*ad30f8e7SGabor Kovesdan  *  |  |  - key offset
46*ad30f8e7SGabor Kovesdan  *  |  |  - key len
47*ad30f8e7SGabor Kovesdan  *  |  |  - data offset
48*ad30f8e7SGabor Kovesdan  *  |  |  - data size
49*ad30f8e7SGabor Kovesdan  *  |  |---
50*ad30f8e7SGabor Kovesdan  *  |  | entry1
51*ad30f8e7SGabor Kovesdan  *  |  | ..
52*ad30f8e7SGabor Kovesdan  *  |  | entryN
53*ad30f8e7SGabor Kovesdan  *  |  +---
54*ad30f8e7SGabor Kovesdan  *  +---
55*ad30f8e7SGabor Kovesdan  *  | key table
56*ad30f8e7SGabor Kovesdan  *  |  - key0
57*ad30f8e7SGabor Kovesdan  *  |   ...
58*ad30f8e7SGabor Kovesdan  *  |  - keyN
59*ad30f8e7SGabor Kovesdan  *  +---
60*ad30f8e7SGabor Kovesdan  *  | data table
61*ad30f8e7SGabor Kovesdan  *  |  - data0
62*ad30f8e7SGabor Kovesdan  *  |   ...
63*ad30f8e7SGabor Kovesdan  *  |  - dataN
64*ad30f8e7SGabor Kovesdan  *  +---
65*ad30f8e7SGabor Kovesdan  */
66*ad30f8e7SGabor Kovesdan 
67*ad30f8e7SGabor Kovesdan #define _CITRUS_DB_MAGIC_SIZE	8
68*ad30f8e7SGabor Kovesdan #define _CITRUS_DB_HEADER_SIZE	16
69*ad30f8e7SGabor Kovesdan struct _citrus_db_header_x {
70*ad30f8e7SGabor Kovesdan 	char		dhx_magic[_CITRUS_DB_MAGIC_SIZE];
71*ad30f8e7SGabor Kovesdan 	uint32_t	dhx_num_entries;
72*ad30f8e7SGabor Kovesdan 	uint32_t	dhx_entry_offset;
73*ad30f8e7SGabor Kovesdan } __packed;
74*ad30f8e7SGabor Kovesdan 
75*ad30f8e7SGabor Kovesdan struct _citrus_db_entry_x {
76*ad30f8e7SGabor Kovesdan 	uint32_t	dex_hash_value;
77*ad30f8e7SGabor Kovesdan 	uint32_t	dex_next_offset;
78*ad30f8e7SGabor Kovesdan 	uint32_t	dex_key_offset;
79*ad30f8e7SGabor Kovesdan 	uint32_t	dex_key_size;
80*ad30f8e7SGabor Kovesdan 	uint32_t	dex_data_offset;
81*ad30f8e7SGabor Kovesdan 	uint32_t	dex_data_size;
82*ad30f8e7SGabor Kovesdan } __packed;
83*ad30f8e7SGabor Kovesdan #define _CITRUS_DB_ENTRY_SIZE	24
84*ad30f8e7SGabor Kovesdan 
85*ad30f8e7SGabor Kovesdan #endif
86