aboutsummaryrefslogtreecommitdiff
path: root/src/os.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os.c')
-rw-r--r--src/os.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/os.c b/src/os.c
index 97036746a..a1acd7671 100644
--- a/src/os.c
+++ b/src/os.c
@@ -69,3 +69,42 @@ int sqlite3OsLockState(OsFile *id){
int sqlite3OsCheckReservedLock(OsFile *id){
return id->pMethod->xCheckReservedLock(id);
}
+
+static void**getOsRoutinePtr(int eRoutine){
+ switch( eRoutine ){
+ case SQLITE_OS_ROUTINE_OPENREADWRITE:
+ return (void **)(&sqlite3Os.xOpenReadWrite);
+ case SQLITE_OS_ROUTINE_OPENREADONLY:
+ return (void **)(&sqlite3Os.xOpenReadOnly);
+ case SQLITE_OS_ROUTINE_OPENEXCLUSIVE:
+ return (void **)(&sqlite3Os.xOpenExclusive);
+ case SQLITE_OS_ROUTINE_DELETE:
+ return (void **)(&sqlite3Os.xDelete);
+ case SQLITE_OS_ROUTINE_FILEEXISTS:
+ return (void **)(&sqlite3Os.xFileExists);
+ case SQLITE_OS_ROUTINE_SYNCDIRECTORY:
+ return (void **)(&sqlite3Os.xSyncDirectory);
+ default:
+ assert(!"Illegal eRoutine value");
+ }
+ return 0;
+}
+
+void *sqlite3_os_routine_get(int eRoutine){
+ return *getOsRoutinePtr(eRoutine);
+}
+
+void *sqlite3_os_routine_set(int eRoutine, void *pRoutine){
+ void **ppRet = getOsRoutinePtr(eRoutine);
+ void *pRet = *ppRet;
+ *ppRet = pRoutine;
+ return pRet;
+}
+
+void sqlite3_os_enter_mutex(){
+ sqlite3Os.xEnterMutex();
+}
+void sqlite3_os_leave_mutex(){
+ sqlite3Os.xLeaveMutex();
+}
+