diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-08-09 17:41:01 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-08-09 17:41:01 +0200 |
| commit | 53756ee96609860b35359f4e5d3e801ed3212696 (patch) | |
| tree | d7fa12cfa1a4f2695594351de6ca66e125a095de /src | |
| parent | 8a2ee1ed5980c8d208a362c00216d4fc5cdddb44 (diff) | |
| download | box64-53756ee96609860b35359f4e5d3e801ed3212696.tar.gz box64-53756ee96609860b35359f4e5d3e801ed3212696.zip | |
Improved Steam wine compatibility, not perfect, but better (thanks Hugo for the args)
Diffstat (limited to 'src')
| -rw-r--r-- | src/core.c | 28 | ||||
| -rw-r--r-- | src/tools/rcfile.c | 10 |
2 files changed, 36 insertions, 2 deletions
diff --git a/src/core.c b/src/core.c index 507f65bb..1068edbd 100644 --- a/src/core.c +++ b/src/core.c @@ -85,6 +85,7 @@ int box64_dynarec_tbb = 1; int box64_dynarec_wait = 1; int box64_dynarec_missing = 0; int box64_dynarec_aligned_atomics = 0; +char* box64_new_args = NULL; uintptr_t box64_nodynarec_start = 0; uintptr_t box64_nodynarec_end = 0; uintptr_t box64_dynarec_test_start = 0; @@ -2030,7 +2031,32 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf { add_argv("-cef-disable-gpu-compositor"); } - + if(box64_new_args) { + char tmp[256]; + char* p = box64_new_args; + int state = 0; + char* p2 = p; + while(state>=0) { + switch(*p2) { + case 0: // end of flux + if(state && (p2!=p)) add_argv(p); + state = -1; + break; + case '"': // start/end of quotes + if(state<2) {if(!state) p=p2; state=2;} else state=1; + break; + case ' ': + if(state==1) {strncpy(tmp, p, p2-p); tmp[p2-p]='\0'; add_argv(tmp); state=0;} + break; + default: + if(state==0) {state=1; p=p2;} + break; + } + ++p2; + } + box_free(box64_new_args); + box64_new_args = NULL; + } // check if file exist if(!my_context->argv[0] || !FileExist(my_context->argv[0], IS_FILE)) { printf_log(LOG_NONE, "Error: File is not found. (check BOX64_PATH)\n"); diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c index b105fa65..e2e14d3b 100644 --- a/src/tools/rcfile.c +++ b/src/tools/rcfile.c @@ -123,6 +123,7 @@ ENTRYSTRING_(BOX64_ENV1, new_env1) \ ENTRYSTRING_(BOX64_ENV2, new_env2) \ ENTRYSTRING_(BOX64_ENV3, new_env3) \ ENTRYSTRING_(BOX64_ENV4, new_env4) \ +ENTRYSTRING_(BOX64_ARGS, new_args) \ ENTRYBOOL(BOX64_RESERVE_HIGH, new_reserve_high) \ #ifdef HAVE_TRACE @@ -499,6 +500,7 @@ void DeleteParams() extern int ftrace_has_pid; extern FILE* ftrace; extern char* ftrace_name; +extern char* box64_new_args; void openFTrace(const char* newtrace); void addNewEnvVar(const char* s); void AddNewLibs(const char* libs); @@ -521,7 +523,7 @@ void ApplyParams(const char* name) { if(!name || !params) return; - if(!strcmp(name, old_name)) { + if(!strcasecmp(name, old_name)) { return; } strncpy(old_name, name, 255); @@ -647,6 +649,12 @@ void internal_ApplyParams(const char* name, const my_params_t* param) { addNewEnvVar(param->new_env4); printf_log(LOG_INFO, "Applying %s=%s\n", "BOX64_ENV4", param->new_env4); } + if(param->is_new_args_present) { + printf_log(LOG_INFO, "Adding \"%s\" arguments to command line\n", param->new_args); + if(box64_new_args) + box_free(box64_new_args); + box64_new_args = box_strdup(param->new_args); + } if(param->is_bash_present && FileIsX64ELF(param->bash)) { if(my_context->bashpath) free(my_context->bashpath); |