annotate sqlite/os.h @ 1631:20ff61083530 trunk

[svn] - make audtool build - make plugins work
author nenolod
date Wed, 06 Sep 2006 14:46:09 -0700
parents b6b61becdf4e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1434
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
1 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
2 ** 2001 September 16
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
3 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
4 ** The author disclaims copyright to this source code. In place of
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
5 ** a legal notice, here is a blessing:
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
6 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
7 ** May you do good and not evil.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
8 ** May you find forgiveness for yourself and forgive others.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
9 ** May you share freely, never taking more than you give.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
10 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
11 ******************************************************************************
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
12 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
13 ** This header file (together with is companion C source-code file
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
14 ** "os.c") attempt to abstract the underlying operating system so that
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
15 ** the SQLite library will work on both POSIX and windows systems.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
16 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
17 #ifndef _SQLITE_OS_H_
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
18 #define _SQLITE_OS_H_
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
19
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
20 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
21 ** Figure out if we are dealing with Unix, Windows, or some other
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
22 ** operating system.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
23 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
24 #if !defined(OS_UNIX) && !defined(OS_OTHER)
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
25 # define OS_OTHER 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
26 # ifndef OS_WIN
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
27 # if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__)
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
28 # define OS_WIN 1
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
29 # define OS_UNIX 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
30 # define OS_OS2 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
31 # elif defined(_EMX_) || defined(_OS2) || defined(OS2) || defined(OS_OS2)
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
32 # define OS_WIN 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
33 # define OS_UNIX 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
34 # define OS_OS2 1
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
35 # else
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
36 # define OS_WIN 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
37 # define OS_UNIX 1
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
38 # define OS_OS2 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
39 # endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
40 # else
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
41 # define OS_UNIX 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
42 # define OS_OS2 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
43 # endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
44 #else
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
45 # ifndef OS_WIN
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
46 # define OS_WIN 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
47 # endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
48 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
49
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
50
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
51 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
52 ** Define the maximum size of a temporary filename
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
53 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
54 #if OS_WIN
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
55 # include <windows.h>
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
56 # define SQLITE_TEMPNAME_SIZE (MAX_PATH+50)
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
57 #elif OS_OS2
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
58 # define INCL_DOSDATETIME
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
59 # define INCL_DOSFILEMGR
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
60 # define INCL_DOSERRORS
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
61 # define INCL_DOSMISC
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
62 # define INCL_DOSPROCESS
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
63 # include <os2.h>
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
64 # define SQLITE_TEMPNAME_SIZE (CCHMAXPATHCOMP)
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
65 #else
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
66 # define SQLITE_TEMPNAME_SIZE 200
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
67 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
68
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
69 /* If the SET_FULLSYNC macro is not defined above, then make it
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
70 ** a no-op
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
71 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
72 #ifndef SET_FULLSYNC
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
73 # define SET_FULLSYNC(x,y)
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
74 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
75
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
76 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
77 ** Temporary files are named starting with this prefix followed by 16 random
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
78 ** alphanumeric characters, and no file extension. They are stored in the
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
79 ** OS's standard temporary file directory, and are deleted prior to exit.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
80 ** If sqlite is being embedded in another program, you may wish to change the
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
81 ** prefix to reflect your program's name, so that if your program exits
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
82 ** prematurely, old temporary files can be easily identified. This can be done
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
83 ** using -DTEMP_FILE_PREFIX=myprefix_ on the compiler command line.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
84 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
85 #ifndef TEMP_FILE_PREFIX
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
86 # define TEMP_FILE_PREFIX "sqlite_"
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
87 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
88
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
89 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
90 ** Define the interfaces for Unix, Windows, and OS/2.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
91 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
92 #if OS_UNIX
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
93 #define sqlite3OsOpenReadWrite sqlite3UnixOpenReadWrite
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
94 #define sqlite3OsOpenExclusive sqlite3UnixOpenExclusive
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
95 #define sqlite3OsOpenReadOnly sqlite3UnixOpenReadOnly
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
96 #define sqlite3OsDelete sqlite3UnixDelete
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
97 #define sqlite3OsFileExists sqlite3UnixFileExists
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
98 #define sqlite3OsFullPathname sqlite3UnixFullPathname
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
99 #define sqlite3OsIsDirWritable sqlite3UnixIsDirWritable
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
100 #define sqlite3OsSyncDirectory sqlite3UnixSyncDirectory
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
101 #define sqlite3OsTempFileName sqlite3UnixTempFileName
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
102 #define sqlite3OsRandomSeed sqlite3UnixRandomSeed
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
103 #define sqlite3OsSleep sqlite3UnixSleep
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
104 #define sqlite3OsCurrentTime sqlite3UnixCurrentTime
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
105 #define sqlite3OsEnterMutex sqlite3UnixEnterMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
106 #define sqlite3OsLeaveMutex sqlite3UnixLeaveMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
107 #define sqlite3OsInMutex sqlite3UnixInMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
108 #define sqlite3OsThreadSpecificData sqlite3UnixThreadSpecificData
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
109 #define sqlite3OsMalloc sqlite3GenericMalloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
110 #define sqlite3OsRealloc sqlite3GenericRealloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
111 #define sqlite3OsFree sqlite3GenericFree
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
112 #define sqlite3OsAllocationSize sqlite3GenericAllocationSize
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
113 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
114 #if OS_WIN
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
115 #define sqlite3OsOpenReadWrite sqlite3WinOpenReadWrite
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
116 #define sqlite3OsOpenExclusive sqlite3WinOpenExclusive
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
117 #define sqlite3OsOpenReadOnly sqlite3WinOpenReadOnly
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
118 #define sqlite3OsDelete sqlite3WinDelete
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
119 #define sqlite3OsFileExists sqlite3WinFileExists
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
120 #define sqlite3OsFullPathname sqlite3WinFullPathname
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
121 #define sqlite3OsIsDirWritable sqlite3WinIsDirWritable
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
122 #define sqlite3OsSyncDirectory sqlite3WinSyncDirectory
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
123 #define sqlite3OsTempFileName sqlite3WinTempFileName
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
124 #define sqlite3OsRandomSeed sqlite3WinRandomSeed
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
125 #define sqlite3OsSleep sqlite3WinSleep
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
126 #define sqlite3OsCurrentTime sqlite3WinCurrentTime
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
127 #define sqlite3OsEnterMutex sqlite3WinEnterMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
128 #define sqlite3OsLeaveMutex sqlite3WinLeaveMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
129 #define sqlite3OsInMutex sqlite3WinInMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
130 #define sqlite3OsThreadSpecificData sqlite3WinThreadSpecificData
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
131 #define sqlite3OsMalloc sqlite3GenericMalloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
132 #define sqlite3OsRealloc sqlite3GenericRealloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
133 #define sqlite3OsFree sqlite3GenericFree
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
134 #define sqlite3OsAllocationSize sqlite3GenericAllocationSize
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
135 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
136 #if OS_OS2
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
137 #define sqlite3OsOpenReadWrite sqlite3Os2OpenReadWrite
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
138 #define sqlite3OsOpenExclusive sqlite3Os2OpenExclusive
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
139 #define sqlite3OsOpenReadOnly sqlite3Os2OpenReadOnly
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
140 #define sqlite3OsDelete sqlite3Os2Delete
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
141 #define sqlite3OsFileExists sqlite3Os2FileExists
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
142 #define sqlite3OsFullPathname sqlite3Os2FullPathname
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
143 #define sqlite3OsIsDirWritable sqlite3Os2IsDirWritable
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
144 #define sqlite3OsSyncDirectory sqlite3Os2SyncDirectory
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
145 #define sqlite3OsTempFileName sqlite3Os2TempFileName
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
146 #define sqlite3OsRandomSeed sqlite3Os2RandomSeed
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
147 #define sqlite3OsSleep sqlite3Os2Sleep
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
148 #define sqlite3OsCurrentTime sqlite3Os2CurrentTime
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
149 #define sqlite3OsEnterMutex sqlite3Os2EnterMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
150 #define sqlite3OsLeaveMutex sqlite3Os2LeaveMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
151 #define sqlite3OsInMutex sqlite3Os2InMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
152 #define sqlite3OsThreadSpecificData sqlite3Os2ThreadSpecificData
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
153 #define sqlite3OsMalloc sqlite3GenericMalloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
154 #define sqlite3OsRealloc sqlite3GenericRealloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
155 #define sqlite3OsFree sqlite3GenericFree
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
156 #define sqlite3OsAllocationSize sqlite3GenericAllocationSize
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
157 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
158
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
159
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
160 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
161 ** If using an alternative OS interface, then we must have an "os_other.h"
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
162 ** header file available for that interface. Presumably the "os_other.h"
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
163 ** header file contains #defines similar to those above.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
164 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
165 #if OS_OTHER
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
166 # include "os_other.h"
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
167 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
168
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
169
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
170
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
171 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
172 ** Forward declarations
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
173 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
174 typedef struct OsFile OsFile;
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
175 typedef struct IoMethod IoMethod;
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
176
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
177 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
178 ** An instance of the following structure contains pointers to all
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
179 ** methods on an OsFile object.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
180 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
181 struct IoMethod {
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
182 int (*xClose)(OsFile**);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
183 int (*xOpenDirectory)(OsFile*, const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
184 int (*xRead)(OsFile*, void*, int amt);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
185 int (*xWrite)(OsFile*, const void*, int amt);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
186 int (*xSeek)(OsFile*, i64 offset);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
187 int (*xTruncate)(OsFile*, i64 size);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
188 int (*xSync)(OsFile*, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
189 void (*xSetFullSync)(OsFile *id, int setting);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
190 int (*xFileHandle)(OsFile *id);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
191 int (*xFileSize)(OsFile*, i64 *pSize);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
192 int (*xLock)(OsFile*, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
193 int (*xUnlock)(OsFile*, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
194 int (*xLockState)(OsFile *id);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
195 int (*xCheckReservedLock)(OsFile *id);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
196 };
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
197
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
198 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
199 ** The OsFile object describes an open disk file in an OS-dependent way.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
200 ** The version of OsFile defined here is a generic version. Each OS
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
201 ** implementation defines its own subclass of this structure that contains
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
202 ** additional information needed to handle file I/O. But the pMethod
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
203 ** entry (pointing to the virtual function table) always occurs first
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
204 ** so that we can always find the appropriate methods.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
205 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
206 struct OsFile {
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
207 IoMethod const *pMethod;
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
208 };
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
209
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
210 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
211 ** The following values may be passed as the second argument to
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
212 ** sqlite3OsLock(). The various locks exhibit the following semantics:
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
213 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
214 ** SHARED: Any number of processes may hold a SHARED lock simultaneously.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
215 ** RESERVED: A single process may hold a RESERVED lock on a file at
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
216 ** any time. Other processes may hold and obtain new SHARED locks.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
217 ** PENDING: A single process may hold a PENDING lock on a file at
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
218 ** any one time. Existing SHARED locks may persist, but no new
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
219 ** SHARED locks may be obtained by other processes.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
220 ** EXCLUSIVE: An EXCLUSIVE lock precludes all other locks.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
221 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
222 ** PENDING_LOCK may not be passed directly to sqlite3OsLock(). Instead, a
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
223 ** process that requests an EXCLUSIVE lock may actually obtain a PENDING
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
224 ** lock. This can be upgraded to an EXCLUSIVE lock by a subsequent call to
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
225 ** sqlite3OsLock().
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
226 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
227 #define NO_LOCK 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
228 #define SHARED_LOCK 1
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
229 #define RESERVED_LOCK 2
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
230 #define PENDING_LOCK 3
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
231 #define EXCLUSIVE_LOCK 4
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
232
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
233 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
234 ** File Locking Notes: (Mostly about windows but also some info for Unix)
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
235 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
236 ** We cannot use LockFileEx() or UnlockFileEx() on Win95/98/ME because
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
237 ** those functions are not available. So we use only LockFile() and
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
238 ** UnlockFile().
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
239 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
240 ** LockFile() prevents not just writing but also reading by other processes.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
241 ** A SHARED_LOCK is obtained by locking a single randomly-chosen
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
242 ** byte out of a specific range of bytes. The lock byte is obtained at
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
243 ** random so two separate readers can probably access the file at the
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
244 ** same time, unless they are unlucky and choose the same lock byte.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
245 ** An EXCLUSIVE_LOCK is obtained by locking all bytes in the range.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
246 ** There can only be one writer. A RESERVED_LOCK is obtained by locking
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
247 ** a single byte of the file that is designated as the reserved lock byte.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
248 ** A PENDING_LOCK is obtained by locking a designated byte different from
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
249 ** the RESERVED_LOCK byte.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
250 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
251 ** On WinNT/2K/XP systems, LockFileEx() and UnlockFileEx() are available,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
252 ** which means we can use reader/writer locks. When reader/writer locks
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
253 ** are used, the lock is placed on the same range of bytes that is used
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
254 ** for probabilistic locking in Win95/98/ME. Hence, the locking scheme
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
255 ** will support two or more Win95 readers or two or more WinNT readers.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
256 ** But a single Win95 reader will lock out all WinNT readers and a single
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
257 ** WinNT reader will lock out all other Win95 readers.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
258 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
259 ** The following #defines specify the range of bytes used for locking.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
260 ** SHARED_SIZE is the number of bytes available in the pool from which
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
261 ** a random byte is selected for a shared lock. The pool of bytes for
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
262 ** shared locks begins at SHARED_FIRST.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
263 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
264 ** These #defines are available in sqlite_aux.h so that adaptors for
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
265 ** connecting SQLite to other operating systems can use the same byte
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
266 ** ranges for locking. In particular, the same locking strategy and
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
267 ** byte ranges are used for Unix. This leaves open the possiblity of having
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
268 ** clients on win95, winNT, and unix all talking to the same shared file
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
269 ** and all locking correctly. To do so would require that samba (or whatever
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
270 ** tool is being used for file sharing) implements locks correctly between
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
271 ** windows and unix. I'm guessing that isn't likely to happen, but by
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
272 ** using the same locking range we are at least open to the possibility.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
273 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
274 ** Locking in windows is manditory. For this reason, we cannot store
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
275 ** actual data in the bytes used for locking. The pager never allocates
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
276 ** the pages involved in locking therefore. SHARED_SIZE is selected so
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
277 ** that all locks will fit on a single page even at the minimum page size.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
278 ** PENDING_BYTE defines the beginning of the locks. By default PENDING_BYTE
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
279 ** is set high so that we don't have to allocate an unused page except
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
280 ** for very large databases. But one should test the page skipping logic
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
281 ** by setting PENDING_BYTE low and running the entire regression suite.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
282 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
283 ** Changing the value of PENDING_BYTE results in a subtly incompatible
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
284 ** file format. Depending on how it is changed, you might not notice
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
285 ** the incompatibility right away, even running a full regression test.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
286 ** The default location of PENDING_BYTE is the first byte past the
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
287 ** 1GB boundary.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
288 **
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
289 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
290 #ifndef SQLITE_TEST
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
291 #define PENDING_BYTE 0x40000000 /* First byte past the 1GB boundary */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
292 #else
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
293 extern unsigned int sqlite3_pending_byte;
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
294 #define PENDING_BYTE sqlite3_pending_byte
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
295 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
296
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
297 #define RESERVED_BYTE (PENDING_BYTE+1)
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
298 #define SHARED_FIRST (PENDING_BYTE+2)
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
299 #define SHARED_SIZE 510
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
300
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
301 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
302 ** Prototypes for operating system interface routines.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
303 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
304 int sqlite3OsClose(OsFile**);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
305 int sqlite3OsOpenDirectory(OsFile*, const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
306 int sqlite3OsRead(OsFile*, void*, int amt);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
307 int sqlite3OsWrite(OsFile*, const void*, int amt);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
308 int sqlite3OsSeek(OsFile*, i64 offset);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
309 int sqlite3OsTruncate(OsFile*, i64 size);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
310 int sqlite3OsSync(OsFile*, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
311 void sqlite3OsSetFullSync(OsFile *id, int setting);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
312 int sqlite3OsFileHandle(OsFile *id);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
313 int sqlite3OsFileSize(OsFile*, i64 *pSize);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
314 int sqlite3OsLock(OsFile*, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
315 int sqlite3OsUnlock(OsFile*, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
316 int sqlite3OsLockState(OsFile *id);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
317 int sqlite3OsCheckReservedLock(OsFile *id);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
318 int sqlite3OsOpenReadWrite(const char*, OsFile**, int*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
319 int sqlite3OsOpenExclusive(const char*, OsFile**, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
320 int sqlite3OsOpenReadOnly(const char*, OsFile**);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
321 int sqlite3OsDelete(const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
322 int sqlite3OsFileExists(const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
323 char *sqlite3OsFullPathname(const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
324 int sqlite3OsIsDirWritable(char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
325 int sqlite3OsSyncDirectory(const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
326 int sqlite3OsTempFileName(char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
327 int sqlite3OsRandomSeed(char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
328 int sqlite3OsSleep(int ms);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
329 int sqlite3OsCurrentTime(double*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
330 void sqlite3OsEnterMutex(void);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
331 void sqlite3OsLeaveMutex(void);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
332 int sqlite3OsInMutex(int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
333 ThreadData *sqlite3OsThreadSpecificData(int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
334 void *sqlite3OsMalloc(int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
335 void *sqlite3OsRealloc(void *, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
336 void sqlite3OsFree(void *);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
337 int sqlite3OsAllocationSize(void *);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
338
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
339 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
340 ** If the SQLITE_ENABLE_REDEF_IO macro is defined, then the OS-layer
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
341 ** interface routines are not called directly but are invoked using
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
342 ** pointers to functions. This allows the implementation of various
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
343 ** OS-layer interface routines to be modified at run-time. There are
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
344 ** obscure but legitimate reasons for wanting to do this. But for
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
345 ** most users, a direct call to the underlying interface is preferable
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
346 ** so the the redefinable I/O interface is turned off by default.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
347 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
348 #ifdef SQLITE_ENABLE_REDEF_IO
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
349
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
350 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
351 ** When redefinable I/O is enabled, a single global instance of the
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
352 ** following structure holds pointers to the routines that SQLite
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
353 ** uses to talk with the underlying operating system. Modify this
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
354 ** structure (before using any SQLite API!) to accomodate perculiar
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
355 ** operating system interfaces or behaviors.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
356 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
357 struct sqlite3OsVtbl {
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
358 int (*xOpenReadWrite)(const char*, OsFile**, int*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
359 int (*xOpenExclusive)(const char*, OsFile**, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
360 int (*xOpenReadOnly)(const char*, OsFile**);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
361
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
362 int (*xDelete)(const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
363 int (*xFileExists)(const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
364 char *(*xFullPathname)(const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
365 int (*xIsDirWritable)(char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
366 int (*xSyncDirectory)(const char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
367 int (*xTempFileName)(char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
368
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
369 int (*xRandomSeed)(char*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
370 int (*xSleep)(int ms);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
371 int (*xCurrentTime)(double*);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
372
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
373 void (*xEnterMutex)(void);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
374 void (*xLeaveMutex)(void);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
375 int (*xInMutex)(int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
376 ThreadData *(*xThreadSpecificData)(int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
377
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
378 void *(*xMalloc)(int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
379 void *(*xRealloc)(void *, int);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
380 void (*xFree)(void *);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
381 int (*xAllocationSize)(void *);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
382 };
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
383
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
384 /* Macro used to comment out routines that do not exists when there is
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
385 ** no disk I/O
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
386 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
387 #ifdef SQLITE_OMIT_DISKIO
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
388 # define IF_DISKIO(X) 0
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
389 #else
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
390 # define IF_DISKIO(X) X
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
391 #endif
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
392
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
393 #ifdef _SQLITE_OS_C_
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
394 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
395 ** The os.c file implements the global virtual function table.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
396 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
397 struct sqlite3OsVtbl sqlite3Os = {
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
398 IF_DISKIO( sqlite3OsOpenReadWrite ),
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
399 IF_DISKIO( sqlite3OsOpenExclusive ),
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
400 IF_DISKIO( sqlite3OsOpenReadOnly ),
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
401 IF_DISKIO( sqlite3OsDelete ),
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
402 IF_DISKIO( sqlite3OsFileExists ),
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
403 IF_DISKIO( sqlite3OsFullPathname ),
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
404 IF_DISKIO( sqlite3OsIsDirWritable ),
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
405 IF_DISKIO( sqlite3OsSyncDirectory ),
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
406 IF_DISKIO( sqlite3OsTempFileName ),
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
407 sqlite3OsRandomSeed,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
408 sqlite3OsSleep,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
409 sqlite3OsCurrentTime,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
410 sqlite3OsEnterMutex,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
411 sqlite3OsLeaveMutex,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
412 sqlite3OsInMutex,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
413 sqlite3OsThreadSpecificData,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
414 sqlite3OsMalloc,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
415 sqlite3OsRealloc,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
416 sqlite3OsFree,
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
417 sqlite3OsAllocationSize
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
418 };
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
419 #else
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
420 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
421 ** Files other than os.c just reference the global virtual function table.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
422 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
423 extern struct sqlite3OsVtbl sqlite3Os;
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
424 #endif /* _SQLITE_OS_C_ */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
425
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
426
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
427 /* This additional API routine is available with redefinable I/O */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
428 struct sqlite3OsVtbl *sqlite3_os_switch(void);
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
429
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
430
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
431 /*
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
432 ** Redefine the OS interface to go through the virtual function table
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
433 ** rather than calling routines directly.
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
434 */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
435 #undef sqlite3OsOpenReadWrite
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
436 #undef sqlite3OsOpenExclusive
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
437 #undef sqlite3OsOpenReadOnly
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
438 #undef sqlite3OsDelete
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
439 #undef sqlite3OsFileExists
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
440 #undef sqlite3OsFullPathname
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
441 #undef sqlite3OsIsDirWritable
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
442 #undef sqlite3OsSyncDirectory
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
443 #undef sqlite3OsTempFileName
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
444 #undef sqlite3OsRandomSeed
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
445 #undef sqlite3OsSleep
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
446 #undef sqlite3OsCurrentTime
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
447 #undef sqlite3OsEnterMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
448 #undef sqlite3OsLeaveMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
449 #undef sqlite3OsInMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
450 #undef sqlite3OsThreadSpecificData
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
451 #undef sqlite3OsMalloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
452 #undef sqlite3OsRealloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
453 #undef sqlite3OsFree
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
454 #undef sqlite3OsAllocationSize
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
455 #define sqlite3OsOpenReadWrite sqlite3Os.xOpenReadWrite
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
456 #define sqlite3OsOpenExclusive sqlite3Os.xOpenExclusive
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
457 #define sqlite3OsOpenReadOnly sqlite3Os.xOpenReadOnly
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
458 #define sqlite3OsDelete sqlite3Os.xDelete
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
459 #define sqlite3OsFileExists sqlite3Os.xFileExists
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
460 #define sqlite3OsFullPathname sqlite3Os.xFullPathname
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
461 #define sqlite3OsIsDirWritable sqlite3Os.xIsDirWritable
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
462 #define sqlite3OsSyncDirectory sqlite3Os.xSyncDirectory
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
463 #define sqlite3OsTempFileName sqlite3Os.xTempFileName
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
464 #define sqlite3OsRandomSeed sqlite3Os.xRandomSeed
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
465 #define sqlite3OsSleep sqlite3Os.xSleep
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
466 #define sqlite3OsCurrentTime sqlite3Os.xCurrentTime
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
467 #define sqlite3OsEnterMutex sqlite3Os.xEnterMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
468 #define sqlite3OsLeaveMutex sqlite3Os.xLeaveMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
469 #define sqlite3OsInMutex sqlite3Os.xInMutex
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
470 #define sqlite3OsThreadSpecificData sqlite3Os.xThreadSpecificData
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
471 #define sqlite3OsMalloc sqlite3Os.xMalloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
472 #define sqlite3OsRealloc sqlite3Os.xRealloc
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
473 #define sqlite3OsFree sqlite3Os.xFree
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
474 #define sqlite3OsAllocationSize sqlite3Os.xAllocationSize
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
475
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
476 #endif /* SQLITE_ENABLE_REDEF_IO */
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
477
b6b61becdf4e [svn] - add sqlite/ directory
nenolod
parents:
diff changeset
478 #endif /* _SQLITE_OS_H_ */