# include <spawn.h> // posix_spawn
#endif
#include "request.h"
-
-#if SYSCALL_TRACE
-#define DEBUG(str, x...) Debug(str, x)
-#else
-#define DEBUG(...) do{}while(0)
-#endif
+#include <sys/time.h>
#define assert(cnd) do{ \
if( !(cnd) ) { \
// === Types ===
// === IMPORTS ===
+extern int gbSyscallDebugEnabled;
// === GLOBALS ===
FILE *gaSyscall_LocalFPs[MAX_FPS];
tRequestHeader *req;
void *dataPtr;
uint64_t retValue;
- int i;
// DEBUG!
// printf("&tRequestHeader->Params = %i\n", offsetof(tRequestHeader, Params));
exit(127);
}
+ if( !(req->NParams >= 2) ) {
+ fprintf(stderr, "syscalls.c: Too few return params (%i)", req->NParams);
+ exit(127);
+ }
dataPtr = (void*)&req->Params[req->NParams];
- assert(req->NParams >= 2);
// return
assert(req->Params[0].Type == ARG_TYPE_INT64);
assert(req->Params[0].Length == sizeof(uint64_t));
exit(127);
}
retCount = 0;
- for( i = 2; i < req->NParams; i ++ )
+ for( unsigned int i = 2; i < req->NParams; i ++ )
{
#if 0
int j;
free( req );
free( retPtrs );
- DEBUG(": %i 0x%llx", SyscallID, retValue);
+ if( gbSyscallDebugEnabled ) {
+ SYSTRACE(": %i 0x%llx", SyscallID, retValue);
+ }
return retValue;
}
+int native_int_getfd(void)
+{
+ for(int ret = 0; ret < MAX_FPS; ret ++ )
+ if( gaSyscall_LocalFPs[ret] == NULL )
+ return ret;
+ return -1;
+}
int native_open(const char *Path, int Flags)
{
- int ret;
- for(ret = 0; ret < MAX_FPS && gaSyscall_LocalFPs[ret]; ret ++ ) ;
- if(ret == MAX_FPS) return -1;
+ int ret = native_int_getfd();
+ if(ret == -1) return -1;
// TODO: Handle directories
- gaSyscall_LocalFPs[ret] = fopen(&Path[4], "r+");
+ gaSyscall_LocalFPs[ret] = fopen(Path, "r+");
if(!gaSyscall_LocalFPs[ret]) return -1;
return ret;
}
+int native_shm(const char *Tag, int Flags)
+{
+ // int ret = native_int_getfd();
+ //if(ret == -1) return -1;
+ //if( strcmp(Tag, "anon") == 0 )
+ // path = "/AcessNative/anon/RAND";
+ // FD = shm_open(path, O_RDWD);
+ //shm_unlink(path);
+ //else
+ // path = "/Acessnative/named/<TAG>";
+ // int FD = shm_open(path, O_RDWD);
+ //shm_unlink(path);
+ //gaSyscall_LocalFPs[ret] =
+ return -1;
+}
+
void native_close(int FD)
{
fclose( gaSyscall_LocalFPs[FD] );
int native_spawn(const char *filename, const char *const argv[], const char *const envp[])
{
int rv;
-
+
+ fprintf(stderr, "native_spawn('%s')\n", filename);
+
#if __WIN32__
rv = _spawnve(_P_NOWAIT, filename, argv, envp);
#else
rv = posix_spawn(NULL, filename, NULL, NULL, (void*)argv, (void*)envp);
#endif
+ if( rv == 0 ) {
+ perror("native_spawn");
+ }
+
return rv;
}
+
+int64_t native_timestamp(void)
+{
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return tv.tv_sec*1000 + tv.tv_usec / 1000;
+}