about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <numbksco@gmail.com>2023-05-15 19:08:19 +0800
committerGitHub <noreply@github.com>2023-05-15 13:08:19 +0200
commit1d58879ae5fd508c140a03be842751419f264068 (patch)
treeb0b66329f4d98c51493c012764d14e8a03cda711 /src
parentf115fe331bb4cc7d3a65906fd8d48ffb6180629c (diff)
downloadbox64-1d58879ae5fd508c140a03be842751419f264068.tar.gz
box64-1d58879ae5fd508c140a03be842751419f264068.zip
[WRAPPER] Added 1 more symbol for libc (for #787) (#788)
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt2
-rw-r--r--src/wrapped/generated/wrappedlibctypes.h2
-rwxr-xr-xsrc/wrapped/wrappedlibc.c22
-rwxr-xr-xsrc/wrapped/wrappedlibc_private.h2
4 files changed, 20 insertions, 8 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 288e55fb..dea4ebe7 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -3750,6 +3750,8 @@ wrappedlibc:
   - tdelete
   - tfind
   - tsearch
+- pFppV:
+  - fopencookie
 - vFiipV:
   - __syslog_chk
 - vFiipA:
diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h
index 8c4ab887..5c123523 100644
--- a/src/wrapped/generated/wrappedlibctypes.h
+++ b/src/wrapped/generated/wrappedlibctypes.h
@@ -53,6 +53,7 @@ typedef intptr_t (*lFppL_t)(void*, void*, uintptr_t);
 typedef uintptr_t (*LFppL_t)(void*, void*, uintptr_t);
 typedef void* (*pFpip_t)(void*, int32_t, void*);
 typedef void* (*pFppp_t)(void*, void*, void*);
+typedef void* (*pFppV_t)(void*, void*, ...);
 typedef void (*vFiipV_t)(int32_t, int32_t, void*, ...);
 typedef void (*vFiipA_t)(int32_t, int32_t, void*, va_list);
 typedef void (*vFpLLp_t)(void*, uintptr_t, uintptr_t, void*);
@@ -214,6 +215,7 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void*
 	GO(tdelete, pFppp_t) \
 	GO(tfind, pFppp_t) \
 	GO(tsearch, pFppp_t) \
+	GO(fopencookie, pFppV_t) \
 	GO(__syslog_chk, vFiipV_t) \
 	GO(__vsyslog_chk, vFiipA_t) \
 	GO(qsort, vFpLLp_t) \
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index 29d00435..593eada1 100755
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -2702,7 +2702,13 @@ EXPORT int my_getopt_long_only(int argc, char* const argv[], const char* optstri
     return ret;
 }
 
-#if 0
+typedef struct {
+   void  *read;
+   void *write;
+   void  *seek;
+   void *close;
+} my_cookie_io_functions_t;
+
 typedef struct my_cookie_s {
     uintptr_t r, w, s, c;
     void* cookie;
@@ -2732,18 +2738,20 @@ static int my_cookie_close(void *p)
     box_free(cookie);
     return ret;
 }
-EXPORT void* my_fopencookie(x64emu_t* emu, void* cookie, void* mode, void* read, void* write, void* seek, void* close)
+EXPORT void* my_fopencookie(x64emu_t* emu, void* cookie, void* mode, my_cookie_io_functions_t *s)
 {
-    cookie_io_functions_t io_funcs = {read?my_cookie_read:NULL, write?my_cookie_write:NULL, seek?my_cookie_seek:NULL, my_cookie_close};
+    cookie_io_functions_t io_funcs = {s->read?my_cookie_read:NULL, s->write?my_cookie_write:NULL, s->seek?my_cookie_seek:NULL, my_cookie_close};
     my_cookie_t *cb = (my_cookie_t*)box_calloc(1, sizeof(my_cookie_t));
-    cb->r = (uintptr_t)read;
-    cb->w = (uintptr_t)write;
-    cb->s = (uintptr_t)seek;
-    cb->c = (uintptr_t)close;
+    cb->r = (uintptr_t)s->read;
+    cb->w = (uintptr_t)s->write;
+    cb->s = (uintptr_t)s->seek;
+    cb->c = (uintptr_t)s->close;
     cb->cookie = cookie;
     return fopencookie(cb, mode, io_funcs);
 }
 
+#if 0
+
 EXPORT long my_prlimit64(void* pid, uint32_t res, void* new_rlim, void* old_rlim)
 {
     return syscall(__NR_prlimit64, pid, res, new_rlim, old_rlim);
diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h
index b36c07bb..45ccdadd 100755
--- a/src/wrapped/wrappedlibc_private.h
+++ b/src/wrapped/wrappedlibc_private.h
@@ -384,7 +384,7 @@ GO(fmtmsg, iFlpippp)
 GO(fnmatch, iFppi)
 GOM(fopen, pFEpp)
 GOWM(fopen64, pFEpp)
-//GO(fopencookie, pFpp?)
+GOM(fopencookie, pFEppV)
 //GO(__fork, 
 GOWM(fork, iFEv)
 //GO(__fortify_fail,