about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedlibsqlite3.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-11-28 10:10:17 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-11-28 10:10:17 +0100
commit0da561cd2034a2df700a050a288f92dfa2c79e40 (patch)
tree31fcfbbd69ab4711fe5d57fe75055fb504eae28c /src/wrapped/wrappedlibsqlite3.c
parentfd613de55e3476d40d91ba887c553d77fa3ca5e9 (diff)
downloadbox64-0da561cd2034a2df700a050a288f92dfa2c79e40.tar.gz
box64-0da561cd2034a2df700a050a288f92dfa2c79e40.zip
[WRAPPER] Reworked sqlite3 with new wrapperhelper
Diffstat (limited to 'src/wrapped/wrappedlibsqlite3.c')
-rw-r--r--src/wrapped/wrappedlibsqlite3.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/wrapped/wrappedlibsqlite3.c b/src/wrapped/wrappedlibsqlite3.c
index e1720667..2ca6f08c 100644
--- a/src/wrapped/wrappedlibsqlite3.c
+++ b/src/wrapped/wrappedlibsqlite3.c
@@ -27,6 +27,32 @@ const char* libsqlite3Name = "libsqlite3.so.0";
 
 #include "wrappercallback.h"
 
+typedef struct my_sqlite3_io_methods_s {
+  int iVersion;
+  int (*xClose)(void*);
+  int (*xRead)(void*, void*, int iAmt, int64_t iOfst);
+  int (*xWrite)(void*, const void*, int iAmt, int64_t iOfst);
+  int (*xTruncate)(void*, int64_t size);
+  int (*xSync)(void*, int flags);
+  int (*xFileSize)(void*, int64_t *pSize);
+  int (*xLock)(void*, int);
+  int (*xUnlock)(void*, int);
+  int (*xCheckReservedLock)(void*, int *pResOut);
+  int (*xFileControl)(void*, int op, void *pArg);
+  int (*xSectorSize)(void*);
+  int (*xDeviceCharacteristics)(void*);
+  int (*xShmMap)(void*, int iPg, int pgsz, int, void volatile**);
+  int (*xShmLock)(void*, int offset, int n, int flags);
+  void (*xShmBarrier)(void*);
+  int (*xShmUnmap)(void*, int deleteFlag);
+  int (*xFetch)(void*, int64_t iOfst, int iAmt, void **pp);
+  int (*xUnfetch)(void*, int64_t iOfst, void *p);
+} my_sqlite3_io_methods_t;
+
+typedef struct my_sqlite3_file_s {
+  const my_sqlite3_io_methods_t *pMethods;
+} my_sqlite3_file_t;
+
 #define SUPER() \
 GO(0)   \
 GO(1)   \
@@ -61,4 +87,48 @@ EXPORT int my_sqlite3_exec(x64emu_t* emu, void *db, char *sql, void* callback, v
     return my->sqlite3_exec(db, sql, find_sqlite3_exec_fct(callback), data, errmsg);
 }
 
+EXPORT void* my_sqlite3_vmprintf(x64emu_t *emu, void* fmt, x64_va_list_t b) {
+    (void)emu;
+    #ifdef CONVERT_VALIST
+    CONVERT_VALIST(b);
+    #else
+    myStackAlignValist(emu, (const char*)fmt, emu->scratch, b);
+    PREPARE_VALIST;
+    #endif
+    return my->sqlite3_vmprintf(fmt, VARARGS);
+}
+EXPORT void* my_sqlite3_mprintf(x64emu_t *emu, void* fmt, void* b) {
+    myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 1);
+    PREPARE_VALIST;
+    return my->sqlite3_vmprintf(fmt, VARARGS);
+}
+
+EXPORT void* my_sqlite3_database_file_object(x64emu_t* emu, void* a)
+{
+    my_sqlite3_file_t* ret = my->sqlite3_database_file_object(a);
+    // add autobridge on all the functions
+    #define GO(A, W)    if(ret->pMethods->A) AddAutomaticBridge(my_lib->w.bridge, W, ret->pMethods->A, 0, #A)
+    GO(xClose, iFp);
+    GO(xRead, iFppiI);
+    GO(xWrite, iFppiI);
+    GO(xTruncate, iFpI);
+    GO(xSync, iFpi);
+    GO(xFileSize, iFpp);
+    GO(xLock, iFpi);
+    GO(xUnlock, iFpi);
+    GO(xCheckReservedLock, iFpp);
+    GO(xFileControl, iFpip);
+    GO(xSectorSize, iFp);
+    GO(xDeviceCharacteristics, iFp);
+    GO(xShmMap, iFpiiip);
+    GO(xShmLock, iFpiii);
+    GO(xShmBarrier, iFp);
+    GO(xShmUnmap, iFpi);
+    GO(xFetch, iFpIip);
+    GO(xUnfetch, iFpIp);
+    #undef GO
+    return ret;
+}
+
+
 #include "wrappedlib_init.h"