1 /*++
2 /* NAME
3 /*	mkmap_lmdb 3
4 /* SUMMARY
5 /*	create or open database, LMDB style
6 /* SYNOPSIS
7 /*	#include <mkmap.h>
8 /*
9 /*	MKMAP	*mkmap_lmdb_open(path)
10 /*	const char *path;
11 /*
12 /* DESCRIPTION
13 /*	This module implements support for creating LMDB databases.
14 /*
15 /*	mkmap_lmdb_open() takes a file name, appends the ".lmdb"
16 /*	suffix, and does whatever initialization is required
17 /*	before the OpenLDAP LMDB open routine is called.
18 /*
19 /*	All errors are fatal.
20 /* SEE ALSO
21 /*	dict_lmdb(3), LMDB dictionary interface.
22 /* LICENSE
23 /* .ad
24 /* .fi
25 /*	The Secure Mailer license must be distributed with this software.
26 /* AUTHOR(S)
27 /*	Howard Chu
28 /*	Symas Corporation
29 /*--*/
30 
31 /* System library. */
32 
33 #include <sys_defs.h>
34 #include <sys/stat.h>
35 #include <unistd.h>
36 #include <errno.h>
37 
38 /* Utility library. */
39 
40 #include <msg.h>
41 #include <mymalloc.h>
42 #include <stringops.h>
43 #include <dict.h>
44 #include <dict_lmdb.h>
45 #include <myflock.h>
46 #include <warn_stat.h>
47 
48 #ifdef HAS_LMDB
49 #ifdef PATH_LMDB_H
50 #include PATH_LMDB_H
51 #else
52 #include <lmdb.h>
53 #endif
54 
55 /* Global library. */
56 
57 #include <mail_conf.h>
58 #include <mail_params.h>
59 
60 /* Application-specific. */
61 
62 #include "mkmap.h"
63 
64 /* mkmap_lmdb_open */
65 
mkmap_lmdb_open(const char * path)66 MKMAP  *mkmap_lmdb_open(const char *path)
67 {
68     MKMAP  *mkmap = (MKMAP *) mymalloc(sizeof(*mkmap));
69 
70     /*
71      * Fill in the generic members.
72      */
73     mkmap->open = dict_lmdb_open;
74     mkmap->after_open = 0;
75     mkmap->after_close = 0;
76 
77     /*
78      * LMDB uses MVCC so it needs no special lock management here.
79      */
80 
81     return (mkmap);
82 }
83 
84 #endif
85