+int acessnative_spawn(const char *Binary, int SyscallID, const char * const * argv, const char * const * envp)
+{
+ int envc = 0;
+ while( envp && envp[envc++] )
+ envc ++;
+
+ // Set environment variables for libacess-native
+ // > ACESSNATIVE_KEY=`newID`
+ size_t keystr_len = snprintf(NULL, 0, "%s=%i", ENV_VAR_KEY, SyscallID);
+ char keystr[keystr_len+1];
+ snprintf(keystr, keystr_len+1, "%s=%i", ENV_VAR_KEY, SyscallID);
+ bool bKeyHit = false;
+
+ const char *newenv[envc+2+1];
+ int i = 0;
+ for( ; envp && envp[i]; i ++ )
+ {
+ const char *ev = envp[i];
+ if( strncmp(ev, ENV_VAR_KEY"=", sizeof(ENV_VAR_KEY"=")) == 0 ) {
+ ev = keystr;
+ bKeyHit = true;
+ }
+ newenv[i] = ev;
+ }
+ if( !bKeyHit )
+ newenv[i++] = keystr;
+ newenv[i++] = getenv("LD_LIBRARY_PATH") - (sizeof("LD_LIBRARY_PATH=")-1); // VERY hacky
+ newenv[i] = NULL;
+
+ // TODO: Detect native_spawn failing
+ return native_spawn(Binary, argv, newenv);
+}