about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-08-09 17:41:01 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-08-09 17:41:01 +0200
commit53756ee96609860b35359f4e5d3e801ed3212696 (patch)
treed7fa12cfa1a4f2695594351de6ca66e125a095de /src
parent8a2ee1ed5980c8d208a362c00216d4fc5cdddb44 (diff)
downloadbox64-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.c28
-rw-r--r--src/tools/rcfile.c10
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);