Skip to content

Commit c15ad25

Browse files
committed
mdbx: add minor workaround for E2K LCC's bug.
Related to https://bugs.mcst.ru/bugzilla/show_bug.cgi?id=6011 Change-Id: I562dbcedb3c172e0646dcb03ef6d5cd3f14e02b9
1 parent a14d6bc commit c15ad25

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

Diff for: src/core.c

+15-11
Original file line numberDiff line numberDiff line change
@@ -12240,28 +12240,32 @@ __cold int mdbx_env_delete(const char *pathname, MDBX_env_delete_mode_t mode) {
1224012240
break;
1224112241
}
1224212242

12243-
MDBX_env dummy_env;
12244-
memset(&dummy_env, 0, sizeof(dummy_env));
12245-
dummy_env.me_flags =
12243+
#ifdef __e2k__ /* https://bugs.mcst.ru/bugzilla/show_bug.cgi?id=6011 */
12244+
MDBX_env *const dummy_env = alloca(sizeof(MDBX_env));
12245+
#else
12246+
MDBX_env dummy_env_silo, *const dummy_env = &dummy_env_silo;
12247+
#endif
12248+
memset(dummy_env, 0, sizeof(*dummy_env));
12249+
dummy_env->me_flags =
1224612250
(mode == MDBX_ENV_ENSURE_UNUSED) ? MDBX_EXCLUSIVE : MDBX_ENV_DEFAULTS;
12247-
dummy_env.me_os_psize = (unsigned)mdbx_syspagesize();
12248-
dummy_env.me_psize = (unsigned)mdbx_default_pagesize();
12249-
dummy_env.me_pathname = (char *)pathname;
12251+
dummy_env->me_os_psize = (unsigned)mdbx_syspagesize();
12252+
dummy_env->me_psize = (unsigned)mdbx_default_pagesize();
12253+
dummy_env->me_pathname = (char *)pathname;
1225012254

1225112255
MDBX_handle_env_pathname env_pathname;
12252-
STATIC_ASSERT(sizeof(dummy_env.me_flags) == sizeof(MDBX_env_flags_t));
12256+
STATIC_ASSERT(sizeof(dummy_env->me_flags) == sizeof(MDBX_env_flags_t));
1225312257
int rc = MDBX_RESULT_TRUE,
1225412258
err = mdbx_handle_env_pathname(
12255-
&env_pathname, pathname, (MDBX_env_flags_t *)&dummy_env.me_flags, 0);
12259+
&env_pathname, pathname, (MDBX_env_flags_t *)&dummy_env->me_flags, 0);
1225612260
if (likely(err == MDBX_SUCCESS)) {
1225712261
mdbx_filehandle_t clk_handle = INVALID_HANDLE_VALUE,
1225812262
dxb_handle = INVALID_HANDLE_VALUE;
1225912263
if (mode > MDBX_ENV_JUST_DELETE) {
12260-
err = mdbx_openfile(MDBX_OPEN_DELETE, &dummy_env, env_pathname.dxb,
12264+
err = mdbx_openfile(MDBX_OPEN_DELETE, dummy_env, env_pathname.dxb,
1226112265
&dxb_handle, 0);
1226212266
err = (err == MDBX_ENOFILE) ? MDBX_SUCCESS : err;
1226312267
if (err == MDBX_SUCCESS) {
12264-
err = mdbx_openfile(MDBX_OPEN_DELETE, &dummy_env, env_pathname.lck,
12268+
err = mdbx_openfile(MDBX_OPEN_DELETE, dummy_env, env_pathname.lck,
1226512269
&clk_handle, 0);
1226612270
err = (err == MDBX_ENOFILE) ? MDBX_SUCCESS : err;
1226712271
}
@@ -12287,7 +12291,7 @@ __cold int mdbx_env_delete(const char *pathname, MDBX_env_delete_mode_t mode) {
1228712291
err = MDBX_SUCCESS;
1228812292
}
1228912293

12290-
if (err == MDBX_SUCCESS && !(dummy_env.me_flags & MDBX_NOSUBDIR)) {
12294+
if (err == MDBX_SUCCESS && !(dummy_env->me_flags & MDBX_NOSUBDIR)) {
1229112295
err = mdbx_removedirectory(pathname);
1229212296
if (err == MDBX_SUCCESS)
1229312297
rc = MDBX_SUCCESS;

0 commit comments

Comments
 (0)