@ohos-ports/lmdb 2.5.3-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +536 -0
  3. package/SECURITY.md +12 -0
  4. package/binding.gyp +111 -0
  5. package/build/Release/lmdb.node +0 -0
  6. package/caching.js +156 -0
  7. package/dependencies/lmdb/libraries/liblmdb/COPYRIGHT +20 -0
  8. package/dependencies/lmdb/libraries/liblmdb/Doxyfile +1631 -0
  9. package/dependencies/lmdb/libraries/liblmdb/LICENSE +47 -0
  10. package/dependencies/lmdb/libraries/liblmdb/Makefile +136 -0
  11. package/dependencies/lmdb/libraries/liblmdb/chacha8.c +183 -0
  12. package/dependencies/lmdb/libraries/liblmdb/chacha8.h +14 -0
  13. package/dependencies/lmdb/libraries/liblmdb/crypto.c +121 -0
  14. package/dependencies/lmdb/libraries/liblmdb/intro.doc +192 -0
  15. package/dependencies/lmdb/libraries/liblmdb/lmdb.h +1792 -0
  16. package/dependencies/lmdb/libraries/liblmdb/mdb.c +12429 -0
  17. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.1 +74 -0
  18. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.c +106 -0
  19. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.1 +53 -0
  20. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.c +154 -0
  21. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.1 +94 -0
  22. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.c +333 -0
  23. package/dependencies/lmdb/libraries/liblmdb/mdb_load.1 +97 -0
  24. package/dependencies/lmdb/libraries/liblmdb/mdb_load.c +530 -0
  25. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.1 +83 -0
  26. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.c +276 -0
  27. package/dependencies/lmdb/libraries/liblmdb/midl.c +452 -0
  28. package/dependencies/lmdb/libraries/liblmdb/midl.h +208 -0
  29. package/dependencies/lmdb/libraries/liblmdb/module.c +101 -0
  30. package/dependencies/lmdb/libraries/liblmdb/module.h +16 -0
  31. package/dependencies/lmdb/libraries/liblmdb/mtest.c +178 -0
  32. package/dependencies/lmdb/libraries/liblmdb/mtest2.c +124 -0
  33. package/dependencies/lmdb/libraries/liblmdb/mtest3.c +133 -0
  34. package/dependencies/lmdb/libraries/liblmdb/mtest4.c +168 -0
  35. package/dependencies/lmdb/libraries/liblmdb/mtest5.c +135 -0
  36. package/dependencies/lmdb/libraries/liblmdb/mtest6.c +141 -0
  37. package/dependencies/lmdb/libraries/liblmdb/mtest_enc.c +190 -0
  38. package/dependencies/lmdb/libraries/liblmdb/mtest_enc2.c +189 -0
  39. package/dependencies/lmdb/libraries/liblmdb/mtest_remap.c +177 -0
  40. package/dependencies/lmdb/libraries/liblmdb/sample-bdb.txt +73 -0
  41. package/dependencies/lmdb/libraries/liblmdb/sample-mdb.txt +62 -0
  42. package/dependencies/lmdb/libraries/liblmdb/tooltag +27 -0
  43. package/dependencies/lmdb-data-v1/libraries/liblmdb/COPYRIGHT +20 -0
  44. package/dependencies/lmdb-data-v1/libraries/liblmdb/Doxyfile +1631 -0
  45. package/dependencies/lmdb-data-v1/libraries/liblmdb/LICENSE +47 -0
  46. package/dependencies/lmdb-data-v1/libraries/liblmdb/Makefile +118 -0
  47. package/dependencies/lmdb-data-v1/libraries/liblmdb/intro.doc +192 -0
  48. package/dependencies/lmdb-data-v1/libraries/liblmdb/lmdb.h +1653 -0
  49. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb.c +11359 -0
  50. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.1 +61 -0
  51. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.c +84 -0
  52. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.1 +40 -0
  53. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.c +135 -0
  54. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.1 +81 -0
  55. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.c +319 -0
  56. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.1 +84 -0
  57. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.c +492 -0
  58. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.1 +70 -0
  59. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.c +264 -0
  60. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.c +421 -0
  61. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.h +200 -0
  62. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest.c +177 -0
  63. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest2.c +124 -0
  64. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest3.c +133 -0
  65. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest4.c +168 -0
  66. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest5.c +135 -0
  67. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest6.c +141 -0
  68. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-bdb.txt +73 -0
  69. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-mdb.txt +62 -0
  70. package/dependencies/lmdb-data-v1/libraries/liblmdb/tooltag +27 -0
  71. package/dependencies/lz4/LICENSE +11 -0
  72. package/dependencies/lz4/lib/LICENSE +24 -0
  73. package/dependencies/lz4/lib/README.md +137 -0
  74. package/dependencies/lz4/lib/dll/example/README.md +69 -0
  75. package/dependencies/lz4/lib/dll/example/fullbench-dll.sln +25 -0
  76. package/dependencies/lz4/lib/dll/example/fullbench-dll.vcxproj +182 -0
  77. package/dependencies/lz4/lib/dll/liblz4.def +62 -0
  78. package/dependencies/lz4/lib/liblz4-dll.rc.in +35 -0
  79. package/dependencies/lz4/lib/liblz4.pc.in +14 -0
  80. package/dependencies/lz4/lib/lz4.c +2495 -0
  81. package/dependencies/lz4/lib/lz4.h +774 -0
  82. package/dependencies/lz4/lib/lz4frame.c +1899 -0
  83. package/dependencies/lz4/lib/lz4frame.h +623 -0
  84. package/dependencies/lz4/lib/lz4frame_static.h +47 -0
  85. package/dependencies/lz4/lib/lz4hc.c +1615 -0
  86. package/dependencies/lz4/lib/lz4hc.h +413 -0
  87. package/dependencies/lz4/lib/xxhash.c +1030 -0
  88. package/dependencies/lz4/lib/xxhash.h +328 -0
  89. package/dependencies/v8/v8-fast-api-calls-v16.h +791 -0
  90. package/dependencies/v8/v8-fast-api-calls.h +888 -0
  91. package/dict/dict.txt +1 -0
  92. package/dict/dict2.txt +1 -0
  93. package/dist/index.cjs +2478 -0
  94. package/dist/index.cjs.map +1 -0
  95. package/index.d.ts +385 -0
  96. package/index.js +37 -0
  97. package/keys.js +102 -0
  98. package/level.js +27 -0
  99. package/native.js +82 -0
  100. package/node-index.js +28 -0
  101. package/open.js +414 -0
  102. package/package.json +70 -0
  103. package/read.js +590 -0
  104. package/rollup.config.js +12 -0
  105. package/src/compression.cpp +222 -0
  106. package/src/cursor.cpp +344 -0
  107. package/src/dbi.cpp +344 -0
  108. package/src/env.cpp +762 -0
  109. package/src/lmdb-js.cpp +64 -0
  110. package/src/lmdb-js.h +599 -0
  111. package/src/misc.cpp +324 -0
  112. package/src/ordered-binary.cpp +46 -0
  113. package/src/txn.cpp +257 -0
  114. package/src/v8-functions.cpp +166 -0
  115. package/src/windows.c +35 -0
  116. package/src/writer.cpp +452 -0
  117. package/util/RangeIterable.js +141 -0
  118. package/util/set-optional-deps.cjs +10 -0
  119. package/util/when.js +8 -0
  120. package/write.js +882 -0
@@ -0,0 +1,333 @@
1
+ /* mdb_dump.c - memory-mapped database dump tool */
2
+ /*
3
+ * Copyright 2011-2021 Howard Chu, Symas Corp.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted only as authorized by the OpenLDAP
8
+ * Public License.
9
+ *
10
+ * A copy of this license is available in the file LICENSE in the
11
+ * top-level directory of the distribution or, alternatively, at
12
+ * <http://www.OpenLDAP.org/license.html>.
13
+ */
14
+ #include <stdio.h>
15
+ #include <errno.h>
16
+ #include <stdlib.h>
17
+ #include <string.h>
18
+ #include <ctype.h>
19
+ #include <unistd.h>
20
+ #include <signal.h>
21
+ #include "lmdb.h"
22
+ #include "module.h"
23
+
24
+ #define Yu MDB_PRIy(u)
25
+
26
+ #define PRINT 1
27
+ static int mode;
28
+
29
+ typedef struct flagbit {
30
+ int bit;
31
+ char *name;
32
+ } flagbit;
33
+
34
+ flagbit dbflags[] = {
35
+ { MDB_REVERSEKEY, "reversekey" },
36
+ { MDB_DUPSORT, "dupsort" },
37
+ { MDB_INTEGERKEY, "integerkey" },
38
+ { MDB_DUPFIXED, "dupfixed" },
39
+ { MDB_INTEGERDUP, "integerdup" },
40
+ { MDB_REVERSEDUP, "reversedup" },
41
+ { 0, NULL }
42
+ };
43
+
44
+ static volatile sig_atomic_t gotsig;
45
+
46
+ static void dumpsig( int sig )
47
+ {
48
+ gotsig=1;
49
+ }
50
+
51
+ static const char hexc[] = "0123456789abcdef";
52
+
53
+ static void hex(unsigned char c)
54
+ {
55
+ putchar(hexc[c >> 4]);
56
+ putchar(hexc[c & 0xf]);
57
+ }
58
+
59
+ static void text(MDB_val *v)
60
+ {
61
+ unsigned char *c, *end;
62
+
63
+ putchar(' ');
64
+ c = v->mv_data;
65
+ end = c + v->mv_size;
66
+ while (c < end) {
67
+ if (isprint(*c)) {
68
+ if (*c == '\\')
69
+ putchar('\\');
70
+ putchar(*c);
71
+ } else {
72
+ putchar('\\');
73
+ hex(*c);
74
+ }
75
+ c++;
76
+ }
77
+ putchar('\n');
78
+ }
79
+
80
+ static void byte(MDB_val *v)
81
+ {
82
+ unsigned char *c, *end;
83
+
84
+ putchar(' ');
85
+ c = v->mv_data;
86
+ end = c + v->mv_size;
87
+ while (c < end) {
88
+ hex(*c++);
89
+ }
90
+ putchar('\n');
91
+ }
92
+
93
+ /* Dump in BDB-compatible format */
94
+ static int dumpit(MDB_txn *txn, MDB_dbi dbi, char *name)
95
+ {
96
+ MDB_cursor *mc;
97
+ MDB_stat ms;
98
+ MDB_val key, data;
99
+ MDB_envinfo info;
100
+ unsigned int flags;
101
+ int rc, i;
102
+
103
+ rc = mdb_dbi_flags(txn, dbi, &flags);
104
+ if (rc) return rc;
105
+
106
+ rc = mdb_stat(txn, dbi, &ms);
107
+ if (rc) return rc;
108
+
109
+ rc = mdb_env_info(mdb_txn_env(txn), &info);
110
+ if (rc) return rc;
111
+
112
+ printf("VERSION=3\n");
113
+ printf("format=%s\n", mode & PRINT ? "print" : "bytevalue");
114
+ if (name)
115
+ printf("database=%s\n", name);
116
+ printf("type=btree\n");
117
+ printf("mapsize=%"Yu"\n", info.me_mapsize);
118
+ if (info.me_mapaddr)
119
+ printf("mapaddr=%p\n", info.me_mapaddr);
120
+ printf("maxreaders=%u\n", info.me_maxreaders);
121
+
122
+ if (flags & MDB_DUPSORT)
123
+ printf("duplicates=1\n");
124
+
125
+ for (i=0; dbflags[i].bit; i++)
126
+ if (flags & dbflags[i].bit)
127
+ printf("%s=1\n", dbflags[i].name);
128
+
129
+ printf("db_pagesize=%d\n", ms.ms_psize);
130
+ printf("HEADER=END\n");
131
+
132
+ rc = mdb_cursor_open(txn, dbi, &mc);
133
+ if (rc) return rc;
134
+
135
+ while ((rc = mdb_cursor_get(mc, &key, &data, MDB_NEXT) == MDB_SUCCESS)) {
136
+ if (gotsig) {
137
+ rc = EINTR;
138
+ break;
139
+ }
140
+ if (mode & PRINT) {
141
+ text(&key);
142
+ text(&data);
143
+ } else {
144
+ byte(&key);
145
+ byte(&data);
146
+ }
147
+ }
148
+ printf("DATA=END\n");
149
+ if (rc == MDB_NOTFOUND)
150
+ rc = MDB_SUCCESS;
151
+
152
+ return rc;
153
+ }
154
+
155
+ static void usage(char *prog)
156
+ {
157
+ fprintf(stderr, "usage: %s [-V] [-f output] [-l] [-n] [-p] [-v] [-m module [-w password]] [-a|-s subdb] dbpath\n", prog);
158
+ exit(EXIT_FAILURE);
159
+ }
160
+
161
+ int main(int argc, char *argv[])
162
+ {
163
+ int i, rc;
164
+ MDB_env *env;
165
+ MDB_txn *txn;
166
+ MDB_dbi dbi;
167
+ char *prog = argv[0];
168
+ char *envname;
169
+ char *subname = NULL;
170
+ int alldbs = 0, envflags = 0, list = 0;
171
+ char *module = NULL, *password = NULL, *errmsg;
172
+ void *mlm = NULL;
173
+
174
+ if (argc < 2) {
175
+ usage(prog);
176
+ }
177
+
178
+ /* -a: dump main DB and all subDBs
179
+ * -s: dump only the named subDB
180
+ * -n: use NOSUBDIR flag on env_open
181
+ * -p: use printable characters
182
+ * -f: write to file instead of stdout
183
+ * -v: use previous snapshot
184
+ * -V: print version and exit
185
+ * (default) dump only the main DB
186
+ */
187
+ while ((i = getopt(argc, argv, "af:lm:nps:vw:V")) != EOF) {
188
+ switch(i) {
189
+ case 'V':
190
+ printf("%s\n", MDB_VERSION_STRING);
191
+ exit(0);
192
+ break;
193
+ case 'l':
194
+ list = 1;
195
+ /*FALLTHROUGH*/
196
+ case 'a':
197
+ if (subname)
198
+ usage(prog);
199
+ alldbs++;
200
+ break;
201
+ case 'f':
202
+ if (freopen(optarg, "w", stdout) == NULL) {
203
+ fprintf(stderr, "%s: %s: reopen: %s\n",
204
+ prog, optarg, strerror(errno));
205
+ exit(EXIT_FAILURE);
206
+ }
207
+ break;
208
+ case 'n':
209
+ envflags |= MDB_NOSUBDIR;
210
+ break;
211
+ case 'v':
212
+ envflags |= MDB_PREVSNAPSHOT;
213
+ break;
214
+ case 'p':
215
+ mode |= PRINT;
216
+ break;
217
+ case 's':
218
+ if (alldbs)
219
+ usage(prog);
220
+ subname = optarg;
221
+ break;
222
+ case 'm':
223
+ module = optarg;
224
+ break;
225
+ case 'w':
226
+ password = optarg;
227
+ break;
228
+ default:
229
+ usage(prog);
230
+ }
231
+ }
232
+
233
+ if (optind != argc - 1)
234
+ usage(prog);
235
+
236
+ #ifdef SIGPIPE
237
+ signal(SIGPIPE, dumpsig);
238
+ #endif
239
+ #ifdef SIGHUP
240
+ signal(SIGHUP, dumpsig);
241
+ #endif
242
+ signal(SIGINT, dumpsig);
243
+ signal(SIGTERM, dumpsig);
244
+
245
+ envname = argv[optind];
246
+ rc = mdb_env_create(&env);
247
+ if (rc) {
248
+ fprintf(stderr, "mdb_env_create failed, error %d %s\n", rc, mdb_strerror(rc));
249
+ return EXIT_FAILURE;
250
+ }
251
+
252
+ if (module) {
253
+ mlm = mlm_setup(env, module, password, &errmsg);
254
+ if (!mlm) {
255
+ fprintf(stderr, "Failed to load crypto module: %s\n", errmsg);
256
+ goto env_close;
257
+ }
258
+ }
259
+
260
+ if (alldbs || subname) {
261
+ mdb_env_set_maxdbs(env, 2);
262
+ }
263
+
264
+ rc = mdb_env_open(env, envname, envflags | MDB_RDONLY, 0664);
265
+ if (rc) {
266
+ fprintf(stderr, "mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc));
267
+ goto env_close;
268
+ }
269
+
270
+ rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn);
271
+ if (rc) {
272
+ fprintf(stderr, "mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc));
273
+ goto env_close;
274
+ }
275
+
276
+ rc = mdb_dbi_open(txn, subname, 0, &dbi);
277
+ if (rc) {
278
+ fprintf(stderr, "mdb_dbi_open failed, error %d %s\n", rc, mdb_strerror(rc));
279
+ goto txn_abort;
280
+ }
281
+
282
+ if (alldbs) {
283
+ MDB_cursor *cursor;
284
+ MDB_val key;
285
+ int count = 0;
286
+
287
+ rc = mdb_cursor_open(txn, dbi, &cursor);
288
+ if (rc) {
289
+ fprintf(stderr, "mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc));
290
+ goto txn_abort;
291
+ }
292
+ while ((rc = mdb_cursor_get(cursor, &key, NULL, MDB_NEXT_NODUP)) == 0) {
293
+ MDB_dbi db2;
294
+ if (!mdb_cursor_is_db(cursor))
295
+ continue;
296
+ count++;
297
+ rc = mdb_dbi_open(txn, key.mv_data, 0, &db2);
298
+ if (rc == MDB_SUCCESS) {
299
+ if (list) {
300
+ printf("%s\n", (char *)key.mv_data);
301
+ list++;
302
+ } else {
303
+ rc = dumpit(txn, db2, key.mv_data);
304
+ if (rc)
305
+ break;
306
+ }
307
+ mdb_dbi_close(env, db2);
308
+ }
309
+ if (rc) continue;
310
+ }
311
+ mdb_cursor_close(cursor);
312
+ if (!count) {
313
+ fprintf(stderr, "%s: %s does not contain multiple databases\n", prog, envname);
314
+ rc = MDB_NOTFOUND;
315
+ } else if (rc == MDB_NOTFOUND) {
316
+ rc = MDB_SUCCESS;
317
+ }
318
+ } else {
319
+ rc = dumpit(txn, dbi, subname);
320
+ }
321
+ if (rc && rc != MDB_NOTFOUND)
322
+ fprintf(stderr, "%s: %s: %s\n", prog, envname, mdb_strerror(rc));
323
+
324
+ mdb_close(env, dbi);
325
+ txn_abort:
326
+ mdb_txn_abort(txn);
327
+ env_close:
328
+ mdb_env_close(env);
329
+ if (mlm)
330
+ mlm_unload(mlm);
331
+
332
+ return rc ? EXIT_FAILURE : EXIT_SUCCESS;
333
+ }
@@ -0,0 +1,97 @@
1
+ .TH MDB_LOAD 1 "2015/09/30" "LMDB 0.9.90"
2
+ .\" Copyright 2014-2021 Howard Chu, Symas Corp. All Rights Reserved.
3
+ .\" Copying restrictions apply. See COPYRIGHT/LICENSE.
4
+ .SH NAME
5
+ mdb_load \- LMDB environment import tool
6
+ .SH SYNOPSIS
7
+ .B mdb_load
8
+ [\c
9
+ .BR \-V ]
10
+ [\c
11
+ .BI \-f \ file\fR]
12
+ [\c
13
+ .BR \-n ]
14
+ [\c
15
+ .BI \-m \ module
16
+ [\c
17
+ .BI \-w \ password\fR]]
18
+ [\c
19
+ .BI \-s \ subdb\fR]
20
+ [\c
21
+ .BR \-N ]
22
+ [\c
23
+ .BR \-T ]
24
+ .BR \ envpath
25
+ .SH DESCRIPTION
26
+ The
27
+ .B mdb_load
28
+ utility reads from the standard input and loads it into the
29
+ LMDB environment
30
+ .BR envpath .
31
+
32
+ The input to
33
+ .B mdb_load
34
+ must be in the output format specified by the
35
+ .BR mdb_dump (1)
36
+ utility or as specified by the
37
+ .B -T
38
+ option below.
39
+ .SH OPTIONS
40
+ .TP
41
+ .BR \-V
42
+ Write the library version number to the standard output, and exit.
43
+ .TP
44
+ .BR \-a
45
+ Append all records in the order they appear in the input. The input is assumed to already be
46
+ in correctly sorted order and no sorting or checking for redundant values will be performed.
47
+ This option must be used to reload data that was produced by running
48
+ .B mdb_dump
49
+ on a database that uses custom compare functions.
50
+ .TP
51
+ .BR \-f \ file
52
+ Read from the specified file instead of from the standard input.
53
+ .TP
54
+ .BR \-n
55
+ Load an LMDB database which does not use subdirectories.
56
+ .TP
57
+ .BI \-m \ module
58
+ Load the specified dynamic module to utilize cryptographic functions.
59
+ This is required to operate on environments that have been configured
60
+ with page-level checksums or encryption.
61
+ .TP
62
+ .BI \-w \ password
63
+ Specify the password for an encrypted environment. This is only
64
+ used if a cryptography module has been loaded.
65
+ .TP
66
+ .BR \-s \ subdb
67
+ Load a specific subdatabase. If no database is specified, data is loaded into the main database.
68
+ .TP
69
+ .BR \-N
70
+ Don't overwrite existing records when loading into an already existing database; just skip them.
71
+ .TP
72
+ .BR \-T
73
+ Load data from simple text files. The input must be paired lines of text, where the first
74
+ line of the pair is the key item, and the second line of the pair is its corresponding
75
+ data item.
76
+
77
+ A simple escape mechanism, where newline and backslash (\\) characters are special, is
78
+ applied to the text input. Newline characters are interpreted as record separators.
79
+ Backslash characters in the text will be interpreted in one of two ways: If the backslash
80
+ character precedes another backslash character, the pair will be interpreted as a literal
81
+ backslash. If the backslash character precedes any other character, the two characters
82
+ following the backslash will be interpreted as a hexadecimal specification of a single
83
+ character; for example, \\0a is a newline character in the ASCII character set.
84
+
85
+ For this reason, any backslash or newline characters that naturally occur in the text
86
+ input must be escaped to avoid misinterpretation by
87
+ .BR mdb_load .
88
+
89
+ .SH DIAGNOSTICS
90
+ Exit status is zero if no errors occur.
91
+ Errors result in a non-zero exit status and
92
+ a diagnostic message being written to standard error.
93
+
94
+ .SH "SEE ALSO"
95
+ .BR mdb_dump (1)
96
+ .SH AUTHOR
97
+ Howard Chu of Symas Corporation <http://www.symas.com>