1.\" $NetBSD: cdbr.3,v 1.5 2017/10/24 17:01:15 abhinav Exp $ 2.\" 3.\" Copyright (c) 2010 The NetBSD Foundation, Inc. 4.\" All rights reserved. 5.\" 6.\" This code is derived from software contributed to The NetBSD Foundation 7.\" by Joerg Sonnenberger. 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.\" 12.\" 1. Redistributions of source code must retain the above copyright 13.\" notice, this list of conditions and the following disclaimer. 14.\" 2. Redistributions in binary form must reproduce the above copyright 15.\" notice, this list of conditions and the following disclaimer in 16.\" the documentation and/or other materials provided with the 17.\" distribution. 18.\" 19.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 22.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 23.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 24.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 25.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 27.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 29.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.Dd October 24, 2017 32.Dt CDBR 3 33.Os 34.Sh NAME 35.Nm cdbr , 36.Nm cdbr_open , 37.Nm cdbr_open_mem , 38.Nm cdbr_entries , 39.Nm cdbr_get , 40.Nm cdbr_find , 41.Nm cdbr_close 42.Nd constant database access methods 43.Sh SYNOPSIS 44.Ft "struct cdbr *" 45.Fn cdbr_open "const char *path" "int flags" 46.Ft "struct cdbr *" 47.Fo cdbr_open_mem 48.Fa "void *base" 49.Fa "size_t size" 50.Fa "void (*unmap)(void *, void *, size_t)" 51.Fa "void *cookie" 52.Fc 53.Ft uint32_t 54.Fn cdbr_entries "struct cdbr *cdbr" 55.Ft int 56.Fn cdbr_get "struct cdbr *cdbr" "uint32_t index" "const void **data" "size_t *datalen" 57.Ft int 58.Fo cdbr_find 59.Fa "struct cdbr *cdbr" 60.Fa "const void *key" 61.Fa "size_t keylen" 62.Fa "const void **data" 63.Fa "size_t *datalen" 64.Fc 65.Ft void 66.Fn cdbr_close "struct cdbr *cdbr" 67.Sh DESCRIPTION 68The 69.Nm 70library provides a space efficient (key,value) database based 71on perfect hashing. 72.Pp 73A cdb database is opened for reading by calling 74.Fn cdbr_open . 75The only supported value for 76.Va flags 77is 78.Dv CDBR_DEFAULT . 79The function returns a handle to pass to the other functions. 80The database is closed by invoking 81.Fn cdbr_close . 82All resources associated with the handle are freed and the memory 83returned by 84.Fn cdbr_get 85and 86.Fn cdbr_find 87is invalidated. 88.Fn cdbr_open_mem 89works like 90.Fn cdbr_open , 91but takes a memory reference to the content of the database file. 92If 93.Va unmap 94is not 95.Dv NULL , 96it is called by 97.Fn cdbr_close 98with 99.Va cookie , 100.Va base 101and 102.Va size 103as arguments. 104It is not called by 105.Fn cdbr_open_mem 106on error. 107.Pp 108The number of records in the database can be obtained by calling 109.Fn cdbr_entries . 110Records can be obtained by record number using 111.Fn cdbr_get 112or by key using 113.Fn cdbr_find . 114Both functions return 0 on success and update 115.Va data 116and 117.Va datalen 118accordingly. 119The location 120.Va *data 121remains valid until 122.Fn cdbr_close 123is called. 124It is the responsibility of the caller of 125.Fn cdbr_find 126to ensure that the key matches the returned data. 127The function returns the only possible match, but the database doesn't store 128the keys to minimize overhead. 129.Sh SEE ALSO 130.Xr nbperf 1 , 131.Xr cdbw 3 , 132.Xr db 3 , 133.Xr cdb 5 134.Sh HISTORY 135Support for the 136.Nm cdb 137format first appeared in 138.Nx 6.0 . 139.Sh AUTHORS 140The 141.Nm cdbr 142and 143.Nm cdbw 144functions have been written by 145.An Joerg Sonnenberger Aq Mt joerg@NetBSD.org . 146