diff options
Diffstat (limited to 'src/wrapped/wrappedlibsqlite3.c')
| -rw-r--r-- | src/wrapped/wrappedlibsqlite3.c | 70 |
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" |