about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-15 15:39:50 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-15 15:39:50 +0100
commit0f7bec0d38597914e86fc3afc2fc431c661f4d1c (patch)
tree29ad647c0ae57f8354d24b09a3e54b9e5cec7ebd /src/libtools
parent201b971ad7182e97d8d484d864f258d077d68aae (diff)
downloadbox64-0f7bec0d38597914e86fc3afc2fc431c661f4d1c.tar.gz
box64-0f7bec0d38597914e86fc3afc2fc431c661f4d1c.zip
[BOX32][WRAPPER] Moved all function wrapped from wrappedresolv.c to libc_net32.c (still should help #2156)
Diffstat (limited to 'src/libtools')
-rw-r--r--src/libtools/libc_net32.c99
1 files changed, 98 insertions, 1 deletions
diff --git a/src/libtools/libc_net32.c b/src/libtools/libc_net32.c
index afc83f89..0dd1ca37 100644
--- a/src/libtools/libc_net32.c
+++ b/src/libtools/libc_net32.c
@@ -526,4 +526,101 @@ EXPORT void* my32___res_state(x64emu_t* emu)
         emu->res_state_32 = NULL;
     }
     __res_iclose(s, f);
-}*/
\ No newline at end of file
+}*/
+
+EXPORT int my32_res_query(x64emu_t* emu, void* dname, int class, int type, void* answer, int anslen)
+{
+    convert_res_state_to_64(emu->res_state_64, emu->res_state_32);
+    int ret = res_query(dname, class, type, answer, anslen);
+    emu->libc_herr = h_errno;
+    return ret;
+}
+
+EXPORT int my32_res_search(x64emu_t* emu, void* dname, int class, int type, void* answer, int anslen)
+{
+    convert_res_state_to_64(emu->res_state_64, emu->res_state_32);
+    int ret = res_search(dname, class, type, answer, anslen);
+    emu->libc_herr = h_errno;
+    return ret;
+}
+
+void convert_ns_msg_to_32(void* d, void* s)
+{
+    if(!d || !s) return;
+    ns_msg* src = s;
+    my_ns_msg_32_t* dst = d;
+    dst->_msg = to_ptrv((void*)src->_msg);
+    dst->_eom = to_ptrv((void*)src->_eom);
+    dst->_id = src->_id;
+    dst->_flags = src->_flags;
+    for(int i=0; i<4; ++i)
+        dst->_counts[i] = src->_counts[i];
+    for(int i=0; i<4; ++i)
+        dst->_sections[i] = to_ptrv((void*)src->_sections[i]);
+    dst->_sect = src->_sect;
+    dst->_rrnum = src->_rrnum;
+    dst->_msg_ptr = to_ptrv((void*)src->_msg_ptr);
+}
+void convert_ns_msg_to_64(void* d, void* s)
+{
+    if(!d || !s) return;
+    my_ns_msg_32_t* src = s;
+    ns_msg* dst = d;
+    dst->_msg_ptr = from_ptrv(src->_msg_ptr);
+    dst->_rrnum = src->_rrnum;
+    dst->_sect = src->_sect;
+    for(int i=3; i>=0; --i)
+        dst->_sections[i] = from_ptrv(src->_sections[i]);
+    for(int i=3; i>=0; --i)
+        dst->_counts[i] = src->_counts[i];
+    dst->_flags = src->_flags;
+    dst->_id = src->_id;
+    dst->_eom = from_ptrv(src->_eom);
+    dst->_msg = from_ptrv(src->_msg);
+}
+
+
+EXPORT int my32_ns_initparse(x64emu_t* emu, void* msg, int len, my_ns_msg_32_t* handle)
+{
+    ns_msg handle_l = {0};
+    int ret = ns_initparse(msg, len, &handle_l);
+    convert_ns_msg_to_32(handle, &handle_l);
+    return ret;
+}
+
+void convert_ns_rr_to_32(void* d, void* s)
+{
+    if(!d || !s) return;
+    ns_rr* src = s;
+    my_ns_rr_32_t* dst = d;
+    memcpy(dst->name, src->name, sizeof(dst->name));
+    dst->type = src->type;
+    dst->rr_class = src->rr_class;
+    dst->ttl = src->ttl;
+    dst->rdlength = src->rdlength;
+    dst->rdata = to_ptrv((void*)src->rdata);
+}
+void convert_ns_rr_to_64(void* d, void* s)
+{
+    if(!d || !s) return;
+    my_ns_rr_32_t* src = s;
+    ns_rr* dst = d;
+    dst->rdata = from_ptrv(src->rdata);
+    dst->rdlength = src->rdlength;
+    dst->ttl = src->ttl;
+    dst->rr_class = src->rr_class;
+    dst->type = src->type;
+    memcpy(dst->name, src->name, sizeof(dst->name));
+}
+
+EXPORT int my32_ns_parserr(x64emu_t* emu, my_ns_msg_32_t* handle, uint32_t section, int rrnum, my_ns_rr_32_t* rr)
+{
+    ns_msg handle_l = {0};
+    ns_rr rr_l = {0};
+    convert_ns_msg_to_64(&handle_l, handle);
+    convert_ns_rr_to_64(&rr_l, rr);
+    int ret = ns_parserr(&handle_l, section, rrnum, &rr_l);
+    convert_ns_rr_to_32(rr, &rr_l);
+    convert_ns_msg_to_32(handle, &handle_l);
+    return ret;
+}