about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-21 14:55:42 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-21 14:55:42 +0200
commite34afea34613a0e8d4e96069027324944b1d1116 (patch)
tree9a103af397b660b9c81db5e4d2745385abe8fbc8 /src
parent1ea71c89a817e6165e9fe2f4a2a743338b68c366 (diff)
downloadbox64-e34afea34613a0e8d4e96069027324944b1d1116.tar.gz
box64-e34afea34613a0e8d4e96069027324944b1d1116.zip
[BOX32] Added some more 32bits wrapped functions
Diffstat (limited to 'src')
-rwxr-xr-xsrc/include/myalign32.h11
-rw-r--r--src/wrapped32/generated/functions_list.txt3
-rw-r--r--src/wrapped32/generated/wrappedlibctypes32.h1
-rw-r--r--src/wrapped32/generated/wrapper32.c4
-rw-r--r--src/wrapped32/generated/wrapper32.h2
-rwxr-xr-xsrc/wrapped32/wrappedlibc.c27
-rwxr-xr-xsrc/wrapped32/wrappedlibc_private.h10
7 files changed, 41 insertions, 17 deletions
diff --git a/src/include/myalign32.h b/src/include/myalign32.h
index 515b0ff5..dbbb0c9a 100755
--- a/src/include/myalign32.h
+++ b/src/include/myalign32.h
@@ -500,5 +500,14 @@ void UnalignIOV_32(void* dest, void* source); // Native -> x86
 void AlignMsgHdr_32(void* dest, void* dest_iov, void* source);   // x86 -> Native
 //void UnalignMsgHdr_32(void* dest, void* source, void* source_iov); // Native -> x86
 
-
+struct i386_passwd
+{
+  ptr_t pw_name; // char*
+  ptr_t pw_passwd; // char*
+  __uid_t pw_uid;
+  __gid_t pw_gid;
+  ptr_t pw_gecos; // char*
+  ptr_t pw_dir; // char*
+  ptr_t pw_shell; // char*
+};
 #endif//__MY_ALIGN32__H_
\ No newline at end of file
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt
index 7b9ea79d..d615e4b8 100644
--- a/src/wrapped32/generated/functions_list.txt
+++ b/src/wrapped32/generated/functions_list.txt
@@ -98,6 +98,7 @@
 #() vFlp -> vFlp
 #() vFpC -> vFpC
 #() vFpu -> vFpu
+#() vFpL -> vFpL
 #() vFpp -> vFpp
 #() vFSp -> vFSp
 #() wFpi -> wFpi
@@ -172,6 +173,7 @@
 #() pFpu -> pFpu
 #() pFpL -> pFpL
 #() pFpp -> pFpp
+#() SFip -> SFip
 #() SFpp -> SFpp
 #() tFip -> tFip
 #() tFpL -> tFpL
@@ -928,6 +930,7 @@ wrappedlibc:
 - pFL:
 - pFp:
   - gethostbyname
+  - getpwnam
   - gmtime
   - localtime
 - pFS:
diff --git a/src/wrapped32/generated/wrappedlibctypes32.h b/src/wrapped32/generated/wrappedlibctypes32.h
index 62d29a80..84db2acd 100644
--- a/src/wrapped32/generated/wrappedlibctypes32.h
+++ b/src/wrapped32/generated/wrappedlibctypes32.h
@@ -105,6 +105,7 @@ typedef void* (*pFiiiiiiiiilt_t)(int32_t, int32_t, int32_t, int32_t, int32_t, in
 	GO(localeconv, pFv_t) \
 	GO(getpwuid, pFu_t) \
 	GO(gethostbyname, pFp_t) \
+	GO(getpwnam, pFp_t) \
 	GO(gmtime, pFp_t) \
 	GO(localtime, pFp_t) \
 	GO(getmntent, pFS_t) \
diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c
index 42122443..62effb9f 100644
--- a/src/wrapped32/generated/wrapper32.c
+++ b/src/wrapped32/generated/wrapper32.c
@@ -185,6 +185,7 @@ typedef void (*vFlu_t)(intptr_t, uint32_t);
 typedef void (*vFlp_t)(intptr_t, void*);
 typedef void (*vFpC_t)(void*, uint8_t);
 typedef void (*vFpu_t)(void*, uint32_t);
+typedef void (*vFpL_t)(void*, uintptr_t);
 typedef void (*vFpp_t)(void*, void*);
 typedef void (*vFSp_t)(void*, void*);
 typedef int16_t (*wFpi_t)(void*, int32_t);
@@ -259,6 +260,7 @@ typedef void* (*pFpi_t)(void*, int32_t);
 typedef void* (*pFpu_t)(void*, uint32_t);
 typedef void* (*pFpL_t)(void*, uintptr_t);
 typedef void* (*pFpp_t)(void*, void*);
+typedef void* (*SFip_t)(int32_t, void*);
 typedef void* (*SFpp_t)(void*, void*);
 typedef char* (*tFip_t)(int32_t, void*);
 typedef char* (*tFpL_t)(void*, uintptr_t);
@@ -1077,6 +1079,7 @@ void vFlu_32(x64emu_t *emu, uintptr_t fcn) { vFlu_t fn = (vFlu_t)fcn; fn(to_long
 void vFlp_32(x64emu_t *emu, uintptr_t fcn) { vFlp_t fn = (vFlp_t)fcn; fn(to_long(from_ptri(long_t, R_ESP + 4)), from_ptriv(R_ESP + 8)); }
 void vFpC_32(x64emu_t *emu, uintptr_t fcn) { vFpC_t fn = (vFpC_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint8_t, R_ESP + 8)); }
 void vFpu_32(x64emu_t *emu, uintptr_t fcn) { vFpu_t fn = (vFpu_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); }
+void vFpL_32(x64emu_t *emu, uintptr_t fcn) { vFpL_t fn = (vFpL_t)fcn; fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8))); }
 void vFpp_32(x64emu_t *emu, uintptr_t fcn) { vFpp_t fn = (vFpp_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); }
 void vFSp_32(x64emu_t *emu, uintptr_t fcn) { vFSp_t fn = (vFSp_t)fcn; fn(io_convert32(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8)); }
 void wFpi_32(x64emu_t *emu, uintptr_t fcn) { wFpi_t fn = (wFpi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); }
@@ -1151,6 +1154,7 @@ void pFpi_32(x64emu_t *emu, uintptr_t fcn) { pFpi_t fn = (pFpi_t)fcn; R_EAX = to
 void pFpu_32(x64emu_t *emu, uintptr_t fcn) { pFpu_t fn = (pFpu_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8))); }
 void pFpL_32(x64emu_t *emu, uintptr_t fcn) { pFpL_t fn = (pFpL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)))); }
 void pFpp_32(x64emu_t *emu, uintptr_t fcn) { pFpp_t fn = (pFpp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); }
+void SFip_32(x64emu_t *emu, uintptr_t fcn) { SFip_t fn = (SFip_t)fcn; R_EAX = to_ptrv(io_convert_from(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)))); }
 void SFpp_32(x64emu_t *emu, uintptr_t fcn) { SFpp_t fn = (SFpp_t)fcn; R_EAX = to_ptrv(io_convert_from(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)))); }
 void tFip_32(x64emu_t *emu, uintptr_t fcn) { tFip_t fn = (tFip_t)fcn; R_EAX = to_cstring(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8))); }
 void tFpL_32(x64emu_t *emu, uintptr_t fcn) { tFpL_t fn = (tFpL_t)fcn; R_EAX = to_cstring(fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)))); }
diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h
index 0504cbf6..cfc9dfd3 100644
--- a/src/wrapped32/generated/wrapper32.h
+++ b/src/wrapped32/generated/wrapper32.h
@@ -138,6 +138,7 @@ void vFlu_32(x64emu_t *emu, uintptr_t fnc);
 void vFlp_32(x64emu_t *emu, uintptr_t fnc);
 void vFpC_32(x64emu_t *emu, uintptr_t fnc);
 void vFpu_32(x64emu_t *emu, uintptr_t fnc);
+void vFpL_32(x64emu_t *emu, uintptr_t fnc);
 void vFpp_32(x64emu_t *emu, uintptr_t fnc);
 void vFSp_32(x64emu_t *emu, uintptr_t fnc);
 void wFpi_32(x64emu_t *emu, uintptr_t fnc);
@@ -212,6 +213,7 @@ void pFpi_32(x64emu_t *emu, uintptr_t fnc);
 void pFpu_32(x64emu_t *emu, uintptr_t fnc);
 void pFpL_32(x64emu_t *emu, uintptr_t fnc);
 void pFpp_32(x64emu_t *emu, uintptr_t fnc);
+void SFip_32(x64emu_t *emu, uintptr_t fnc);
 void SFpp_32(x64emu_t *emu, uintptr_t fnc);
 void tFip_32(x64emu_t *emu, uintptr_t fnc);
 void tFpL_32(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped32/wrappedlibc.c b/src/wrapped32/wrappedlibc.c
index d1c392e0..e3c74200 100755
--- a/src/wrapped32/wrappedlibc.c
+++ b/src/wrapped32/wrappedlibc.c
@@ -2099,17 +2099,6 @@ EXPORT int32_t my32_getrandom(x64emu_t* emu, void* buf, uint32_t buflen, uint32_
 }
 #endif
 
-struct i386_passwd
-{
-  ptr_t     pw_name;    // char *
-  ptr_t     pw_passwd;  // char *
-  uint32_t  pw_uid;
-  uint32_t  pw_gid;
-  ptr_t     pw_gecos;   // char *
-  ptr_t     pw_dir;     // char *
-  ptr_t     pw_shell;   // char *
-};
-
 EXPORT void* my32_getpwuid(x64emu_t* emu, uint32_t uid)
 {
     static struct i386_passwd ret;
@@ -2579,6 +2568,22 @@ EXPORT void my32___explicit_bzero_chk(x64emu_t* emu, void* dst, uint32_t len, ui
     memset(dst, 0, len);
 }
 
+EXPORT void* my32_getpwnam(x64emu_t* emu, const char* name)
+{
+    static struct i386_passwd ret;
+    struct passwd *r = getpwnam(name);
+    if(!r)
+        return NULL;
+    ret.pw_name = to_ptrv(r->pw_name);
+    ret.pw_passwd = to_ptrv(r->pw_passwd);
+    ret.pw_uid = r->pw_uid;
+    ret.pw_gid = r->pw_gid;
+    ret.pw_gecos = to_ptrv(r->pw_gecos);
+    ret.pw_dir = to_ptrv(r->pw_dir);
+    ret.pw_shell = to_ptrv(r->pw_shell);
+    return &ret;
+}
+
 EXPORT void* my32_realpath(x64emu_t* emu, void* path, void* resolved_path)
 {
 
diff --git a/src/wrapped32/wrappedlibc_private.h b/src/wrapped32/wrappedlibc_private.h
index 30dd250f..1f474f61 100755
--- a/src/wrapped32/wrappedlibc_private.h
+++ b/src/wrapped32/wrappedlibc_private.h
@@ -110,8 +110,8 @@ GOW(bind_textdomain_codeset, pFpp)
 // bsd_signal   // Weak
 //GOM(bsearch, pFEppLLp) //%%
 GOW(btowc, iFi)
-//GOW(bzero, vFpL)
-//GO(__bzero, vFpL)
+GOW(bzero, vFpL)
+GO(__bzero, vFpL)
 GOW(calloc, pFLL)
 // callrpc
 //GOW(canonicalize_file_name, pFp)
@@ -312,7 +312,7 @@ GOM(fcntl64, iFEiiN) //%%
 //GO(fcvt_r, iFdipppL)
 GO(fdatasync, iFi)
 // fdetach
-//GO(fdopen, pFip)
+GO(fdopen, SFip)
 GOW(fdopendir, pFi)
 GOW(feof, iFS)
 //GO(feof_unlocked, iFp)
@@ -555,7 +555,7 @@ GOW(getpt, iFv)
 // getpw    // Weak
 //GO(getpwent, pFv)
 // getpwent_r
-//GO(getpwnam, pFp)
+GOM(getpwnam, pFEp)
 //GO(getpwnam_r, iFpppup)
 GOM(getpwuid, pFEu)
 //GO(getpwuid_r, iFuppup)
@@ -1223,7 +1223,7 @@ GOW(opendir, pFp)
 GOW(pathconf, iFpi)
 GOW(pause, iFv)
 GO(pclose, iFS)
-//GO(perror, vFp)
+GO(perror, vFp)
 // personality  // Weak
 GOW(pipe, iFp)
 // __pipe