diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/env.h | 230 | ||||
| -rw-r--r-- | src/tools/env.c | 124 |
2 files changed, 187 insertions, 167 deletions
diff --git a/src/include/env.h b/src/include/env.h index db4974bd..ff8961c6 100644 --- a/src/include/env.h +++ b/src/include/env.h @@ -14,11 +14,11 @@ } /* - INTEGER(NAME, name, default, min, max) - INTEGER64(NAME, name, default) - BOOLEAN(NAME, name, default) - ADDRESS(NAME, name) - STRING(NAME, name) + INTEGER(NAME, name, default, min, max, wine) + INTEGER64(NAME, name, default, wine) + BOOLEAN(NAME, name, default, wine) + ADDRESS(NAME, name, wine) + STRING(NAME, name, wine) */ #ifdef _WIN32 @@ -30,117 +30,117 @@ extern char* ftrace_name; #define BOX64_NOBANNER_DEFAULT (isatty(fileno(stdout)) ? 0 : 1) #endif -#define ENVSUPER1() \ - STRING(BOX64_ADDLIBS, addlibs) \ - BOOLEAN(BOX64_ALLOWMISSINGLIBS, allow_missing_libs, 0) \ - STRING(BOX64_ARGS, args) \ - STRING(BOX64_BASH, bash) \ - BOOLEAN(BOX64_CEFDISABLEGPU, cefdisablegpu, 0) \ - BOOLEAN(BOX64_CEFDISABLEGPUCOMPOSITOR, cefdisablegpucompositor, 0) \ - INTEGER(BOX64_CPUTYPE, cputype, 0, 0, 1) \ - BOOLEAN(BOX64_CRASHHANDLER, dummy_crashhandler, 1) \ - BOOLEAN(BOX64_DLSYM_ERROR, dlsym_error, 0) \ - BOOLEAN(BOX64_DUMP, dump, 0) \ - BOOLEAN(BOX64_DYNAREC_ALIGNED_ATOMICS, dynarec_aligned_atomics, 0) \ - INTEGER(BOX64_DYNAREC_BIGBLOCK, dynarec_bigblock, 2, 0, 3) \ - BOOLEAN(BOX64_DYNAREC_BLEEDING_EDGE, dynarec_bleeding_edge, 1) \ - INTEGER(BOX64_DYNAREC_CALLRET, dynarec_callret, 0, 0, 2) \ - BOOLEAN(BOX64_DYNAREC_DF, dynarec_df, 1) \ - INTEGER(BOX64_DYNAREC_DIRTY, dynarec_dirty, 0, 0, 2) \ - BOOLEAN(BOX64_DYNAREC_DIV0, dynarec_div0, 0) \ - INTEGER(BOX64_DYNAREC_DUMP, dynarec_dump, 0, 0, 2) \ - STRING(BOX64_DYNAREC_DUMP_RANGE, dynarec_dump_range) \ - BOOLEAN(BOX64_DYNAREC_FASTNAN, dynarec_fastnan, 1) \ - INTEGER(BOX64_DYNAREC_FASTROUND, dynarec_fastround, 1, 0, 2) \ - INTEGER(BOX64_DYNAREC_FORWARD, dynarec_forward, 128, 0, 1024) \ - STRING(BOX64_DYNAREC_GDBJIT, dynarec_gdbjit_str) \ - INTEGER(BOX64_DYNAREC_LOG, dynarec_log, 0, 0, 3) \ - INTEGER(BOX64_DYNAREC_MISSING, dynarec_missing, 0, 0, 2) \ - BOOLEAN(BOX64_DYNAREC_NATIVEFLAGS, dynarec_nativeflags, 1) \ - INTEGER(BOX64_DYNAREC_PAUSE, dynarec_pause, 0, 0, 3) \ - BOOLEAN(BOX64_DYNAREC_PERFMAP, dynarec_perf_map, 0) \ - INTEGER(BOX64_DYNAREC_SAFEFLAGS, dynarec_safeflags, 1, 0, 2) \ - INTEGER(BOX64_DYNAREC_STRONGMEM, dynarec_strongmem, 0, 0, 3) \ - BOOLEAN(BOX64_DYNAREC_TBB, dynarec_tbb, 1) \ - STRING(BOX64_DYNAREC_TEST, dynarec_test_str) \ - BOOLEAN(BOX64_DYNAREC_TRACE, dynarec_trace, 0) \ - BOOLEAN(BOX64_DYNAREC_VOLATILE_METADATA, dynarec_volatile_metadata, 1) \ - BOOLEAN(BOX64_DYNAREC_WAIT, dynarec_wait, 1) \ - INTEGER(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 1, 0, 2) \ - INTEGER(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 0, 0, 2) \ - STRING(BOX64_EMULATED_LIBS, emulated_libs) \ - STRING(BOX64_ENV, env) \ - STRING(BOX64_ENV1, env1) \ - STRING(BOX64_ENV2, env2) \ - STRING(BOX64_ENV3, env3) \ - STRING(BOX64_ENV4, env4) \ - STRING(BOX64_ENV5, env5) \ - BOOLEAN(BOX64_EXIT, exit, 0) \ - BOOLEAN(BOX64_FIX_64BIT_INODES, fix_64bit_inodes, 0) \ - BOOLEAN(BOX64_IGNOREINT3, ignoreint3, 0) \ - STRING(BOX64_INSERT_ARGS, insert_args) \ - BOOLEAN(BOX64_INPROCESSGPU, inprocessgpu, 0) \ - INTEGER(BOX64_JITGDB, jitgdb, 0, 0, 3) \ - BOOLEAN(BOX64_JVM, jvm, 1) \ - STRING(BOX64_LD_LIBRARY_PATH, ld_library_path) \ - BOOLEAN(BOX64_LIBCEF, libcef, 1) \ - STRING(BOX64_LIBGL, libgl) \ - ADDRESS(BOX64_LOAD_ADDR, load_addr) \ - INTEGER(BOX64_LOG, log, DEFAULT_LOG_LEVEL, 0, 3) \ - INTEGER(BOX64_MALLOC_HACK, malloc_hack, 0, 0, 2) \ - INTEGER(BOX64_MAXCPU, new_maxcpu, 0, 0, 100) \ - BOOLEAN(BOX64_MMAP32, mmap32, 1) \ - BOOLEAN(BOX64_NOBANNER, nobanner, BOX64_NOBANNER_DEFAULT) \ - STRING(BOX64_NODYNAREC, nodynarec) \ - BOOLEAN(BOX64_NOGTK, nogtk, 0) \ - BOOLEAN(BOX64_NOPULSE, nopulse, 0) \ - BOOLEAN(BOX64_NORCFILES, noenvfiles, 0) \ - BOOLEAN(BOX64_NOSANDBOX, nosandbox, 0) \ - BOOLEAN(BOX64_NOSIGSEGV, nosigsegv, 0) \ - BOOLEAN(BOX64_NOSIGILL, nosigill, 0) \ - BOOLEAN(BOX64_NOVULKAN, novulkan, 0) \ - STRING(BOX64_PATH, path) \ - BOOLEAN(BOX64_PREFER_EMULATED, prefer_emulated, 0) \ - BOOLEAN(BOX64_PREFER_WRAPPED, prefer_wrapped, 0) \ - STRING(BOX64_RCFILE, envfile) \ - BOOLEAN(BOX64_RDTSC_1GHZ, rdtsc_1ghz, 0) \ - BOOLEAN(BOX64_RESERVE_HIGH, reserve_high, 0) \ - INTEGER(BOX64_ROLLING_LOG, cycle_log, 0, 0, 2048) \ - BOOLEAN(BOX64_SDL2_JGUID, sdl2_jguid, 0) \ - BOOLEAN(BOX64_SHAEXT, shaext, 1) \ - BOOLEAN(BOX64_SHOWBT, showbt, 0) \ - BOOLEAN(BOX64_SHOWSEGV, showsegv, 0) \ - BOOLEAN(BOX64_SSE_FLUSHTO0, sse_flushto0, 0) \ - BOOLEAN(BOX64_SSE42, sse42, 1) \ - BOOLEAN(BOX64_SYNC_ROUNDING, sync_rounding, 0) \ - BOOLEAN(BOX64_TRACE_COLOR, trace_regsdiff, 0) \ - BOOLEAN(BOX64_TRACE_EMM, trace_emm, 0) \ - STRING(BOX64_TRACE_FILE, trace_file) \ - STRING(BOX64_TRACE_INIT, trace_init) \ - INTEGER64(BOX64_TRACE_START, start_cnt, 0) \ - BOOLEAN(BOX64_TRACE_XMM, trace_xmm, 0) \ - STRING(BOX64_TRACE, trace) \ - BOOLEAN(BOX64_UNITYPLAYER, unityplayer, 1) \ - BOOLEAN(BOX64_WRAP_EGL, wrap_egl, 0) \ - BOOLEAN(BOX64_X11GLX, x11glx, 1) \ - BOOLEAN(BOX64_X11SYNC, x11sync, 0) \ - BOOLEAN(BOX64_X11THREADS, x11threads, 0) \ - BOOLEAN(BOX64_X87_NO80BITS, x87_no80bits, 0) +#define ENVSUPER1() \ + STRING(BOX64_ADDLIBS, addlibs, 0) \ + BOOLEAN(BOX64_ALLOWMISSINGLIBS, allow_missing_libs, 0, 0) \ + STRING(BOX64_ARGS, args, 0) \ + STRING(BOX64_BASH, bash, 0) \ + BOOLEAN(BOX64_CEFDISABLEGPU, cefdisablegpu, 0, 0) \ + BOOLEAN(BOX64_CEFDISABLEGPUCOMPOSITOR, cefdisablegpucompositor, 0, 0) \ + INTEGER(BOX64_CPUTYPE, cputype, 0, 0, 1, 1) \ + BOOLEAN(BOX64_CRASHHANDLER, dummy_crashhandler, 1, 0) \ + BOOLEAN(BOX64_DLSYM_ERROR, dlsym_error, 0, 0) \ + BOOLEAN(BOX64_DUMP, dump, 0, 1) \ + BOOLEAN(BOX64_DYNAREC_ALIGNED_ATOMICS, dynarec_aligned_atomics, 0, 1) \ + INTEGER(BOX64_DYNAREC_BIGBLOCK, dynarec_bigblock, 2, 0, 3, 1) \ + BOOLEAN(BOX64_DYNAREC_BLEEDING_EDGE, dynarec_bleeding_edge, 1, 0) \ + INTEGER(BOX64_DYNAREC_CALLRET, dynarec_callret, 0, 0, 2, 1) \ + BOOLEAN(BOX64_DYNAREC_DF, dynarec_df, 1, 1) \ + INTEGER(BOX64_DYNAREC_DIRTY, dynarec_dirty, 0, 0, 2, 0) \ + BOOLEAN(BOX64_DYNAREC_DIV0, dynarec_div0, 0, 1) \ + INTEGER(BOX64_DYNAREC_DUMP, dynarec_dump, 0, 0, 2, 1) \ + STRING(BOX64_DYNAREC_DUMP_RANGE, dynarec_dump_range, 1) \ + BOOLEAN(BOX64_DYNAREC_FASTNAN, dynarec_fastnan, 1, 1) \ + INTEGER(BOX64_DYNAREC_FASTROUND, dynarec_fastround, 1, 0, 2, 1) \ + INTEGER(BOX64_DYNAREC_FORWARD, dynarec_forward, 128, 0, 1024, 1) \ + STRING(BOX64_DYNAREC_GDBJIT, dynarec_gdbjit_str, 0) \ + INTEGER(BOX64_DYNAREC_LOG, dynarec_log, 0, 0, 3, 1) \ + INTEGER(BOX64_DYNAREC_MISSING, dynarec_missing, 0, 0, 2, 1) \ + BOOLEAN(BOX64_DYNAREC_NATIVEFLAGS, dynarec_nativeflags, 1, 1) \ + INTEGER(BOX64_DYNAREC_PAUSE, dynarec_pause, 0, 0, 3, 1) \ + BOOLEAN(BOX64_DYNAREC_PERFMAP, dynarec_perf_map, 0, 0) \ + INTEGER(BOX64_DYNAREC_SAFEFLAGS, dynarec_safeflags, 1, 0, 2, 1) \ + INTEGER(BOX64_DYNAREC_STRONGMEM, dynarec_strongmem, 0, 0, 3, 1) \ + BOOLEAN(BOX64_DYNAREC_TBB, dynarec_tbb, 1, 0) \ + STRING(BOX64_DYNAREC_TEST, dynarec_test_str, 1) \ + BOOLEAN(BOX64_DYNAREC_TRACE, dynarec_trace, 0, 0) \ + BOOLEAN(BOX64_DYNAREC_VOLATILE_METADATA, dynarec_volatile_metadata, 1, 0) \ + BOOLEAN(BOX64_DYNAREC_WAIT, dynarec_wait, 1, 1) \ + INTEGER(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 1, 0, 2, 1) \ + INTEGER(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 0, 0, 2, 1) \ + STRING(BOX64_EMULATED_LIBS, emulated_libs, 0) \ + STRING(BOX64_ENV, env, 0) \ + STRING(BOX64_ENV1, env1, 0) \ + STRING(BOX64_ENV2, env2, 0) \ + STRING(BOX64_ENV3, env3, 0) \ + STRING(BOX64_ENV4, env4, 0) \ + STRING(BOX64_ENV5, env5, 0) \ + BOOLEAN(BOX64_EXIT, exit, 0, 0) \ + BOOLEAN(BOX64_FIX_64BIT_INODES, fix_64bit_inodes, 0, 0) \ + BOOLEAN(BOX64_IGNOREINT3, ignoreint3, 0, 0) \ + STRING(BOX64_INSERT_ARGS, insert_args, 0) \ + BOOLEAN(BOX64_INPROCESSGPU, inprocessgpu, 0, 0) \ + INTEGER(BOX64_JITGDB, jitgdb, 0, 0, 3, 0) \ + BOOLEAN(BOX64_JVM, jvm, 1, 0) \ + STRING(BOX64_LD_LIBRARY_PATH, ld_library_path, 0) \ + BOOLEAN(BOX64_LIBCEF, libcef, 1, 0) \ + STRING(BOX64_LIBGL, libgl, 0) \ + ADDRESS(BOX64_LOAD_ADDR, load_addr, 0) \ + INTEGER(BOX64_LOG, log, DEFAULT_LOG_LEVEL, 0, 3, 1) \ + INTEGER(BOX64_MALLOC_HACK, malloc_hack, 0, 0, 2, 0) \ + INTEGER(BOX64_MAXCPU, new_maxcpu, 0, 0, 100, 1) \ + BOOLEAN(BOX64_MMAP32, mmap32, 1, 0) \ + BOOLEAN(BOX64_NOBANNER, nobanner, BOX64_NOBANNER_DEFAULT, 1) \ + STRING(BOX64_NODYNAREC, nodynarec, 1) \ + BOOLEAN(BOX64_NOGTK, nogtk, 0, 0) \ + BOOLEAN(BOX64_NOPULSE, nopulse, 0, 0) \ + BOOLEAN(BOX64_NORCFILES, noenvfiles, 0, 0) \ + BOOLEAN(BOX64_NOSANDBOX, nosandbox, 0, 0) \ + BOOLEAN(BOX64_NOSIGSEGV, nosigsegv, 0, 0) \ + BOOLEAN(BOX64_NOSIGILL, nosigill, 0, 0) \ + BOOLEAN(BOX64_NOVULKAN, novulkan, 0, 0) \ + STRING(BOX64_PATH, path, 0) \ + BOOLEAN(BOX64_PREFER_EMULATED, prefer_emulated, 0, 0) \ + BOOLEAN(BOX64_PREFER_WRAPPED, prefer_wrapped, 0, 0) \ + STRING(BOX64_RCFILE, envfile, 0) \ + BOOLEAN(BOX64_RDTSC_1GHZ, rdtsc_1ghz, 0, 0) \ + BOOLEAN(BOX64_RESERVE_HIGH, reserve_high, 0, 0) \ + INTEGER(BOX64_ROLLING_LOG, cycle_log, 0, 0, 2048, 0) \ + BOOLEAN(BOX64_SDL2_JGUID, sdl2_jguid, 0, 0) \ + BOOLEAN(BOX64_SHAEXT, shaext, 1, 0) \ + BOOLEAN(BOX64_SHOWBT, showbt, 0, 0) \ + BOOLEAN(BOX64_SHOWSEGV, showsegv, 0, 0) \ + BOOLEAN(BOX64_SSE_FLUSHTO0, sse_flushto0, 0, 1) \ + BOOLEAN(BOX64_SSE42, sse42, 1, 1) \ + BOOLEAN(BOX64_SYNC_ROUNDING, sync_rounding, 0, 0) \ + BOOLEAN(BOX64_TRACE_COLOR, trace_regsdiff, 0, 0) \ + BOOLEAN(BOX64_TRACE_EMM, trace_emm, 0, 0) \ + STRING(BOX64_TRACE_FILE, trace_file, 0) \ + STRING(BOX64_TRACE_INIT, trace_init, 0) \ + INTEGER64(BOX64_TRACE_START, start_cnt, 0, 0) \ + BOOLEAN(BOX64_TRACE_XMM, trace_xmm, 0, 0) \ + STRING(BOX64_TRACE, trace, 0) \ + BOOLEAN(BOX64_UNITYPLAYER, unityplayer, 1, 0) \ + BOOLEAN(BOX64_WRAP_EGL, wrap_egl, 0, 0) \ + BOOLEAN(BOX64_X11GLX, x11glx, 1, 0) \ + BOOLEAN(BOX64_X11SYNC, x11sync, 0, 0) \ + BOOLEAN(BOX64_X11THREADS, x11threads, 0, 0) \ + BOOLEAN(BOX64_X87_NO80BITS, x87_no80bits, 0, 1) #ifdef ARM64 #define ENVSUPER2() \ - INTEGER(BOX64_AVX, avx, 2, 0, 2) + INTEGER(BOX64_AVX, avx, 2, 0, 2, 1) #else #define ENVSUPER2() \ - INTEGER(BOX64_AVX, avx, 0, 0, 2) + INTEGER(BOX64_AVX, avx, 0, 0, 2, 1) #endif #ifdef DYNAREC #define ENVSUPER3() \ - BOOLEAN(BOX64_DYNAREC, dynarec, 1) + BOOLEAN(BOX64_DYNAREC, dynarec, 1, 1) #else #define ENVSUPER3() \ - BOOLEAN(BOX64_DYNAREC, dynarec, 0) + BOOLEAN(BOX64_DYNAREC, dynarec, 0, 1) #endif #define ENVSUPER() \ @@ -149,11 +149,11 @@ extern char* ftrace_name; ENVSUPER3() typedef struct box64env_s { -#define INTEGER(NAME, name, default, min, max) int name; -#define INTEGER64(NAME, name, default) int64_t name; -#define BOOLEAN(NAME, name, default) int name; -#define ADDRESS(NAME, name) uintptr_t name; -#define STRING(NAME, name) char* name; +#define INTEGER(NAME, name, default, min, max, wine) int name; +#define INTEGER64(NAME, name, default, wine) int64_t name; +#define BOOLEAN(NAME, name, default, wine) int name; +#define ADDRESS(NAME, name, wine) uintptr_t name; +#define STRING(NAME, name, wine) char* name; ENVSUPER() #undef INTEGER #undef INTEGER64 @@ -161,11 +161,11 @@ typedef struct box64env_s { #undef ADDRESS #undef STRING -#define INTEGER(NAME, name, default, min, max) uint64_t is_##name##_overridden : 1; -#define INTEGER64(NAME, name, default) uint64_t is_##name##_overridden : 1; -#define BOOLEAN(NAME, name, default) uint64_t is_##name##_overridden : 1; -#define ADDRESS(NAME, name) uint64_t is_##name##_overridden : 1; -#define STRING(NAME, name) uint64_t is_##name##_overridden : 1; +#define INTEGER(NAME, name, default, min, max, wine) uint64_t is_##name##_overridden : 1; +#define INTEGER64(NAME, name, default, wine) uint64_t is_##name##_overridden : 1; +#define BOOLEAN(NAME, name, default, wine) uint64_t is_##name##_overridden : 1; +#define ADDRESS(NAME, name, wine) uint64_t is_##name##_overridden : 1; +#define STRING(NAME, name, wine) uint64_t is_##name##_overridden : 1; ENVSUPER() #undef INTEGER #undef INTEGER64 diff --git a/src/tools/env.c b/src/tools/env.c index 4b512693..5e0a1de4 100644 --- a/src/tools/env.c +++ b/src/tools/env.c @@ -232,11 +232,11 @@ static void trimStringInplace(char* s) static void freeEnv(box64env_t* env) { -#define INTEGER(NAME, name, default, min, max) -#define INTEGER64(NAME, name, default) -#define BOOLEAN(NAME, name, default) -#define ADDRESS(NAME, name) -#define STRING(NAME, name) box_free(env->name); +#define INTEGER(NAME, name, default, min, max, wine) +#define INTEGER64(NAME, name, default, wine) +#define BOOLEAN(NAME, name, default, wine) +#define ADDRESS(NAME, name, wine) +#define STRING(NAME, name, wine) box_free(env->name); ENVSUPER() #undef INTEGER #undef INTEGER64 @@ -324,17 +324,17 @@ static void initializeEnvFile(const char* filename) *strchr(key, '=') = '\0'; trimStringInplace(key); trimStringInplace(val); -#define INTEGER(NAME, name, default, min, max) \ - else if (!strcmp(key, #NAME)) \ - { \ - int v = strtol(val, &p, 0); \ - if (p != val && v >= min && v <= max) { \ - current_env.is_##name##_overridden = 1; \ - current_env.is_any_overridden = 1; \ - current_env.name = v; \ - } \ - } -#define INTEGER64(NAME, name, default) \ +#define INTEGER(NAME, name, default, min, max, wine) \ + else if (!strcmp(key, #NAME)) \ + { \ + int v = strtol(val, &p, 0); \ + if (p != val && v >= min && v <= max) { \ + current_env.is_##name##_overridden = 1; \ + current_env.is_any_overridden = 1; \ + current_env.name = v; \ + } \ + } +#define INTEGER64(NAME, name, default, wine) \ else if (!strcmp(key, #NAME)) \ { \ int64_t v = strtoll(val, &p, 0); \ @@ -344,7 +344,7 @@ static void initializeEnvFile(const char* filename) current_env.name = v; \ } \ } -#define BOOLEAN(NAME, name, default) \ +#define BOOLEAN(NAME, name, default, wine) \ else if (!strcmp(key, #NAME)) \ { \ if (strcmp(val, "0")) { \ @@ -357,7 +357,7 @@ static void initializeEnvFile(const char* filename) current_env.name = 0; \ } \ } -#define ADDRESS(NAME, name) \ +#define ADDRESS(NAME, name, wine) \ else if (!strcmp(key, #NAME)) \ { \ uintptr_t v = (uintptr_t)strtoll(val, &p, 0); \ @@ -367,7 +367,7 @@ static void initializeEnvFile(const char* filename) current_env.name = v; \ } \ } -#define STRING(NAME, name) \ +#define STRING(NAME, name, wine) \ else if (!strcmp(key, #NAME)) \ { \ current_env.is_##name##_overridden = 1; \ @@ -436,31 +436,31 @@ const char* GetLastApplyEntryName() } static void internalApplyEnvFileEntry(const char* entryname, const box64env_t* env) { -#define INTEGER(NAME, name, default, min, max) \ - if (env->is_##name##_overridden) { \ - box64env.name = env->name; \ - box64env.is_##name##_overridden = 1; \ - box64env.is_any_overridden = 1; \ +#define INTEGER(NAME, name, default, min, max, wine) \ + if (env->is_##name##_overridden) { \ + box64env.name = env->name; \ + box64env.is_##name##_overridden = 1; \ + box64env.is_any_overridden = 1; \ } -#define INTEGER64(NAME, name, default) \ +#define INTEGER64(NAME, name, default, wine) \ if (env->is_##name##_overridden) { \ box64env.name = env->name; \ box64env.is_##name##_overridden = 1; \ box64env.is_any_overridden = 1; \ } -#define BOOLEAN(NAME, name, default) \ +#define BOOLEAN(NAME, name, default, wine) \ if (env->is_##name##_overridden) { \ box64env.name = env->name; \ box64env.is_##name##_overridden = 1; \ box64env.is_any_overridden = 1; \ } -#define ADDRESS(NAME, name) \ +#define ADDRESS(NAME, name, wine) \ if (env->is_##name##_overridden) { \ box64env.name = env->name; \ box64env.is_##name##_overridden = 1; \ box64env.is_any_overridden = 1; \ } -#define STRING(NAME, name) \ +#define STRING(NAME, name, wine) \ if (env->is_##name##_overridden) { \ box64env.name = env->name; \ box64env.is_##name##_overridden = 1; \ @@ -504,22 +504,42 @@ void ApplyEnvFileEntry(const char* entryname) void LoadEnvVariables() { -#define INTEGER(NAME, name, default, min, max) box64env.name = default; -#define INTEGER64(NAME, name, default) box64env.name = default; -#define BOOLEAN(NAME, name, default) box64env.name = default; -#define ADDRESS(NAME, name) box64env.name = 0; -#define STRING(NAME, name) box64env.name = NULL; +#ifdef _WIN32 +#define INTEGER(NAME, name, default, min, max, wine) box64env.name = wine ? default : 0; +#define INTEGER64(NAME, name, default, wine) box64env.name = wine ? default : 0; +#define BOOLEAN(NAME, name, default, wine) box64env.name = wine ? default : 0; +#define ADDRESS(NAME, name, wine) box64env.name = 0; +#define STRING(NAME, name, wine) box64env.name = NULL; ENVSUPER() #undef INTEGER #undef INTEGER64 #undef BOOLEAN #undef ADDRESS #undef STRING - +#else +#define INTEGER(NAME, name, default, min, max, wine) box64env.name = default; +#define INTEGER64(NAME, name, default, wine) box64env.name = default; +#define BOOLEAN(NAME, name, default, wine) box64env.name = default; +#define ADDRESS(NAME, name, wine) box64env.name = 0; +#define STRING(NAME, name, wine) box64env.name = NULL; + ENVSUPER() +#undef INTEGER +#undef INTEGER64 +#undef BOOLEAN +#undef ADDRESS +#undef STRING +#endif char* p; // load env vars from GetEnv() -#define INTEGER(NAME, name, default, min, max) \ - p = GetEnv(#NAME); \ + +#ifdef _WIN32 +#define GETENV(name, wine) (wine ? GetEnv(name) : NULL); +#else +#define GETENV(name, wine) GetEnv(name) +#endif + +#define INTEGER(NAME, name, default, min, max, wine) \ + p = GETENV(#NAME, wine); \ if (p) { \ box64env.name = atoi(p); \ if (box64env.name < min || box64env.name > max) { \ @@ -529,30 +549,30 @@ void LoadEnvVariables() box64env.is_any_overridden = 1; \ } \ } -#define INTEGER64(NAME, name, default) \ - p = GetEnv(#NAME); \ +#define INTEGER64(NAME, name, default, wine) \ + p = GETENV(#NAME, wine); \ if (p) { \ box64env.name = atoll(p); \ box64env.is_##name##_overridden = 1; \ box64env.is_any_overridden = 1; \ } -#define BOOLEAN(NAME, name, default) \ - p = GetEnv(#NAME); \ +#define BOOLEAN(NAME, name, default, wine) \ + p = GETENV(#NAME, wine); \ if (p) { \ box64env.name = p[0] != '0'; \ box64env.is_##name##_overridden = 1; \ box64env.is_any_overridden = 1; \ } -#define ADDRESS(NAME, name) \ - p = GetEnv(#NAME); \ +#define ADDRESS(NAME, name, wine) \ + p = GETENV(#NAME, wine); \ if (p) { \ char* endptr; \ box64env.name = (uintptr_t)strtoll(p, &endptr, 0); \ box64env.is_##name##_overridden = 1; \ box64env.is_any_overridden = 1; \ } -#define STRING(NAME, name) \ - p = GetEnv(#NAME); \ +#define STRING(NAME, name, wine) \ + p = GETENV(#NAME, wine); \ if (p) { \ box64env.name = strdup(p); \ box64env.is_##name##_overridden = 1; \ @@ -570,19 +590,19 @@ void LoadEnvVariables() void PrintEnvVariables(box64env_t* env, int level) { if (env->is_any_overridden) printf_log(level, "BOX64ENV: Variables overridden:\n"); -#define INTEGER(NAME, name, default, min, max) \ - if (env->is_##name##_overridden) \ +#define INTEGER(NAME, name, default, min, max, wine) \ + if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%d\n", #NAME, env->name); -#define INTEGER64(NAME, name, default) \ - if (env->is_##name##_overridden) \ +#define INTEGER64(NAME, name, default, wine) \ + if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%lld\n", #NAME, env->name); -#define BOOLEAN(NAME, name, default) \ - if (env->is_##name##_overridden) \ +#define BOOLEAN(NAME, name, default, wine) \ + if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%d\n", #NAME, env->name); -#define ADDRESS(NAME, name) \ +#define ADDRESS(NAME, name, wine) \ if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%p\n", #NAME, (void*)env->name); -#define STRING(NAME, name) \ +#define STRING(NAME, name, wine) \ if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%s\n", #NAME, env->name); ENVSUPER() |