Invoke the unix open() system call through a wrapper to avoid problems

resulting from differing declarations to that function in various systems.

FossilOrigin-Name: 4c7ff4dd352276e9c01cc536e188cbcd69396952
This commit is contained in:
drh 2011-04-25 18:01:27 +00:00
parent 713de341a7
commit 9a3baf10ca
3 changed files with 21 additions and 9 deletions

View File

@ -1,5 +1,5 @@
C Disable\sthe\stransfer\soptimization\sif\sthe\sdestination\stable\scontains\nany\sforeign\skey\sconstraint\sand\sforeign\skey\sconstraints\sare\senabled.\nTicket\s[6284df89debdf].
D 2011-04-24T22:56:07.596
C Invoke\sthe\sunix\sopen()\ssystem\scall\sthrough\sa\swrapper\sto\savoid\sproblems\s\nresulting\sfrom\sdiffering\sdeclarations\sto\sthat\sfunction\sin\svarious\ssystems.
D 2011-04-25T18:01:27.439
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 7a4d9524721d40ef9ee26f93f9bd6a51dba106f2
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -162,7 +162,7 @@ F src/os.c 22ac61d06e72a0dac900400147333b07b13d8e1d
F src/os.h 9dbed8c2b9c1f2f2ebabc09e49829d4777c26bf9
F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f
F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440
F src/os_unix.c d7889a0f9389c8c2e1d3b380f5aa1256c22a90e8
F src/os_unix.c 2c67d126874b78eb427371db4793f0e8fbc7448b
F src/os_win.c d149b9a7dfdd38de09afc054f8168cd3cd80630b
F src/pager.c 055239dcdfe12b3f5d97f6f01f85da01e2d6d912
F src/pager.h 3f8c783de1d4706b40b1ac15b64f5f896bcc78d1
@ -930,7 +930,7 @@ F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P 0ab24b133e332ad7f4517b8e113e9c241ee9af9f
R 40e74cf200b39d155b455f390ce862eb
P ddeea5ab5f6c0c4a86cdfbbb9f24d9d54bf8d301
R c3c570e59b4504f5792e40be1884b2ad
U drh
Z 87bc3e585b95e6d3397bca153c02ab82
Z 99b5b07687fe54475ef75b698d77b786

View File

@ -1 +1 @@
ddeea5ab5f6c0c4a86cdfbbb9f24d9d54bf8d301
4c7ff4dd352276e9c01cc536e188cbcd69396952

View File

@ -281,6 +281,18 @@ struct unixFile {
#define threadid 0
#endif
/*
** Different Unix systems declare open() in different ways. Same use
** open(const char*,int,mode_t). Others use open(const char*,int,...).
** The difference is important when using a pointer to the function.
**
** The safest way to deal with the problem is to always use this wrapper
** which always has the same well-defined interface.
*/
static int posixOpen(const char *zFile, int flags, int mode){
return open(zFile, flags, mode);
}
/*
** Many system calls are accessed through pointer-to-functions so that
** they may be overridden at runtime to facilitate fault injection during
@ -292,8 +304,8 @@ static struct unix_syscall {
sqlite3_syscall_ptr pCurrent; /* Current value of the system call */
sqlite3_syscall_ptr pDefault; /* Default value */
} aSyscall[] = {
{ "open", (sqlite3_syscall_ptr)open, 0 },
#define osOpen ((int(*)(const char*,int,...))aSyscall[0].pCurrent)
{ "open", (sqlite3_syscall_ptr)posixOpen, 0 },
#define osOpen ((int(*)(const char*,int,int))aSyscall[0].pCurrent)
{ "close", (sqlite3_syscall_ptr)close, 0 },
#define osClose ((int(*)(int))aSyscall[1].pCurrent)