@ohos-ports/lmdb 2.5.3 → 2.8.5-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 (124) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +72 -28
  3. package/SECURITY.md +12 -12
  4. package/bin/download-prebuilds.js +15 -0
  5. package/binding.gyp +115 -111
  6. package/build/Release/lmdb.node +0 -0
  7. package/caching.js +212 -156
  8. package/dependencies/lmdb/libraries/liblmdb/COPYRIGHT +20 -20
  9. package/dependencies/lmdb/libraries/liblmdb/Doxyfile +1631 -1631
  10. package/dependencies/lmdb/libraries/liblmdb/LICENSE +47 -47
  11. package/dependencies/lmdb/libraries/liblmdb/Makefile +136 -136
  12. package/dependencies/lmdb/libraries/liblmdb/chacha8.c +183 -183
  13. package/dependencies/lmdb/libraries/liblmdb/chacha8.h +14 -14
  14. package/dependencies/lmdb/libraries/liblmdb/crypto.c +121 -121
  15. package/dependencies/lmdb/libraries/liblmdb/intro.doc +192 -192
  16. package/dependencies/lmdb/libraries/liblmdb/lmdb.h +28 -3
  17. package/dependencies/lmdb/libraries/liblmdb/mdb.c +157 -31
  18. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.1 +74 -74
  19. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.c +106 -106
  20. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.1 +53 -53
  21. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.c +154 -154
  22. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.1 +94 -94
  23. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.c +333 -333
  24. package/dependencies/lmdb/libraries/liblmdb/mdb_load.1 +97 -97
  25. package/dependencies/lmdb/libraries/liblmdb/mdb_load.c +530 -530
  26. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.1 +83 -83
  27. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.c +276 -276
  28. package/dependencies/lmdb/libraries/liblmdb/midl-sparse.c +452 -0
  29. package/dependencies/lmdb/libraries/liblmdb/midl.c +452 -452
  30. package/dependencies/lmdb/libraries/liblmdb/midl.h +208 -208
  31. package/dependencies/lmdb/libraries/liblmdb/module.c +101 -101
  32. package/dependencies/lmdb/libraries/liblmdb/module.h +16 -16
  33. package/dependencies/lmdb/libraries/liblmdb/mtest.c +178 -178
  34. package/dependencies/lmdb/libraries/liblmdb/mtest2.c +124 -124
  35. package/dependencies/lmdb/libraries/liblmdb/mtest3.c +133 -133
  36. package/dependencies/lmdb/libraries/liblmdb/mtest4.c +168 -168
  37. package/dependencies/lmdb/libraries/liblmdb/mtest5.c +135 -135
  38. package/dependencies/lmdb/libraries/liblmdb/mtest6.c +141 -141
  39. package/dependencies/lmdb/libraries/liblmdb/mtest_enc.c +190 -190
  40. package/dependencies/lmdb/libraries/liblmdb/mtest_enc2.c +189 -189
  41. package/dependencies/lmdb/libraries/liblmdb/mtest_remap.c +177 -177
  42. package/dependencies/lmdb/libraries/liblmdb/sample-bdb.txt +73 -73
  43. package/dependencies/lmdb/libraries/liblmdb/sample-mdb.txt +62 -62
  44. package/dependencies/lmdb/libraries/liblmdb/tooltag +27 -27
  45. package/dependencies/lmdb-data-v1/libraries/liblmdb/CHANGES +266 -0
  46. package/dependencies/lmdb-data-v1/libraries/liblmdb/COPYRIGHT +20 -20
  47. package/dependencies/lmdb-data-v1/libraries/liblmdb/Doxyfile +1631 -1631
  48. package/dependencies/lmdb-data-v1/libraries/liblmdb/LICENSE +47 -47
  49. package/dependencies/lmdb-data-v1/libraries/liblmdb/intro.doc +192 -192
  50. package/dependencies/lmdb-data-v1/libraries/liblmdb/lmdb.h +1608 -1653
  51. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb.c +10320 -11359
  52. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.1 +55 -61
  53. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.c +82 -84
  54. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.1 +75 -81
  55. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.c +319 -319
  56. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.1 +84 -84
  57. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.c +496 -492
  58. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.1 +64 -70
  59. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.c +263 -264
  60. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.c +359 -421
  61. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.h +186 -200
  62. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest.c +177 -177
  63. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest2.c +124 -124
  64. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest3.c +133 -133
  65. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest4.c +168 -168
  66. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest5.c +135 -135
  67. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest6.c +141 -141
  68. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-bdb.txt +73 -73
  69. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-mdb.txt +62 -62
  70. package/dependencies/lmdb-data-v1/libraries/liblmdb/tooltag +22 -27
  71. package/dependencies/lz4/LICENSE +11 -11
  72. package/dependencies/lz4/lib/LICENSE +24 -24
  73. package/dependencies/lz4/lib/Makefile +225 -0
  74. package/dependencies/lz4/lib/README.md +169 -137
  75. package/dependencies/lz4/lib/dll/example/Makefile +63 -0
  76. package/dependencies/lz4/lib/dll/example/README.md +69 -69
  77. package/dependencies/lz4/lib/dll/liblz4.def +62 -62
  78. package/dependencies/lz4/lib/liblz4-dll.rc.in +35 -35
  79. package/dependencies/lz4/lib/liblz4.pc.in +14 -14
  80. package/dependencies/lz4/lib/lz4.c +2722 -2495
  81. package/dependencies/lz4/lib/lz4.h +842 -774
  82. package/dependencies/lz4/lib/lz4file.c +311 -0
  83. package/dependencies/lz4/lib/lz4file.h +93 -0
  84. package/dependencies/lz4/lib/lz4frame.c +2078 -1899
  85. package/dependencies/lz4/lib/lz4frame.h +692 -623
  86. package/dependencies/lz4/lib/lz4frame_static.h +47 -47
  87. package/dependencies/lz4/lib/lz4hc.c +1631 -1615
  88. package/dependencies/lz4/lib/lz4hc.h +413 -413
  89. package/dependencies/lz4/lib/xxhash.c +1030 -1030
  90. package/dependencies/lz4/lib/xxhash.h +328 -328
  91. package/dependencies/v8/v8-fast-api-calls-v16.h +790 -790
  92. package/dependencies/v8/v8-fast-api-calls.h +784 -888
  93. package/dist/index.cjs +1050 -584
  94. package/dist/index.cjs.map +1 -1
  95. package/index.d.cts +420 -0
  96. package/index.d.ts +450 -385
  97. package/index.js +38 -37
  98. package/keys.js +116 -102
  99. package/level.js +26 -26
  100. package/native.js +8 -5
  101. package/node-index.js +21 -17
  102. package/open.js +51 -17
  103. package/package.json +63 -21
  104. package/read.js +338 -95
  105. package/src/compression.cpp +12 -9
  106. package/src/cursor.cpp +82 -31
  107. package/src/dbi.cpp +78 -40
  108. package/src/env.cpp +336 -68
  109. package/src/lmdb-js.cpp +64 -64
  110. package/src/lmdb-js.h +83 -49
  111. package/src/misc.cpp +297 -28
  112. package/src/ordered-binary.cpp +46 -46
  113. package/src/txn.cpp +210 -257
  114. package/src/v8-functions.cpp +170 -166
  115. package/src/windows.c +34 -34
  116. package/src/writer.cpp +169 -84
  117. package/util/RangeIterable.js +112 -17
  118. package/util/set-optional-deps.cjs +14 -10
  119. package/util/when.js +8 -8
  120. package/write.js +145 -121
  121. package/dependencies/lmdb-data-v1/libraries/liblmdb/Makefile +0 -118
  122. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.1 +0 -40
  123. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.c +0 -135
  124. package/rollup.config.js +0 -12
@@ -1,106 +1,106 @@
1
- /* mdb_copy.c - memory-mapped database backup tool */
2
- /*
3
- * Copyright 2012-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
- #ifdef _WIN32
15
- #include <windows.h>
16
- #define MDB_STDOUT GetStdHandle(STD_OUTPUT_HANDLE)
17
- #else
18
- #define MDB_STDOUT 1
19
- #endif
20
- #include <stdio.h>
21
- #include <stdlib.h>
22
- #include <signal.h>
23
- #include "lmdb.h"
24
- #include "module.h"
25
-
26
- static void
27
- sighandle(int sig)
28
- {
29
- }
30
-
31
- int main(int argc,char * argv[])
32
- {
33
- int rc;
34
- MDB_env *env;
35
- const char *progname = argv[0], *act;
36
- unsigned flags = MDB_RDONLY;
37
- unsigned cpflags = 0;
38
- char *module = NULL, *password = NULL;
39
- void *mlm = NULL;
40
- char *errmsg;
41
-
42
- for (; argc > 1 && argv[1][0] == '-'; argc--, argv++) {
43
- if (argv[1][1] == 'n' && argv[1][2] == '\0')
44
- flags |= MDB_NOSUBDIR;
45
- else if (argv[1][1] == 'v' && argv[1][2] == '\0')
46
- flags |= MDB_PREVSNAPSHOT;
47
- else if (argv[1][1] == 'c' && argv[1][2] == '\0')
48
- cpflags |= MDB_CP_COMPACT;
49
- else if (argv[1][1] == 'V' && argv[1][2] == '\0') {
50
- printf("%s\n", MDB_VERSION_STRING);
51
- exit(0);
52
- } else if (argv[1][1] == 'm' && argv[1][2] == '\0') {
53
- module = argv[2];
54
- argc--;
55
- argv++;
56
- } else if (argv[1][1] == 'w' && argv[1][2] == '\0') {
57
- password = argv[2];
58
- argc--;
59
- argv++;
60
- } else
61
- argc = 0;
62
- }
63
-
64
- if (argc<2 || argc>3) {
65
- fprintf(stderr, "usage: %s [-V] [-c] [-n] [-v] [-m module [-w password]] srcpath [dstpath]\n", progname);
66
- exit(EXIT_FAILURE);
67
- }
68
-
69
-
70
- #ifdef SIGPIPE
71
- signal(SIGPIPE, sighandle);
72
- #endif
73
- #ifdef SIGHUP
74
- signal(SIGHUP, sighandle);
75
- #endif
76
- signal(SIGINT, sighandle);
77
- signal(SIGTERM, sighandle);
78
-
79
- act = "opening environment";
80
- rc = mdb_env_create(&env);
81
- if (rc == MDB_SUCCESS) {
82
- if (module) {
83
- mlm = mlm_setup(env, module, password, &errmsg);
84
- if (!mlm) {
85
- fprintf(stderr, "Failed to load crypto module: %s\n", errmsg);
86
- exit(EXIT_FAILURE);
87
- }
88
- }
89
- rc = mdb_env_open(env, argv[1], flags, 0600);
90
- }
91
- if (rc == MDB_SUCCESS) {
92
- act = "copying";
93
- if (argc == 2)
94
- rc = mdb_env_copyfd2(env, MDB_STDOUT, cpflags);
95
- else
96
- rc = mdb_env_copy2(env, argv[2], cpflags);
97
- }
98
- if (rc)
99
- fprintf(stderr, "%s: %s failed, error %d (%s)\n",
100
- progname, act, rc, mdb_strerror(rc));
101
- mdb_env_close(env);
102
- if (mlm)
103
- mlm_unload(mlm);
104
-
105
- return rc ? EXIT_FAILURE : EXIT_SUCCESS;
106
- }
1
+ /* mdb_copy.c - memory-mapped database backup tool */
2
+ /*
3
+ * Copyright 2012-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
+ #ifdef _WIN32
15
+ #include <windows.h>
16
+ #define MDB_STDOUT GetStdHandle(STD_OUTPUT_HANDLE)
17
+ #else
18
+ #define MDB_STDOUT 1
19
+ #endif
20
+ #include <stdio.h>
21
+ #include <stdlib.h>
22
+ #include <signal.h>
23
+ #include "lmdb.h"
24
+ #include "module.h"
25
+
26
+ static void
27
+ sighandle(int sig)
28
+ {
29
+ }
30
+
31
+ int main(int argc,char * argv[])
32
+ {
33
+ int rc;
34
+ MDB_env *env;
35
+ const char *progname = argv[0], *act;
36
+ unsigned flags = MDB_RDONLY;
37
+ unsigned cpflags = 0;
38
+ char *module = NULL, *password = NULL;
39
+ void *mlm = NULL;
40
+ char *errmsg;
41
+
42
+ for (; argc > 1 && argv[1][0] == '-'; argc--, argv++) {
43
+ if (argv[1][1] == 'n' && argv[1][2] == '\0')
44
+ flags |= MDB_NOSUBDIR;
45
+ else if (argv[1][1] == 'v' && argv[1][2] == '\0')
46
+ flags |= MDB_PREVSNAPSHOT;
47
+ else if (argv[1][1] == 'c' && argv[1][2] == '\0')
48
+ cpflags |= MDB_CP_COMPACT;
49
+ else if (argv[1][1] == 'V' && argv[1][2] == '\0') {
50
+ printf("%s\n", MDB_VERSION_STRING);
51
+ exit(0);
52
+ } else if (argv[1][1] == 'm' && argv[1][2] == '\0') {
53
+ module = argv[2];
54
+ argc--;
55
+ argv++;
56
+ } else if (argv[1][1] == 'w' && argv[1][2] == '\0') {
57
+ password = argv[2];
58
+ argc--;
59
+ argv++;
60
+ } else
61
+ argc = 0;
62
+ }
63
+
64
+ if (argc<2 || argc>3) {
65
+ fprintf(stderr, "usage: %s [-V] [-c] [-n] [-v] [-m module [-w password]] srcpath [dstpath]\n", progname);
66
+ exit(EXIT_FAILURE);
67
+ }
68
+
69
+
70
+ #ifdef SIGPIPE
71
+ signal(SIGPIPE, sighandle);
72
+ #endif
73
+ #ifdef SIGHUP
74
+ signal(SIGHUP, sighandle);
75
+ #endif
76
+ signal(SIGINT, sighandle);
77
+ signal(SIGTERM, sighandle);
78
+
79
+ act = "opening environment";
80
+ rc = mdb_env_create(&env);
81
+ if (rc == MDB_SUCCESS) {
82
+ if (module) {
83
+ mlm = mlm_setup(env, module, password, &errmsg);
84
+ if (!mlm) {
85
+ fprintf(stderr, "Failed to load crypto module: %s\n", errmsg);
86
+ exit(EXIT_FAILURE);
87
+ }
88
+ }
89
+ rc = mdb_env_open(env, argv[1], flags, 0600);
90
+ }
91
+ if (rc == MDB_SUCCESS) {
92
+ act = "copying";
93
+ if (argc == 2)
94
+ rc = mdb_env_copyfd2(env, MDB_STDOUT, cpflags);
95
+ else
96
+ rc = mdb_env_copy2(env, argv[2], cpflags);
97
+ }
98
+ if (rc)
99
+ fprintf(stderr, "%s: %s failed, error %d (%s)\n",
100
+ progname, act, rc, mdb_strerror(rc));
101
+ mdb_env_close(env);
102
+ if (mlm)
103
+ mlm_unload(mlm);
104
+
105
+ return rc ? EXIT_FAILURE : EXIT_SUCCESS;
106
+ }
@@ -1,53 +1,53 @@
1
- .TH MDB_DROP 1 "2017/11/19" "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_drop \- LMDB database delete tool
6
- .SH SYNOPSIS
7
- .B mdb_drop
8
- [\c
9
- .BR \-V ]
10
- [\c
11
- .BR \-n ]
12
- [\c
13
- .BR \-d ]
14
- [\c
15
- .BI \-m \ module
16
- [\c
17
- .BI \-w \ password\fR]]
18
- [\c
19
- .BI \-s \ subdb\fR]
20
- .BR \ envpath
21
- .SH DESCRIPTION
22
- The
23
- .B mdb_drop
24
- utility empties or deletes a database in the specified
25
- environment.
26
- .SH OPTIONS
27
- .TP
28
- .BR \-V
29
- Write the library version number to the standard output, and exit.
30
- .TP
31
- .BR \-n
32
- Operate on an LMDB database which does not use subdirectories.
33
- .TP
34
- .BR \-d
35
- Delete the specified database, don't just empty it.
36
- .TP
37
- .BI \-m \ module
38
- Load the specified dynamic module to utilize cryptographic functions.
39
- This is required to operate on environments that have been configured
40
- with page-level checksums or encryption.
41
- .TP
42
- .BI \-w \ password
43
- Specify the password for an encrypted environment. This is only
44
- used if a cryptography module has been loaded.
45
- .TP
46
- .BR \-s \ subdb
47
- Operate on a specific subdatabase. If no database is specified, only the main database is dropped.
48
- .SH DIAGNOSTICS
49
- Exit status is zero if no errors occur.
50
- Errors result in a non-zero exit status and
51
- a diagnostic message being written to standard error.
52
- .SH AUTHOR
53
- Howard Chu of Symas Corporation <http://www.symas.com>
1
+ .TH MDB_DROP 1 "2017/11/19" "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_drop \- LMDB database delete tool
6
+ .SH SYNOPSIS
7
+ .B mdb_drop
8
+ [\c
9
+ .BR \-V ]
10
+ [\c
11
+ .BR \-n ]
12
+ [\c
13
+ .BR \-d ]
14
+ [\c
15
+ .BI \-m \ module
16
+ [\c
17
+ .BI \-w \ password\fR]]
18
+ [\c
19
+ .BI \-s \ subdb\fR]
20
+ .BR \ envpath
21
+ .SH DESCRIPTION
22
+ The
23
+ .B mdb_drop
24
+ utility empties or deletes a database in the specified
25
+ environment.
26
+ .SH OPTIONS
27
+ .TP
28
+ .BR \-V
29
+ Write the library version number to the standard output, and exit.
30
+ .TP
31
+ .BR \-n
32
+ Operate on an LMDB database which does not use subdirectories.
33
+ .TP
34
+ .BR \-d
35
+ Delete the specified database, don't just empty it.
36
+ .TP
37
+ .BI \-m \ module
38
+ Load the specified dynamic module to utilize cryptographic functions.
39
+ This is required to operate on environments that have been configured
40
+ with page-level checksums or encryption.
41
+ .TP
42
+ .BI \-w \ password
43
+ Specify the password for an encrypted environment. This is only
44
+ used if a cryptography module has been loaded.
45
+ .TP
46
+ .BR \-s \ subdb
47
+ Operate on a specific subdatabase. If no database is specified, only the main database is dropped.
48
+ .SH DIAGNOSTICS
49
+ Exit status is zero if no errors occur.
50
+ Errors result in a non-zero exit status and
51
+ a diagnostic message being written to standard error.
52
+ .SH AUTHOR
53
+ Howard Chu of Symas Corporation <http://www.symas.com>
@@ -1,154 +1,154 @@
1
- /* mdb_drop.c - memory-mapped database delete tool */
2
- /*
3
- * Copyright 2016-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
- static volatile sig_atomic_t gotsig;
25
-
26
- static void dumpsig( int sig )
27
- {
28
- gotsig=1;
29
- }
30
-
31
- static void usage(char *prog)
32
- {
33
- fprintf(stderr, "usage: %s [-V] [-n] [-d] [-m module [-w password]] [-s subdb] dbpath\n", prog);
34
- exit(EXIT_FAILURE);
35
- }
36
-
37
- int main(int argc, char *argv[])
38
- {
39
- int i, rc;
40
- MDB_env *env;
41
- MDB_txn *txn;
42
- MDB_dbi dbi;
43
- char *prog = argv[0];
44
- char *envname;
45
- char *subname = NULL;
46
- int envflags = 0, delete = 0;
47
- char *module = NULL, *password = NULL;
48
- void *mlm = NULL;
49
- char *errmsg;
50
-
51
- if (argc < 2) {
52
- usage(prog);
53
- }
54
-
55
- /* -d: delete the db, don't just empty it
56
- * -s: drop the named subDB
57
- * -n: use NOSUBDIR flag on env_open
58
- * -V: print version and exit
59
- * (default) empty the main DB
60
- */
61
- while ((i = getopt(argc, argv, "dm:ns:w:V")) != EOF) {
62
- switch(i) {
63
- case 'V':
64
- printf("%s\n", MDB_VERSION_STRING);
65
- exit(0);
66
- break;
67
- case 'd':
68
- delete = 1;
69
- break;
70
- case 'n':
71
- envflags |= MDB_NOSUBDIR;
72
- break;
73
- case 's':
74
- subname = optarg;
75
- break;
76
- case 'm':
77
- module = optarg;
78
- break;
79
- case 'w':
80
- password = optarg;
81
- break;
82
- default:
83
- usage(prog);
84
- }
85
- }
86
-
87
- if (optind != argc - 1)
88
- usage(prog);
89
-
90
- #ifdef SIGPIPE
91
- signal(SIGPIPE, dumpsig);
92
- #endif
93
- #ifdef SIGHUP
94
- signal(SIGHUP, dumpsig);
95
- #endif
96
- signal(SIGINT, dumpsig);
97
- signal(SIGTERM, dumpsig);
98
-
99
- envname = argv[optind];
100
- rc = mdb_env_create(&env);
101
- if (rc) {
102
- fprintf(stderr, "mdb_env_create failed, error %d %s\n", rc, mdb_strerror(rc));
103
- return EXIT_FAILURE;
104
- }
105
- if (module) {
106
- mlm = mlm_setup(env, module, password, &errmsg);
107
- if (!mlm) {
108
- fprintf(stderr, "Failed to load crypto module: %s\n", errmsg);
109
- goto env_close;
110
- }
111
- }
112
-
113
- mdb_env_set_maxdbs(env, 2);
114
-
115
- rc = mdb_env_open(env, envname, envflags, 0664);
116
- if (rc) {
117
- fprintf(stderr, "mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc));
118
- goto env_close;
119
- }
120
-
121
- rc = mdb_txn_begin(env, NULL, 0, &txn);
122
- if (rc) {
123
- fprintf(stderr, "mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc));
124
- goto env_close;
125
- }
126
-
127
- rc = mdb_open(txn, subname, 0, &dbi);
128
- if (rc) {
129
- fprintf(stderr, "mdb_open failed, error %d %s\n", rc, mdb_strerror(rc));
130
- goto txn_abort;
131
- }
132
-
133
- rc = mdb_drop(txn, dbi, delete);
134
- if (rc) {
135
- fprintf(stderr, "mdb_drop failed, error %d %s\n", rc, mdb_strerror(rc));
136
- goto txn_abort;
137
- }
138
- rc = mdb_txn_commit(txn);
139
- if (rc) {
140
- fprintf(stderr, "mdb_txn_commit failed, error %d %s\n", rc, mdb_strerror(rc));
141
- goto txn_abort;
142
- }
143
- txn = NULL;
144
-
145
- txn_abort:
146
- if (txn)
147
- mdb_txn_abort(txn);
148
- env_close:
149
- mdb_env_close(env);
150
- if (mlm)
151
- mlm_unload(mlm);
152
-
153
- return rc ? EXIT_FAILURE : EXIT_SUCCESS;
154
- }
1
+ /* mdb_drop.c - memory-mapped database delete tool */
2
+ /*
3
+ * Copyright 2016-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
+ static volatile sig_atomic_t gotsig;
25
+
26
+ static void dumpsig( int sig )
27
+ {
28
+ gotsig=1;
29
+ }
30
+
31
+ static void usage(char *prog)
32
+ {
33
+ fprintf(stderr, "usage: %s [-V] [-n] [-d] [-m module [-w password]] [-s subdb] dbpath\n", prog);
34
+ exit(EXIT_FAILURE);
35
+ }
36
+
37
+ int main(int argc, char *argv[])
38
+ {
39
+ int i, rc;
40
+ MDB_env *env;
41
+ MDB_txn *txn;
42
+ MDB_dbi dbi;
43
+ char *prog = argv[0];
44
+ char *envname;
45
+ char *subname = NULL;
46
+ int envflags = 0, delete = 0;
47
+ char *module = NULL, *password = NULL;
48
+ void *mlm = NULL;
49
+ char *errmsg;
50
+
51
+ if (argc < 2) {
52
+ usage(prog);
53
+ }
54
+
55
+ /* -d: delete the db, don't just empty it
56
+ * -s: drop the named subDB
57
+ * -n: use NOSUBDIR flag on env_open
58
+ * -V: print version and exit
59
+ * (default) empty the main DB
60
+ */
61
+ while ((i = getopt(argc, argv, "dm:ns:w:V")) != EOF) {
62
+ switch(i) {
63
+ case 'V':
64
+ printf("%s\n", MDB_VERSION_STRING);
65
+ exit(0);
66
+ break;
67
+ case 'd':
68
+ delete = 1;
69
+ break;
70
+ case 'n':
71
+ envflags |= MDB_NOSUBDIR;
72
+ break;
73
+ case 's':
74
+ subname = optarg;
75
+ break;
76
+ case 'm':
77
+ module = optarg;
78
+ break;
79
+ case 'w':
80
+ password = optarg;
81
+ break;
82
+ default:
83
+ usage(prog);
84
+ }
85
+ }
86
+
87
+ if (optind != argc - 1)
88
+ usage(prog);
89
+
90
+ #ifdef SIGPIPE
91
+ signal(SIGPIPE, dumpsig);
92
+ #endif
93
+ #ifdef SIGHUP
94
+ signal(SIGHUP, dumpsig);
95
+ #endif
96
+ signal(SIGINT, dumpsig);
97
+ signal(SIGTERM, dumpsig);
98
+
99
+ envname = argv[optind];
100
+ rc = mdb_env_create(&env);
101
+ if (rc) {
102
+ fprintf(stderr, "mdb_env_create failed, error %d %s\n", rc, mdb_strerror(rc));
103
+ return EXIT_FAILURE;
104
+ }
105
+ if (module) {
106
+ mlm = mlm_setup(env, module, password, &errmsg);
107
+ if (!mlm) {
108
+ fprintf(stderr, "Failed to load crypto module: %s\n", errmsg);
109
+ goto env_close;
110
+ }
111
+ }
112
+
113
+ mdb_env_set_maxdbs(env, 2);
114
+
115
+ rc = mdb_env_open(env, envname, envflags, 0664);
116
+ if (rc) {
117
+ fprintf(stderr, "mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc));
118
+ goto env_close;
119
+ }
120
+
121
+ rc = mdb_txn_begin(env, NULL, 0, &txn);
122
+ if (rc) {
123
+ fprintf(stderr, "mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc));
124
+ goto env_close;
125
+ }
126
+
127
+ rc = mdb_open(txn, subname, 0, &dbi);
128
+ if (rc) {
129
+ fprintf(stderr, "mdb_open failed, error %d %s\n", rc, mdb_strerror(rc));
130
+ goto txn_abort;
131
+ }
132
+
133
+ rc = mdb_drop(txn, dbi, delete);
134
+ if (rc) {
135
+ fprintf(stderr, "mdb_drop failed, error %d %s\n", rc, mdb_strerror(rc));
136
+ goto txn_abort;
137
+ }
138
+ rc = mdb_txn_commit(txn);
139
+ if (rc) {
140
+ fprintf(stderr, "mdb_txn_commit failed, error %d %s\n", rc, mdb_strerror(rc));
141
+ goto txn_abort;
142
+ }
143
+ txn = NULL;
144
+
145
+ txn_abort:
146
+ if (txn)
147
+ mdb_txn_abort(txn);
148
+ env_close:
149
+ mdb_env_close(env);
150
+ if (mlm)
151
+ mlm_unload(mlm);
152
+
153
+ return rc ? EXIT_FAILURE : EXIT_SUCCESS;
154
+ }