11 #include "../ld-acess_src/exports.h"
13 extern int gbSyscallDebugEnabled;
18 fprintf(stderr, "TODO: Windows libacessnative setup\n");
25 int __attribute__ ((constructor(102))) libacessnative_init(int argc, char *argv[], char **envp);
27 const char *getenv_p(char **envp, const char *name)
29 size_t namelen = strlen(name);
32 if( strncmp(*envp, name, namelen) != 0 )
34 if( (*envp)[namelen] != '=' )
36 return (*envp)+namelen+1;
41 int libacessnative_init(int argc, char *argv[], char **envp)
45 //gbSyscallDebugEnabled = 1;
47 const char *preopens = getenv_p(envp, ENV_VAR_PREOPENS);
48 printf("preopens = %s\n", preopens);
54 const char *splitter = strchr(preopens, ':');
57 len = strlen(preopens);
60 len = splitter - preopens;
63 memcpy(path, preopens, len);
65 int fd = acess__SysOpen(path, 6); // WRITE,READ,no EXEC
67 fprintf(stderr, "Unable to preopen '%s' errno=%i\n", path, acess__errno);
72 fprintf(stderr, "Pre-opening '%s' resulted in an incorrect FD (expected %i, got %i)",
80 preopens = splitter + 1;
84 // if( !getenv(ENV_VAR_KEY)
90 int acessnative_spawn(const char *Binary, int SyscallID, const char * const * argv, const char * const * envp)
93 while( envp && envp[envc++] )
96 // Set environment variables for libacess-native
97 // > ACESSNATIVE_KEY=`newID`
98 size_t keystr_len = snprintf(NULL, 0, "%s=%i", ENV_VAR_KEY, SyscallID);
99 char keystr[keystr_len+1];
100 snprintf(keystr, keystr_len+1, "%s=%i", ENV_VAR_KEY, SyscallID);
101 bool bKeyHit = false;
103 const char *newenv[envc+2+1];
105 for( ; envp && envp[i]; i ++ )
107 const char *ev = envp[i];
108 if( strncmp(ev, ENV_VAR_KEY"=", sizeof(ENV_VAR_KEY"=")) == 0 ) {
115 newenv[i++] = keystr;
116 newenv[i++] = getenv("LD_LIBRARY_PATH") - (sizeof("LD_LIBRARY_PATH=")-1); // VERY hacky
119 // TODO: Detect native_spawn failing
120 return native_spawn(Binary, argv, newenv);
123 void Debug(const char *format, ...)
127 va_start(args, format);
128 vfprintf(stdout, format, args);
133 void Warning(const char *format, ...)
137 va_start(args, format);
138 vfprintf(stdout, format, args);