mdbxmou 0.1.26

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 (220) hide show
  1. package/.github/workflows/ci.yml +32 -0
  2. package/.github/workflows/publish.yml +27 -0
  3. package/.gitmodules +3 -0
  4. package/CMakeLists.txt +53 -0
  5. package/LICENSE +201 -0
  6. package/README.md +639 -0
  7. package/build.js +11 -0
  8. package/deps/libmdbx/.clang-format +3 -0
  9. package/deps/libmdbx/.cmake-format.yaml +3 -0
  10. package/deps/libmdbx/.le.ini +40 -0
  11. package/deps/libmdbx/CMakeLists.txt +1269 -0
  12. package/deps/libmdbx/COPYRIGHT +159 -0
  13. package/deps/libmdbx/ChangeLog.md +2786 -0
  14. package/deps/libmdbx/GNUmakefile +950 -0
  15. package/deps/libmdbx/LICENSE +177 -0
  16. package/deps/libmdbx/Makefile +16 -0
  17. package/deps/libmdbx/NOTICE +39 -0
  18. package/deps/libmdbx/README.md +863 -0
  19. package/deps/libmdbx/TODO.md +43 -0
  20. package/deps/libmdbx/cmake/compiler.cmake +1221 -0
  21. package/deps/libmdbx/cmake/profile.cmake +58 -0
  22. package/deps/libmdbx/cmake/utils.cmake +524 -0
  23. package/deps/libmdbx/conanfile.py +323 -0
  24. package/deps/libmdbx/docs/Doxyfile.in +2734 -0
  25. package/deps/libmdbx/docs/_preface.md +47 -0
  26. package/deps/libmdbx/docs/_restrictions.md +248 -0
  27. package/deps/libmdbx/docs/_starting.md +245 -0
  28. package/deps/libmdbx/docs/_toc.md +34 -0
  29. package/deps/libmdbx/docs/header.html +96 -0
  30. package/deps/libmdbx/example/CMakeLists.txt +6 -0
  31. package/deps/libmdbx/example/README.md +1 -0
  32. package/deps/libmdbx/example/example-mdbx.c +154 -0
  33. package/deps/libmdbx/example/sample-bdb.txt +77 -0
  34. package/deps/libmdbx/mdbx.h +6655 -0
  35. package/deps/libmdbx/mdbx.h++ +6428 -0
  36. package/deps/libmdbx/packages/buildroot/0001-package-libmdbx-new-package-library-database.patch +173 -0
  37. package/deps/libmdbx/src/alloy.c +54 -0
  38. package/deps/libmdbx/src/api-cold.c +543 -0
  39. package/deps/libmdbx/src/api-copy.c +912 -0
  40. package/deps/libmdbx/src/api-cursor.c +754 -0
  41. package/deps/libmdbx/src/api-dbi.c +315 -0
  42. package/deps/libmdbx/src/api-env.c +1434 -0
  43. package/deps/libmdbx/src/api-extra.c +165 -0
  44. package/deps/libmdbx/src/api-key-transform.c +197 -0
  45. package/deps/libmdbx/src/api-misc.c +286 -0
  46. package/deps/libmdbx/src/api-opts.c +575 -0
  47. package/deps/libmdbx/src/api-range-estimate.c +365 -0
  48. package/deps/libmdbx/src/api-txn-data.c +454 -0
  49. package/deps/libmdbx/src/api-txn.c +921 -0
  50. package/deps/libmdbx/src/atomics-ops.h +364 -0
  51. package/deps/libmdbx/src/atomics-types.h +97 -0
  52. package/deps/libmdbx/src/audit.c +109 -0
  53. package/deps/libmdbx/src/bits.md +34 -0
  54. package/deps/libmdbx/src/chk.c +1796 -0
  55. package/deps/libmdbx/src/cogs.c +309 -0
  56. package/deps/libmdbx/src/cogs.h +506 -0
  57. package/deps/libmdbx/src/coherency.c +170 -0
  58. package/deps/libmdbx/src/config.h.in +88 -0
  59. package/deps/libmdbx/src/cursor.c +2396 -0
  60. package/deps/libmdbx/src/cursor.h +391 -0
  61. package/deps/libmdbx/src/dbi.c +717 -0
  62. package/deps/libmdbx/src/dbi.h +142 -0
  63. package/deps/libmdbx/src/debug_begin.h +36 -0
  64. package/deps/libmdbx/src/debug_end.h +15 -0
  65. package/deps/libmdbx/src/dpl.c +486 -0
  66. package/deps/libmdbx/src/dpl.h +134 -0
  67. package/deps/libmdbx/src/dxb.c +1335 -0
  68. package/deps/libmdbx/src/env.c +607 -0
  69. package/deps/libmdbx/src/essentials.h +125 -0
  70. package/deps/libmdbx/src/gc-get.c +1345 -0
  71. package/deps/libmdbx/src/gc-put.c +970 -0
  72. package/deps/libmdbx/src/gc.h +40 -0
  73. package/deps/libmdbx/src/global.c +474 -0
  74. package/deps/libmdbx/src/internals.h +585 -0
  75. package/deps/libmdbx/src/layout-dxb.h +288 -0
  76. package/deps/libmdbx/src/layout-lck.h +289 -0
  77. package/deps/libmdbx/src/lck-posix.c +859 -0
  78. package/deps/libmdbx/src/lck-windows.c +607 -0
  79. package/deps/libmdbx/src/lck.c +174 -0
  80. package/deps/libmdbx/src/lck.h +110 -0
  81. package/deps/libmdbx/src/logging_and_debug.c +250 -0
  82. package/deps/libmdbx/src/logging_and_debug.h +159 -0
  83. package/deps/libmdbx/src/man1/mdbx_chk.1 +106 -0
  84. package/deps/libmdbx/src/man1/mdbx_copy.1 +95 -0
  85. package/deps/libmdbx/src/man1/mdbx_drop.1 +48 -0
  86. package/deps/libmdbx/src/man1/mdbx_dump.1 +101 -0
  87. package/deps/libmdbx/src/man1/mdbx_load.1 +105 -0
  88. package/deps/libmdbx/src/man1/mdbx_stat.1 +86 -0
  89. package/deps/libmdbx/src/mdbx.c++ +1837 -0
  90. package/deps/libmdbx/src/meta.c +656 -0
  91. package/deps/libmdbx/src/meta.h +168 -0
  92. package/deps/libmdbx/src/mvcc-readers.c +414 -0
  93. package/deps/libmdbx/src/node.c +365 -0
  94. package/deps/libmdbx/src/node.h +102 -0
  95. package/deps/libmdbx/src/ntdll.def +1246 -0
  96. package/deps/libmdbx/src/options.h +534 -0
  97. package/deps/libmdbx/src/osal.c +3485 -0
  98. package/deps/libmdbx/src/osal.h +587 -0
  99. package/deps/libmdbx/src/page-get.c +483 -0
  100. package/deps/libmdbx/src/page-iov.c +185 -0
  101. package/deps/libmdbx/src/page-iov.h +34 -0
  102. package/deps/libmdbx/src/page-ops.c +744 -0
  103. package/deps/libmdbx/src/page-ops.h +142 -0
  104. package/deps/libmdbx/src/pnl.c +236 -0
  105. package/deps/libmdbx/src/pnl.h +146 -0
  106. package/deps/libmdbx/src/preface.h +990 -0
  107. package/deps/libmdbx/src/proto.h +105 -0
  108. package/deps/libmdbx/src/refund.c +212 -0
  109. package/deps/libmdbx/src/sort.h +484 -0
  110. package/deps/libmdbx/src/spill.c +431 -0
  111. package/deps/libmdbx/src/spill.h +74 -0
  112. package/deps/libmdbx/src/table.c +107 -0
  113. package/deps/libmdbx/src/tls.c +551 -0
  114. package/deps/libmdbx/src/tls.h +43 -0
  115. package/deps/libmdbx/src/tools/chk.c +673 -0
  116. package/deps/libmdbx/src/tools/copy.c +166 -0
  117. package/deps/libmdbx/src/tools/drop.c +199 -0
  118. package/deps/libmdbx/src/tools/dump.c +515 -0
  119. package/deps/libmdbx/src/tools/load.c +831 -0
  120. package/deps/libmdbx/src/tools/stat.c +516 -0
  121. package/deps/libmdbx/src/tools/wingetopt.c +87 -0
  122. package/deps/libmdbx/src/tools/wingetopt.h +30 -0
  123. package/deps/libmdbx/src/tree-ops.c +1554 -0
  124. package/deps/libmdbx/src/tree-search.c +140 -0
  125. package/deps/libmdbx/src/txl.c +99 -0
  126. package/deps/libmdbx/src/txl.h +26 -0
  127. package/deps/libmdbx/src/txn.c +1083 -0
  128. package/deps/libmdbx/src/unaligned.h +205 -0
  129. package/deps/libmdbx/src/utils.c +32 -0
  130. package/deps/libmdbx/src/utils.h +76 -0
  131. package/deps/libmdbx/src/version.c.in +44 -0
  132. package/deps/libmdbx/src/walk.c +290 -0
  133. package/deps/libmdbx/src/walk.h +20 -0
  134. package/deps/libmdbx/src/windows-import.c +152 -0
  135. package/deps/libmdbx/src/windows-import.h +128 -0
  136. package/deps/libmdbx/test/CMakeLists.txt +317 -0
  137. package/deps/libmdbx/test/append.c++ +237 -0
  138. package/deps/libmdbx/test/base.h++ +92 -0
  139. package/deps/libmdbx/test/battery-tmux.sh +64 -0
  140. package/deps/libmdbx/test/cases.c++ +118 -0
  141. package/deps/libmdbx/test/chrono.c++ +134 -0
  142. package/deps/libmdbx/test/chrono.h++ +85 -0
  143. package/deps/libmdbx/test/config.c++ +643 -0
  144. package/deps/libmdbx/test/config.h++ +334 -0
  145. package/deps/libmdbx/test/copy.c++ +62 -0
  146. package/deps/libmdbx/test/dead.c++ +39 -0
  147. package/deps/libmdbx/test/dump-load.sh +40 -0
  148. package/deps/libmdbx/test/extra/crunched_delete.c++ +409 -0
  149. package/deps/libmdbx/test/extra/cursor_closing.c++ +410 -0
  150. package/deps/libmdbx/test/extra/dbi.c++ +229 -0
  151. package/deps/libmdbx/test/extra/doubtless_positioning.c++ +253 -0
  152. package/deps/libmdbx/test/extra/dupfix_addodd.c +94 -0
  153. package/deps/libmdbx/test/extra/dupfix_multiple.c++ +311 -0
  154. package/deps/libmdbx/test/extra/early_close_dbi.c++ +137 -0
  155. package/deps/libmdbx/test/extra/hex_base64_base58.c++ +118 -0
  156. package/deps/libmdbx/test/extra/maindb_ordinal.c++ +61 -0
  157. package/deps/libmdbx/test/extra/open.c++ +96 -0
  158. package/deps/libmdbx/test/extra/pcrf/README.md +2 -0
  159. package/deps/libmdbx/test/extra/pcrf/pcrf_test.c +380 -0
  160. package/deps/libmdbx/test/extra/probe.c++ +10 -0
  161. package/deps/libmdbx/test/extra/txn.c++ +407 -0
  162. package/deps/libmdbx/test/extra/upsert_alldups.c +193 -0
  163. package/deps/libmdbx/test/fork.c++ +263 -0
  164. package/deps/libmdbx/test/hill.c++ +447 -0
  165. package/deps/libmdbx/test/jitter.c++ +197 -0
  166. package/deps/libmdbx/test/keygen.c++ +393 -0
  167. package/deps/libmdbx/test/keygen.h++ +130 -0
  168. package/deps/libmdbx/test/log.c++ +358 -0
  169. package/deps/libmdbx/test/log.h++ +91 -0
  170. package/deps/libmdbx/test/main.c++ +706 -0
  171. package/deps/libmdbx/test/nested.c++ +318 -0
  172. package/deps/libmdbx/test/osal-unix.c++ +647 -0
  173. package/deps/libmdbx/test/osal-windows.c++ +440 -0
  174. package/deps/libmdbx/test/osal.h++ +41 -0
  175. package/deps/libmdbx/test/stochastic.sh +690 -0
  176. package/deps/libmdbx/test/stub/LICENSE +24 -0
  177. package/deps/libmdbx/test/stub/README.md +8 -0
  178. package/deps/libmdbx/test/stub/pthread_barrier.c +104 -0
  179. package/deps/libmdbx/test/stub/pthread_barrier.h +77 -0
  180. package/deps/libmdbx/test/test.c++ +1551 -0
  181. package/deps/libmdbx/test/test.h++ +298 -0
  182. package/deps/libmdbx/test/tmux.conf +3 -0
  183. package/deps/libmdbx/test/try.c++ +30 -0
  184. package/deps/libmdbx/test/ttl.c++ +240 -0
  185. package/deps/libmdbx/test/utils.c++ +203 -0
  186. package/deps/libmdbx/test/utils.h++ +326 -0
  187. package/deps/libmdbx/test/valgrind_suppress.txt +536 -0
  188. package/lib/mdbx_evn_async.js +211 -0
  189. package/lib/mdbx_worker.js +195 -0
  190. package/lib/nativemou.js +6 -0
  191. package/package.json +38 -0
  192. package/src/async/envmou_close.cpp +34 -0
  193. package/src/async/envmou_close.hpp +32 -0
  194. package/src/async/envmou_copy_to.cpp +29 -0
  195. package/src/async/envmou_copy_to.hpp +38 -0
  196. package/src/async/envmou_keys.cpp +201 -0
  197. package/src/async/envmou_keys.hpp +50 -0
  198. package/src/async/envmou_open.cpp +38 -0
  199. package/src/async/envmou_open.hpp +33 -0
  200. package/src/async/envmou_query.cpp +167 -0
  201. package/src/async/envmou_query.hpp +53 -0
  202. package/src/dbimou.cpp +522 -0
  203. package/src/dbimou.hpp +82 -0
  204. package/src/env_arg0.hpp +24 -0
  205. package/src/envmou.cpp +445 -0
  206. package/src/envmou.hpp +116 -0
  207. package/src/modulemou.cpp +113 -0
  208. package/src/querymou.cpp +177 -0
  209. package/src/querymou.hpp +93 -0
  210. package/src/txnmou.cpp +254 -0
  211. package/src/txnmou.hpp +122 -0
  212. package/src/typemou.hpp +239 -0
  213. package/src/valuemou.hpp +194 -0
  214. package/test/async.js +67 -0
  215. package/test/e3.js +38 -0
  216. package/test/e4.js +89 -0
  217. package/test/e5.js +162 -0
  218. package/test/test-batch-ops.js +243 -0
  219. package/test/test-cursor-mode.js +84 -0
  220. package/test/test-multi-mode.js +87 -0
@@ -0,0 +1,534 @@
1
+ /// \copyright SPDX-License-Identifier: Apache-2.0
2
+ /// \author Леонид Юрьев aka Leonid Yuriev <leo@yuriev.ru> \date 2015-2025
3
+
4
+ /*******************************************************************************
5
+ *******************************************************************************
6
+ *
7
+ * BUILD TIME
8
+ *
9
+ * #### ##### ##### # #### # # ####
10
+ * # # # # # # # # ## # #
11
+ * # # # # # # # # # # # ####
12
+ * # # ##### # # # # # # # #
13
+ * # # # # # # # # ## # #
14
+ * #### # # # #### # # ####
15
+ *
16
+ *
17
+ */
18
+
19
+ #pragma once
20
+
21
+ #include "essentials.h"
22
+
23
+ /** \defgroup build_option Build options
24
+ * The libmdbx build options.
25
+ @{ */
26
+
27
+ /** Using fcntl(F_FULLFSYNC) with 5-10 times slowdown */
28
+ #define MDBX_OSX_WANNA_DURABILITY 0
29
+ /** Using fsync() with chance of data lost on power failure */
30
+ #define MDBX_OSX_WANNA_SPEED 1
31
+
32
+ #ifndef MDBX_APPLE_SPEED_INSTEADOF_DURABILITY
33
+ /** Choices \ref MDBX_OSX_WANNA_DURABILITY or \ref MDBX_OSX_WANNA_SPEED
34
+ * for OSX & iOS */
35
+ #define MDBX_APPLE_SPEED_INSTEADOF_DURABILITY MDBX_OSX_WANNA_DURABILITY
36
+ #endif /* MDBX_APPLE_SPEED_INSTEADOF_DURABILITY */
37
+
38
+ /** Controls checking PID against reuse DB environment after the fork() */
39
+ #ifndef MDBX_ENV_CHECKPID
40
+ #if defined(MADV_DONTFORK) || defined(_WIN32) || defined(_WIN64)
41
+ /* PID check could be omitted:
42
+ * - on Linux when madvise(MADV_DONTFORK) is available, i.e. after the fork()
43
+ * mapped pages will not be available for child process.
44
+ * - in Windows where fork() not available. */
45
+ #define MDBX_ENV_CHECKPID 0
46
+ #else
47
+ #define MDBX_ENV_CHECKPID 1
48
+ #endif
49
+ #define MDBX_ENV_CHECKPID_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_ENV_CHECKPID)
50
+ #elif !(MDBX_ENV_CHECKPID == 0 || MDBX_ENV_CHECKPID == 1)
51
+ #error MDBX_ENV_CHECKPID must be defined as 0 or 1
52
+ #else
53
+ #define MDBX_ENV_CHECKPID_CONFIG MDBX_STRINGIFY(MDBX_ENV_CHECKPID)
54
+ #endif /* MDBX_ENV_CHECKPID */
55
+
56
+ /** Controls checking transaction owner thread against misuse transactions from
57
+ * other threads. */
58
+ #ifndef MDBX_TXN_CHECKOWNER
59
+ #define MDBX_TXN_CHECKOWNER 1
60
+ #define MDBX_TXN_CHECKOWNER_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_TXN_CHECKOWNER)
61
+ #elif !(MDBX_TXN_CHECKOWNER == 0 || MDBX_TXN_CHECKOWNER == 1)
62
+ #error MDBX_TXN_CHECKOWNER must be defined as 0 or 1
63
+ #else
64
+ #define MDBX_TXN_CHECKOWNER_CONFIG MDBX_STRINGIFY(MDBX_TXN_CHECKOWNER)
65
+ #endif /* MDBX_TXN_CHECKOWNER */
66
+
67
+ /** Does a system have battery-backed Real-Time Clock or just a fake. */
68
+ #ifndef MDBX_TRUST_RTC
69
+ #if defined(__linux__) || defined(__gnu_linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
70
+ #define MDBX_TRUST_RTC 0 /* a lot of embedded systems have a fake RTC */
71
+ #else
72
+ #define MDBX_TRUST_RTC 1
73
+ #endif
74
+ #define MDBX_TRUST_RTC_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_TRUST_RTC)
75
+ #elif !(MDBX_TRUST_RTC == 0 || MDBX_TRUST_RTC == 1)
76
+ #error MDBX_TRUST_RTC must be defined as 0 or 1
77
+ #else
78
+ #define MDBX_TRUST_RTC_CONFIG MDBX_STRINGIFY(MDBX_TRUST_RTC)
79
+ #endif /* MDBX_TRUST_RTC */
80
+
81
+ /** Controls online database auto-compactification during write-transactions. */
82
+ #ifndef MDBX_ENABLE_REFUND
83
+ #define MDBX_ENABLE_REFUND 1
84
+ #elif !(MDBX_ENABLE_REFUND == 0 || MDBX_ENABLE_REFUND == 1)
85
+ #error MDBX_ENABLE_REFUND must be defined as 0 or 1
86
+ #endif /* MDBX_ENABLE_REFUND */
87
+
88
+ /** Controls profiling of GC search and updates. */
89
+ #ifndef MDBX_ENABLE_PROFGC
90
+ #define MDBX_ENABLE_PROFGC 0
91
+ #elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1)
92
+ #error MDBX_ENABLE_PROFGC must be defined as 0 or 1
93
+ #endif /* MDBX_ENABLE_PROFGC */
94
+
95
+ /** Controls gathering statistics for page operations. */
96
+ #ifndef MDBX_ENABLE_PGOP_STAT
97
+ #define MDBX_ENABLE_PGOP_STAT 1
98
+ #elif !(MDBX_ENABLE_PGOP_STAT == 0 || MDBX_ENABLE_PGOP_STAT == 1)
99
+ #error MDBX_ENABLE_PGOP_STAT must be defined as 0 or 1
100
+ #endif /* MDBX_ENABLE_PGOP_STAT */
101
+
102
+ /** Controls using Unix' mincore() to determine whether DB-pages
103
+ * are resident in memory. */
104
+ #ifndef MDBX_USE_MINCORE
105
+ #if defined(MINCORE_INCORE) || !(defined(_WIN32) || defined(_WIN64))
106
+ #define MDBX_USE_MINCORE 1
107
+ #else
108
+ #define MDBX_USE_MINCORE 0
109
+ #endif
110
+ #define MDBX_USE_MINCORE_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_USE_MINCORE)
111
+ #elif !(MDBX_USE_MINCORE == 0 || MDBX_USE_MINCORE == 1)
112
+ #error MDBX_USE_MINCORE must be defined as 0 or 1
113
+ #endif /* MDBX_USE_MINCORE */
114
+
115
+ /** Enables chunking long list of retired pages during huge transactions commit
116
+ * to avoid use sequences of pages. */
117
+ #ifndef MDBX_ENABLE_BIGFOOT
118
+ #define MDBX_ENABLE_BIGFOOT 1
119
+ #elif !(MDBX_ENABLE_BIGFOOT == 0 || MDBX_ENABLE_BIGFOOT == 1)
120
+ #error MDBX_ENABLE_BIGFOOT must be defined as 0 or 1
121
+ #endif /* MDBX_ENABLE_BIGFOOT */
122
+
123
+ /** Disable some checks to reduce an overhead and detection probability of
124
+ * database corruption to a values closer to the LMDB. */
125
+ #ifndef MDBX_DISABLE_VALIDATION
126
+ #define MDBX_DISABLE_VALIDATION 0
127
+ #elif !(MDBX_DISABLE_VALIDATION == 0 || MDBX_DISABLE_VALIDATION == 1)
128
+ #error MDBX_DISABLE_VALIDATION must be defined as 0 or 1
129
+ #endif /* MDBX_DISABLE_VALIDATION */
130
+
131
+ #ifndef MDBX_PNL_PREALLOC_FOR_RADIXSORT
132
+ #define MDBX_PNL_PREALLOC_FOR_RADIXSORT 1
133
+ #elif !(MDBX_PNL_PREALLOC_FOR_RADIXSORT == 0 || MDBX_PNL_PREALLOC_FOR_RADIXSORT == 1)
134
+ #error MDBX_PNL_PREALLOC_FOR_RADIXSORT must be defined as 0 or 1
135
+ #endif /* MDBX_PNL_PREALLOC_FOR_RADIXSORT */
136
+
137
+ #ifndef MDBX_DPL_PREALLOC_FOR_RADIXSORT
138
+ #define MDBX_DPL_PREALLOC_FOR_RADIXSORT 1
139
+ #elif !(MDBX_DPL_PREALLOC_FOR_RADIXSORT == 0 || MDBX_DPL_PREALLOC_FOR_RADIXSORT == 1)
140
+ #error MDBX_DPL_PREALLOC_FOR_RADIXSORT must be defined as 0 or 1
141
+ #endif /* MDBX_DPL_PREALLOC_FOR_RADIXSORT */
142
+
143
+ /** Controls dirty pages tracking, spilling and persisting in `MDBX_WRITEMAP`
144
+ * mode, i.e. disables in-memory database updating with consequent
145
+ * flush-to-disk/msync syscall.
146
+ *
147
+ * 0/OFF = Don't track dirty pages at all, don't spill ones, and use msync() to
148
+ * persist data. This is by-default on Linux and other systems where kernel
149
+ * provides properly LRU tracking and effective flushing on-demand.
150
+ *
151
+ * 1/ON = Tracking of dirty pages but with LRU labels for spilling and explicit
152
+ * persist ones by write(). This may be reasonable for goofy systems (Windows)
153
+ * which low performance of msync() and/or zany LRU tracking. */
154
+ #ifndef MDBX_AVOID_MSYNC
155
+ #if defined(_WIN32) || defined(_WIN64)
156
+ #define MDBX_AVOID_MSYNC 1
157
+ #else
158
+ #define MDBX_AVOID_MSYNC 0
159
+ #endif
160
+ #elif !(MDBX_AVOID_MSYNC == 0 || MDBX_AVOID_MSYNC == 1)
161
+ #error MDBX_AVOID_MSYNC must be defined as 0 or 1
162
+ #endif /* MDBX_AVOID_MSYNC */
163
+
164
+ /** Управляет механизмом поддержки разреженных наборов DBI-хендлов для снижения
165
+ * накладных расходов при запуске и обработке транзакций. */
166
+ #ifndef MDBX_ENABLE_DBI_SPARSE
167
+ #define MDBX_ENABLE_DBI_SPARSE 1
168
+ #elif !(MDBX_ENABLE_DBI_SPARSE == 0 || MDBX_ENABLE_DBI_SPARSE == 1)
169
+ #error MDBX_ENABLE_DBI_SPARSE must be defined as 0 or 1
170
+ #endif /* MDBX_ENABLE_DBI_SPARSE */
171
+
172
+ /** Управляет механизмом отложенного освобождения и поддержки пути быстрого
173
+ * открытия DBI-хендлов без захвата блокировок. */
174
+ #ifndef MDBX_ENABLE_DBI_LOCKFREE
175
+ #define MDBX_ENABLE_DBI_LOCKFREE 1
176
+ #elif !(MDBX_ENABLE_DBI_LOCKFREE == 0 || MDBX_ENABLE_DBI_LOCKFREE == 1)
177
+ #error MDBX_ENABLE_DBI_LOCKFREE must be defined as 0 or 1
178
+ #endif /* MDBX_ENABLE_DBI_LOCKFREE */
179
+
180
+ /** Controls sort order of internal page number lists.
181
+ * This mostly experimental/advanced option with not for regular MDBX users.
182
+ * \warning The database format depend on this option and libmdbx built with
183
+ * different option value are incompatible. */
184
+ #ifndef MDBX_PNL_ASCENDING
185
+ #define MDBX_PNL_ASCENDING 0
186
+ #elif !(MDBX_PNL_ASCENDING == 0 || MDBX_PNL_ASCENDING == 1)
187
+ #error MDBX_PNL_ASCENDING must be defined as 0 or 1
188
+ #endif /* MDBX_PNL_ASCENDING */
189
+
190
+ /** Avoid dependence from MSVC CRT and use ntdll.dll instead. */
191
+ #ifndef MDBX_WITHOUT_MSVC_CRT
192
+ #if defined(MDBX_BUILD_CXX) && !MDBX_BUILD_CXX
193
+ #define MDBX_WITHOUT_MSVC_CRT 1
194
+ #else
195
+ #define MDBX_WITHOUT_MSVC_CRT 0
196
+ #endif
197
+ #elif !(MDBX_WITHOUT_MSVC_CRT == 0 || MDBX_WITHOUT_MSVC_CRT == 1)
198
+ #error MDBX_WITHOUT_MSVC_CRT must be defined as 0 or 1
199
+ #endif /* MDBX_WITHOUT_MSVC_CRT */
200
+
201
+ /** Size of buffer used during copying a environment/database file. */
202
+ #ifndef MDBX_ENVCOPY_WRITEBUF
203
+ #define MDBX_ENVCOPY_WRITEBUF 1048576u
204
+ #elif MDBX_ENVCOPY_WRITEBUF < 65536u || MDBX_ENVCOPY_WRITEBUF > 1073741824u || MDBX_ENVCOPY_WRITEBUF % 65536u
205
+ #error MDBX_ENVCOPY_WRITEBUF must be defined in range 65536..1073741824 and be multiple of 65536
206
+ #endif /* MDBX_ENVCOPY_WRITEBUF */
207
+
208
+ /** Forces assertion checking. */
209
+ #ifndef MDBX_FORCE_ASSERTIONS
210
+ #define MDBX_FORCE_ASSERTIONS 0
211
+ #elif !(MDBX_FORCE_ASSERTIONS == 0 || MDBX_FORCE_ASSERTIONS == 1)
212
+ #error MDBX_FORCE_ASSERTIONS must be defined as 0 or 1
213
+ #endif /* MDBX_FORCE_ASSERTIONS */
214
+
215
+ /** Presumed malloc size overhead for each allocation
216
+ * to adjust allocations to be more aligned. */
217
+ #ifndef MDBX_ASSUME_MALLOC_OVERHEAD
218
+ #ifdef __SIZEOF_POINTER__
219
+ #define MDBX_ASSUME_MALLOC_OVERHEAD (__SIZEOF_POINTER__ * 2u)
220
+ #else
221
+ #define MDBX_ASSUME_MALLOC_OVERHEAD (sizeof(void *) * 2u)
222
+ #endif
223
+ #elif MDBX_ASSUME_MALLOC_OVERHEAD < 0 || MDBX_ASSUME_MALLOC_OVERHEAD > 64 || MDBX_ASSUME_MALLOC_OVERHEAD % 4
224
+ #error MDBX_ASSUME_MALLOC_OVERHEAD must be defined in range 0..64 and be multiple of 4
225
+ #endif /* MDBX_ASSUME_MALLOC_OVERHEAD */
226
+
227
+ /** If defined then enables integration with Valgrind,
228
+ * a memory analyzing tool. */
229
+ #ifndef ENABLE_MEMCHECK
230
+ #endif /* ENABLE_MEMCHECK */
231
+
232
+ /** If defined then enables use C11 atomics,
233
+ * otherwise detects ones availability automatically. */
234
+ #ifndef MDBX_HAVE_C11ATOMICS
235
+ #endif /* MDBX_HAVE_C11ATOMICS */
236
+
237
+ /** If defined then enables use the GCC's `__builtin_cpu_supports()`
238
+ * for runtime dispatching depending on the CPU's capabilities.
239
+ * \note Defining `MDBX_HAVE_BUILTIN_CPU_SUPPORTS` to `0` should avoided unless
240
+ * build for particular single-target platform, since on AMD64/x86 this disables
241
+ * dynamic choice (at runtime) of SSE2 / AVX2 / AVX512 instructions
242
+ * with fallback to non-accelerated baseline code. */
243
+ #ifndef MDBX_HAVE_BUILTIN_CPU_SUPPORTS
244
+ #if defined(__APPLE__) || defined(BIONIC)
245
+ /* Never use any modern features on Apple's or Google's OSes
246
+ * since a lot of troubles with compatibility and/or performance */
247
+ #define MDBX_HAVE_BUILTIN_CPU_SUPPORTS 0
248
+ #elif defined(__e2k__)
249
+ #define MDBX_HAVE_BUILTIN_CPU_SUPPORTS 0
250
+ #elif __has_builtin(__builtin_cpu_supports) || defined(__BUILTIN_CPU_SUPPORTS__) || \
251
+ (defined(__ia32__) && __GNUC_PREREQ(4, 8) && __GLIBC_PREREQ(2, 23))
252
+ #define MDBX_HAVE_BUILTIN_CPU_SUPPORTS 1
253
+ #else
254
+ #define MDBX_HAVE_BUILTIN_CPU_SUPPORTS 0
255
+ #endif
256
+ #elif !(MDBX_HAVE_BUILTIN_CPU_SUPPORTS == 0 || MDBX_HAVE_BUILTIN_CPU_SUPPORTS == 1)
257
+ #error MDBX_HAVE_BUILTIN_CPU_SUPPORTS must be defined as 0 or 1
258
+ #endif /* MDBX_HAVE_BUILTIN_CPU_SUPPORTS */
259
+
260
+ /** if enabled then instead of the returned error `MDBX_REMOTE`, only a warning is issued, when
261
+ * the database being opened in non-read-only mode is located in a file system exported via NFS. */
262
+ #ifndef MDBX_ENABLE_NON_READONLY_EXPORT
263
+ #define MDBX_ENABLE_NON_READONLY_EXPORT 0
264
+ #elif !(MDBX_ENABLE_NON_READONLY_EXPORT == 0 || MDBX_ENABLE_NON_READONLY_EXPORT == 1)
265
+ #error MDBX_ENABLE_NON_READONLY_EXPORT must be defined as 0 or 1
266
+ #endif /* MDBX_ENABLE_NON_READONLY_EXPORT */
267
+
268
+ //------------------------------------------------------------------------------
269
+
270
+ /** Win32 File Locking API for \ref MDBX_LOCKING */
271
+ #define MDBX_LOCKING_WIN32FILES -1
272
+
273
+ /** SystemV IPC semaphores for \ref MDBX_LOCKING */
274
+ #define MDBX_LOCKING_SYSV 5
275
+
276
+ /** POSIX-1 Shared anonymous semaphores for \ref MDBX_LOCKING */
277
+ #define MDBX_LOCKING_POSIX1988 1988
278
+
279
+ /** POSIX-2001 Shared Mutexes for \ref MDBX_LOCKING */
280
+ #define MDBX_LOCKING_POSIX2001 2001
281
+
282
+ /** POSIX-2008 Robust Mutexes for \ref MDBX_LOCKING */
283
+ #define MDBX_LOCKING_POSIX2008 2008
284
+
285
+ /** Advanced: Choices the locking implementation (autodetection by default). */
286
+ #if defined(_WIN32) || defined(_WIN64)
287
+ #define MDBX_LOCKING MDBX_LOCKING_WIN32FILES
288
+ #else
289
+ #ifndef MDBX_LOCKING
290
+ #if defined(_POSIX_THREAD_PROCESS_SHARED) && _POSIX_THREAD_PROCESS_SHARED >= 200112L && !defined(__FreeBSD__)
291
+
292
+ /* Some platforms define the EOWNERDEAD error code even though they
293
+ * don't support Robust Mutexes. If doubt compile with -MDBX_LOCKING=2001. */
294
+ #if defined(EOWNERDEAD) && _POSIX_THREAD_PROCESS_SHARED >= 200809L && \
295
+ ((defined(_POSIX_THREAD_ROBUST_PRIO_INHERIT) && _POSIX_THREAD_ROBUST_PRIO_INHERIT > 0) || \
296
+ (defined(_POSIX_THREAD_ROBUST_PRIO_PROTECT) && _POSIX_THREAD_ROBUST_PRIO_PROTECT > 0) || \
297
+ defined(PTHREAD_MUTEX_ROBUST) || defined(PTHREAD_MUTEX_ROBUST_NP)) && \
298
+ (!defined(__GLIBC__) || __GLIBC_PREREQ(2, 10) /* troubles with Robust mutexes before 2.10 */)
299
+ #define MDBX_LOCKING MDBX_LOCKING_POSIX2008
300
+ #else
301
+ #define MDBX_LOCKING MDBX_LOCKING_POSIX2001
302
+ #endif
303
+ #elif defined(__sun) || defined(__SVR4) || defined(__svr4__)
304
+ #define MDBX_LOCKING MDBX_LOCKING_POSIX1988
305
+ #else
306
+ #define MDBX_LOCKING MDBX_LOCKING_SYSV
307
+ #endif
308
+ #define MDBX_LOCKING_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_LOCKING)
309
+ #else
310
+ #define MDBX_LOCKING_CONFIG MDBX_STRINGIFY(MDBX_LOCKING)
311
+ #endif /* MDBX_LOCKING */
312
+ #endif /* !Windows */
313
+
314
+ /** Advanced: Using POSIX OFD-locks (autodetection by default). */
315
+ #ifndef MDBX_USE_OFDLOCKS
316
+ #if ((defined(F_OFD_SETLK) && defined(F_OFD_SETLKW) && defined(F_OFD_GETLK)) || \
317
+ (defined(F_OFD_SETLK64) && defined(F_OFD_SETLKW64) && defined(F_OFD_GETLK64))) && \
318
+ !defined(MDBX_SAFE4QEMU) && !defined(__sun) /* OFD-lock are broken on Solaris */
319
+ #define MDBX_USE_OFDLOCKS 1
320
+ #else
321
+ #define MDBX_USE_OFDLOCKS 0
322
+ #endif
323
+ #define MDBX_USE_OFDLOCKS_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_USE_OFDLOCKS)
324
+ #elif !(MDBX_USE_OFDLOCKS == 0 || MDBX_USE_OFDLOCKS == 1)
325
+ #error MDBX_USE_OFDLOCKS must be defined as 0 or 1
326
+ #else
327
+ #define MDBX_USE_OFDLOCKS_CONFIG MDBX_STRINGIFY(MDBX_USE_OFDLOCKS)
328
+ #endif /* MDBX_USE_OFDLOCKS */
329
+
330
+ /** Advanced: Using sendfile() syscall (autodetection by default). */
331
+ #ifndef MDBX_USE_SENDFILE
332
+ #if ((defined(__linux__) || defined(__gnu_linux__)) && !defined(__ANDROID_API__)) || \
333
+ (defined(__ANDROID_API__) && __ANDROID_API__ >= 21)
334
+ #define MDBX_USE_SENDFILE 1
335
+ #else
336
+ #define MDBX_USE_SENDFILE 0
337
+ #endif
338
+ #elif !(MDBX_USE_SENDFILE == 0 || MDBX_USE_SENDFILE == 1)
339
+ #error MDBX_USE_SENDFILE must be defined as 0 or 1
340
+ #endif /* MDBX_USE_SENDFILE */
341
+
342
+ /** Advanced: Using copy_file_range() syscall (autodetection by default). */
343
+ #ifndef MDBX_USE_COPYFILERANGE
344
+ #if __GLIBC_PREREQ(2, 27) && defined(_GNU_SOURCE)
345
+ #define MDBX_USE_COPYFILERANGE 1
346
+ #else
347
+ #define MDBX_USE_COPYFILERANGE 0
348
+ #endif
349
+ #elif !(MDBX_USE_COPYFILERANGE == 0 || MDBX_USE_COPYFILERANGE == 1)
350
+ #error MDBX_USE_COPYFILERANGE must be defined as 0 or 1
351
+ #endif /* MDBX_USE_COPYFILERANGE */
352
+
353
+ //------------------------------------------------------------------------------
354
+
355
+ #ifndef MDBX_CPU_WRITEBACK_INCOHERENT
356
+ #if defined(__ia32__) || defined(__e2k__) || defined(__hppa) || defined(__hppa__) || defined(DOXYGEN)
357
+ #define MDBX_CPU_WRITEBACK_INCOHERENT 0
358
+ #else
359
+ #define MDBX_CPU_WRITEBACK_INCOHERENT 1
360
+ #endif
361
+ #elif !(MDBX_CPU_WRITEBACK_INCOHERENT == 0 || MDBX_CPU_WRITEBACK_INCOHERENT == 1)
362
+ #error MDBX_CPU_WRITEBACK_INCOHERENT must be defined as 0 or 1
363
+ #endif /* MDBX_CPU_WRITEBACK_INCOHERENT */
364
+
365
+ #ifndef MDBX_MMAP_INCOHERENT_FILE_WRITE
366
+ #ifdef __OpenBSD__
367
+ #define MDBX_MMAP_INCOHERENT_FILE_WRITE 1
368
+ #else
369
+ #define MDBX_MMAP_INCOHERENT_FILE_WRITE 0
370
+ #endif
371
+ #elif !(MDBX_MMAP_INCOHERENT_FILE_WRITE == 0 || MDBX_MMAP_INCOHERENT_FILE_WRITE == 1)
372
+ #error MDBX_MMAP_INCOHERENT_FILE_WRITE must be defined as 0 or 1
373
+ #endif /* MDBX_MMAP_INCOHERENT_FILE_WRITE */
374
+
375
+ #ifndef MDBX_MMAP_INCOHERENT_CPU_CACHE
376
+ #if defined(__mips) || defined(__mips__) || defined(__mips64) || defined(__mips64__) || defined(_M_MRX000) || \
377
+ defined(_MIPS_) || defined(__MWERKS__) || defined(__sgi)
378
+ /* MIPS has cache coherency issues. */
379
+ #define MDBX_MMAP_INCOHERENT_CPU_CACHE 1
380
+ #else
381
+ /* LY: assume no relevant mmap/dcache issues. */
382
+ #define MDBX_MMAP_INCOHERENT_CPU_CACHE 0
383
+ #endif
384
+ #elif !(MDBX_MMAP_INCOHERENT_CPU_CACHE == 0 || MDBX_MMAP_INCOHERENT_CPU_CACHE == 1)
385
+ #error MDBX_MMAP_INCOHERENT_CPU_CACHE must be defined as 0 or 1
386
+ #endif /* MDBX_MMAP_INCOHERENT_CPU_CACHE */
387
+
388
+ /** Assume system needs explicit syscall to sync/flush/write modified mapped
389
+ * memory. */
390
+ #ifndef MDBX_MMAP_NEEDS_JOLT
391
+ #if MDBX_MMAP_INCOHERENT_FILE_WRITE || MDBX_MMAP_INCOHERENT_CPU_CACHE || !(defined(__linux__) || defined(__gnu_linux__))
392
+ #define MDBX_MMAP_NEEDS_JOLT 1
393
+ #else
394
+ #define MDBX_MMAP_NEEDS_JOLT 0
395
+ #endif
396
+ #define MDBX_MMAP_NEEDS_JOLT_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_MMAP_NEEDS_JOLT)
397
+ #elif !(MDBX_MMAP_NEEDS_JOLT == 0 || MDBX_MMAP_NEEDS_JOLT == 1)
398
+ #error MDBX_MMAP_NEEDS_JOLT must be defined as 0 or 1
399
+ #endif /* MDBX_MMAP_NEEDS_JOLT */
400
+
401
+ #ifndef MDBX_64BIT_ATOMIC
402
+ #if MDBX_WORDBITS >= 64 || defined(DOXYGEN)
403
+ #define MDBX_64BIT_ATOMIC 1
404
+ #else
405
+ #define MDBX_64BIT_ATOMIC 0
406
+ #endif
407
+ #define MDBX_64BIT_ATOMIC_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_64BIT_ATOMIC)
408
+ #elif !(MDBX_64BIT_ATOMIC == 0 || MDBX_64BIT_ATOMIC == 1)
409
+ #error MDBX_64BIT_ATOMIC must be defined as 0 or 1
410
+ #else
411
+ #define MDBX_64BIT_ATOMIC_CONFIG MDBX_STRINGIFY(MDBX_64BIT_ATOMIC)
412
+ #endif /* MDBX_64BIT_ATOMIC */
413
+
414
+ #ifndef MDBX_64BIT_CAS
415
+ #if defined(__GCC_ATOMIC_LLONG_LOCK_FREE)
416
+ #if __GCC_ATOMIC_LLONG_LOCK_FREE > 1
417
+ #define MDBX_64BIT_CAS 1
418
+ #else
419
+ #define MDBX_64BIT_CAS 0
420
+ #endif
421
+ #elif defined(__CLANG_ATOMIC_LLONG_LOCK_FREE)
422
+ #if __CLANG_ATOMIC_LLONG_LOCK_FREE > 1
423
+ #define MDBX_64BIT_CAS 1
424
+ #else
425
+ #define MDBX_64BIT_CAS 0
426
+ #endif
427
+ #elif defined(ATOMIC_LLONG_LOCK_FREE)
428
+ #if ATOMIC_LLONG_LOCK_FREE > 1
429
+ #define MDBX_64BIT_CAS 1
430
+ #else
431
+ #define MDBX_64BIT_CAS 0
432
+ #endif
433
+ #elif defined(_MSC_VER) || defined(__APPLE__) || defined(DOXYGEN)
434
+ #define MDBX_64BIT_CAS 1
435
+ #elif !(MDBX_64BIT_CAS == 0 || MDBX_64BIT_CAS == 1)
436
+ #error MDBX_64BIT_CAS must be defined as 0 or 1
437
+ #else
438
+ #define MDBX_64BIT_CAS MDBX_64BIT_ATOMIC
439
+ #endif
440
+ #define MDBX_64BIT_CAS_CONFIG "AUTO=" MDBX_STRINGIFY(MDBX_64BIT_CAS)
441
+ #else
442
+ #define MDBX_64BIT_CAS_CONFIG MDBX_STRINGIFY(MDBX_64BIT_CAS)
443
+ #endif /* MDBX_64BIT_CAS */
444
+
445
+ #ifndef MDBX_UNALIGNED_OK
446
+ #if defined(__ALIGNED__) || defined(__SANITIZE_UNDEFINED__) || defined(ENABLE_UBSAN)
447
+ #define MDBX_UNALIGNED_OK 0 /* no unaligned access allowed */
448
+ #elif defined(__ARM_FEATURE_UNALIGNED)
449
+ #define MDBX_UNALIGNED_OK 4 /* ok unaligned for 32-bit words */
450
+ #elif defined(__e2k__) || defined(__elbrus__)
451
+ #if __iset__ > 4
452
+ #define MDBX_UNALIGNED_OK 8 /* ok unaligned for 64-bit words */
453
+ #else
454
+ #define MDBX_UNALIGNED_OK 4 /* ok unaligned for 32-bit words */
455
+ #endif
456
+ #elif defined(__ia32__)
457
+ #define MDBX_UNALIGNED_OK 8 /* ok unaligned for 64-bit words */
458
+ #elif __CLANG_PREREQ(5, 0) || __GNUC_PREREQ(5, 0)
459
+ /* expecting an optimization will well done, also this
460
+ * hushes false-positives from UBSAN (undefined behaviour sanitizer) */
461
+ #define MDBX_UNALIGNED_OK 0
462
+ #else
463
+ #define MDBX_UNALIGNED_OK 0 /* no unaligned access allowed */
464
+ #endif
465
+ #elif MDBX_UNALIGNED_OK == 1
466
+ #undef MDBX_UNALIGNED_OK
467
+ #define MDBX_UNALIGNED_OK 32 /* any unaligned access allowed */
468
+ #endif /* MDBX_UNALIGNED_OK */
469
+
470
+ #ifndef MDBX_CACHELINE_SIZE
471
+ #if defined(SYSTEM_CACHE_ALIGNMENT_SIZE)
472
+ #define MDBX_CACHELINE_SIZE SYSTEM_CACHE_ALIGNMENT_SIZE
473
+ #elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
474
+ #define MDBX_CACHELINE_SIZE 128
475
+ #else
476
+ #define MDBX_CACHELINE_SIZE 64
477
+ #endif
478
+ #endif /* MDBX_CACHELINE_SIZE */
479
+
480
+ /* Max length of iov-vector passed to writev() call, used for auxilary writes */
481
+ #ifndef MDBX_AUXILARY_IOV_MAX
482
+ #define MDBX_AUXILARY_IOV_MAX 64
483
+ #endif
484
+ #if defined(IOV_MAX) && IOV_MAX < MDBX_AUXILARY_IOV_MAX
485
+ #undef MDBX_AUXILARY_IOV_MAX
486
+ #define MDBX_AUXILARY_IOV_MAX IOV_MAX
487
+ #endif /* MDBX_AUXILARY_IOV_MAX */
488
+
489
+ /* An extra/custom information provided during library build */
490
+ #ifndef MDBX_BUILD_METADATA
491
+ #define MDBX_BUILD_METADATA ""
492
+ #endif /* MDBX_BUILD_METADATA */
493
+ /** @} end of build options */
494
+ /*******************************************************************************
495
+ *******************************************************************************
496
+ ******************************************************************************/
497
+
498
+ #ifndef DOXYGEN
499
+
500
+ /* In case the MDBX_DEBUG is undefined set it corresponding to NDEBUG */
501
+ #ifndef MDBX_DEBUG
502
+ #ifdef NDEBUG
503
+ #define MDBX_DEBUG 0
504
+ #else
505
+ #define MDBX_DEBUG 1
506
+ #endif
507
+ #endif
508
+ #if MDBX_DEBUG < 0 || MDBX_DEBUG > 2
509
+ #error "The MDBX_DEBUG must be defined to 0, 1 or 2"
510
+ #endif /* MDBX_DEBUG */
511
+
512
+ #else
513
+
514
+ /* !!! Actually this is a fake definitions for Doxygen !!! */
515
+
516
+ /** Controls enabling of debugging features.
517
+ *
518
+ * - `MDBX_DEBUG = 0` (by default) Disables any debugging features at all,
519
+ * including logging and assertion controls.
520
+ * Logging level and corresponding debug flags changing
521
+ * by \ref mdbx_setup_debug() will not have effect.
522
+ * - `MDBX_DEBUG > 0` Enables code for the debugging features (logging,
523
+ * assertions checking and internal audit).
524
+ * Simultaneously sets the default logging level
525
+ * to the `MDBX_DEBUG` value.
526
+ * Also enables \ref MDBX_DBG_AUDIT if `MDBX_DEBUG >= 2`.
527
+ *
528
+ * \ingroup build_option */
529
+ #define MDBX_DEBUG 0...2
530
+
531
+ /** Disables using of GNU libc extensions. */
532
+ #define MDBX_DISABLE_GNU_SOURCE 0 or 1
533
+
534
+ #endif /* DOXYGEN */