Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Begin moving WAL-specific I/O into the VFS. This checkin contains VFS infrastructure but it is untested and is not yet hooked up to the WAL. The version number is bumped to 3.7.0 because of the VFS extension. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | wal |
Files: | files | file ages | folders |
SHA1: |
f5e615c28c7035a7e6d896790b51cf9b |
User & Date: | drh 2010-04-26 00:04:55.000 |
Context
2010-04-26
| ||
00:19 | Change the names of the log.c and log.h source files to wal.c and wal.h. (check-in: 56fe5d7624 user: drh tags: wal) | |
00:04 | Begin moving WAL-specific I/O into the VFS. This checkin contains VFS infrastructure but it is untested and is not yet hooked up to the WAL. The version number is bumped to 3.7.0 because of the VFS extension. (check-in: f5e615c28c user: drh tags: wal) | |
2010-04-24
| ||
19:07 | Add comment explaining checksum mechanism. (check-in: 3e9ef5153e user: dan tags: wal) | |
Changes
Changes to VERSION.
|
| | | 1 | 3.7.0 |
Changes to src/os_os2.c.
︙ | ︙ | |||
1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 | os2DlError, /* xDlError */ os2DlSym, /* xDlSym */ os2DlClose, /* xDlClose */ os2Randomness, /* xRandomness */ os2Sleep, /* xSleep */ os2CurrentTime, /* xCurrentTime */ os2GetLastError /* xGetLastError */ }; sqlite3_vfs_register(&os2Vfs, 1); initUconvObjects(); return SQLITE_OK; } int sqlite3_os_end(void){ freeUconvObjects(); | > > > > > > > > > | 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 | os2DlError, /* xDlError */ os2DlSym, /* xDlSym */ os2DlClose, /* xDlClose */ os2Randomness, /* xRandomness */ os2Sleep, /* xSleep */ os2CurrentTime, /* xCurrentTime */ os2GetLastError /* xGetLastError */ 0, /* xShmOpen */ 0, /* xShmSize */ 0, /* xShmPush */ 0, /* xShmPull */ 0, /* xShmLock */ 0, /* xShmClose */ 0, /* xShmDelete */ 0, /* xRename */ 0, /* xCurrentTimeInt64 */ }; sqlite3_vfs_register(&os2Vfs, 1); initUconvObjects(); return SQLITE_OK; } int sqlite3_os_end(void){ freeUconvObjects(); |
︙ | ︙ |
Changes to src/os_unix.c.
︙ | ︙ | |||
115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <time.h> #include <sys/time.h> #include <errno.h> #if SQLITE_ENABLE_LOCKING_STYLE # include <sys/ioctl.h> # if OS_VXWORKS # include <semaphore.h> # include <limits.h> # else | > | 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <time.h> #include <sys/time.h> #include <errno.h> #include <sys/mman.h> #if SQLITE_ENABLE_LOCKING_STYLE # include <sys/ioctl.h> # if OS_VXWORKS # include <semaphore.h> # include <limits.h> # else |
︙ | ︙ | |||
4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 | */ static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){ UNUSED_PARAMETER(NotUsed); UNUSED_PARAMETER(NotUsed2); UNUSED_PARAMETER(NotUsed3); return 0; } /* ************************ End of sqlite3_vfs methods *************************** ******************************************************************************/ /****************************************************************************** ************************** Begin Proxy Locking ******************************** | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 | */ static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){ UNUSED_PARAMETER(NotUsed); UNUSED_PARAMETER(NotUsed2); UNUSED_PARAMETER(NotUsed3); return 0; } /* ** Structure used internally by this VFS to record the state of an ** open shared memory segment. */ struct unixShm { sqlite3_vfs *pVfs; /* VFS that opened this shared-memory segment */ int size; /* Size of the shared memory area */ char *pBuf; /* Pointer to the beginning */ unixFile fd; /* The open file descriptor */ }; /* ** Close a shared-memory segment */ static int unixShmClose(sqlite3_shm *pSharedMem){ struct unixShm *p = (struct unixShm*)pSharedMem; if( p && p->pVfs ){ if( p->pBuf ){ munmap(p->pBuf, p->size); } if( p->fd.pMethod ){ p->fd.pMethod->xClose((sqlite3_file*)&p->fd); } memset(p, 0, sizeof(*p)); sqlite3_free(p); } return SQLITE_OK; } /* ** Size increment by which shared memory grows */ #define SQLITE_UNIX_SHM_INCR 4096 /* ** Open a shared-memory area. This implementation uses mmapped files. */ static int unixShmOpen( sqlite3_vfs *pVfs, /* The VFS */ const char *zName, /* Name of file to mmap */ sqlite3_shm **pShm /* Write the unixShm object created here */ ){ struct unixShm *p = 0; int rc; int outFlags; struct stat sStat; p = sqlite3_malloc( sizeof(*p) ); *pShm = (sqlite3_shm*)p; if( p==0 ) return SQLITE_NOMEM; memset(p, 0, sizeof(*p)); p->pVfs = pVfs; rc = pVfs->xOpen(pVfs, zName, (sqlite3_file*)&p->fd, SQLITE_OPEN_READWRITE | SQLITE_OPEN_MAIN_JOURNAL, &outFlags); if( rc!=SQLITE_OK ) goto shm_open_err; rc = fstat(p->fd.h, &sStat); if( rc!=0 ) goto shm_open_err; if( sStat.st_size<SQLITE_UNIX_SHM_INCR ){ rc = ftruncate(p->fd.h, SQLITE_UNIX_SHM_INCR); if( rc!=0 ) goto shm_open_err; p->size = SQLITE_UNIX_SHM_INCR; }else{ p->size = sStat.st_size; } /* Map the file. */ p->pBuf = mmap(0, p->size, PROT_READ|PROT_WRITE, MAP_SHARED, p->fd.h, 0); if( p->pBuf==MAP_FAILED ){ rc = SQLITE_IOERR; goto shm_open_err; } return SQLITE_OK; shm_open_err: unixShmClose((sqlite3_shm*)p); *pShm = 0; return rc; } /* ** Query and/or changes the size of a shared-memory segment. ** The reqSize parameter is the new size of the segment, or -1 to ** do just a query. The size of the segment after resizing is ** written into pNewSize. The start of the shared memory buffer ** is stored in **ppBuffer. */ static int unixShmSize( sqlite3_shm *pSharedMem, /* Pointer returned by unixShmOpen() */ int reqSize, /* Requested size. -1 for query only */ int *pNewSize, /* Write new size here */ char **ppBuf /* Write new buffer origin here */ ){ struct unixShm *p = (struct unixShm*)pSharedMem; int rc = SQLITE_OK; if( reqSize>=0 ){ reqSize = (reqSize + SQLITE_UNIX_SHM_INCR - 1)/SQLITE_UNIX_SHM_INCR; reqSize *= SQLITE_UNIX_SHM_INCR; if( reqSize!=p->size ){ munmap(p->pBuf, p->size); rc = ftruncate(p->fd.h, reqSize); if( rc ){ p->pBuf = 0; p->size = 0; }else{ p->pBuf = mmap(0, reqSize, PROT_READ|PROT_WRITE, MAP_SHARED, p->fd.h,0); p->size = p->pBuf ? reqSize : 0; } } } *pNewSize = p->size; *ppBuf = p->pBuf; return rc; } /* ** Create or release a lock on shared memory. */ static int unixShmLock( sqlite3_shm *pSharedMem, /* Pointer from unixShmOpen() */ int lockType, /* _RDLK, _WRLK, or _UNLK, possibly ORed _BLOCK */ int ofst, /* Start of lock region */ int nByte /* Size of lock region in bytes */ ){ struct unixShm *p = (struct unixShm*)pSharedMem; struct flock f; int op; int rc; f.l_whence = SEEK_SET; f.l_start = ofst; f.l_len = nByte; switch( lockType & 0x07 ){ case SQLITE_SHM_RDLK: f.l_type = F_RDLCK; break; case SQLITE_SHM_WRLK: f.l_type = F_WRLCK; break; case SQLITE_SHM_UNLK: f.l_type = F_UNLCK; break; } op = (lockType & 0x08)!=0 ? F_SETLKW : F_SETLK; rc = fcntl(p->fd.h, op, &f); return (rc==0) ? SQLITE_OK : SQLITE_BUSY; } /* ** Delete a shared-memory segment from the system. */ static int unixShmDelete(sqlite3_vfs *pVfs, const char *zName){ return pVfs->xDelete(pVfs, zName, 0); } /* ************************ End of sqlite3_vfs methods *************************** ******************************************************************************/ /****************************************************************************** ************************** Begin Proxy Locking ******************************** |
︙ | ︙ | |||
5757 5758 5759 5760 5761 5762 5763 | ** Most finders simply return a pointer to a fixed sqlite3_io_methods ** object. But the "autolockIoFinder" available on MacOSX does a little ** more than that; it looks at the filesystem type that hosts the ** database file and tries to choose an locking method appropriate for ** that filesystem time. */ #define UNIXVFS(VFSNAME, FINDER) { \ | | | > > > > > > > > > | 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 | ** Most finders simply return a pointer to a fixed sqlite3_io_methods ** object. But the "autolockIoFinder" available on MacOSX does a little ** more than that; it looks at the filesystem type that hosts the ** database file and tries to choose an locking method appropriate for ** that filesystem time. */ #define UNIXVFS(VFSNAME, FINDER) { \ 2, /* iVersion */ \ sizeof(unixFile), /* szOsFile */ \ MAX_PATHNAME, /* mxPathname */ \ 0, /* pNext */ \ VFSNAME, /* zName */ \ (void*)&FINDER, /* pAppData */ \ unixOpen, /* xOpen */ \ unixDelete, /* xDelete */ \ unixAccess, /* xAccess */ \ unixFullPathname, /* xFullPathname */ \ unixDlOpen, /* xDlOpen */ \ unixDlError, /* xDlError */ \ unixDlSym, /* xDlSym */ \ unixDlClose, /* xDlClose */ \ unixRandomness, /* xRandomness */ \ unixSleep, /* xSleep */ \ unixCurrentTime, /* xCurrentTime */ \ unixGetLastError, /* xGetLastError */ \ unixShmOpen, /* xShmOpen */ \ unixShmSize, /* xShmSize */ \ 0, /* xShmPush */ \ 0, /* xShmPull */ \ unixShmLock, /* xShmLock */ \ unixShmClose, /* xShmClose */ \ unixShmDelete, /* xShmDelete */ \ 0, /* xRename */ \ 0, /* xCurrentTimeInt64 */ \ } /* ** All default VFSes for unix are contained in the following array. ** ** Note that the sqlite3_vfs.pNext field of the VFS object is modified ** by the SQLite core when the VFS is registered. So the following |
︙ | ︙ |
Changes to src/os_win.c.
︙ | ︙ | |||
1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 | winDlError, /* xDlError */ winDlSym, /* xDlSym */ winDlClose, /* xDlClose */ winRandomness, /* xRandomness */ winSleep, /* xSleep */ winCurrentTime, /* xCurrentTime */ winGetLastError /* xGetLastError */ }; sqlite3_vfs_register(&winVfs, 1); return SQLITE_OK; } int sqlite3_os_end(void){ return SQLITE_OK; | > > > > > > > > > | 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 | winDlError, /* xDlError */ winDlSym, /* xDlSym */ winDlClose, /* xDlClose */ winRandomness, /* xRandomness */ winSleep, /* xSleep */ winCurrentTime, /* xCurrentTime */ winGetLastError /* xGetLastError */ 0, /* xShmOpen */ 0, /* xShmSize */ 0, /* xShmPush */ 0, /* xShmPull */ 0, /* xShmLock */ 0, /* xShmClose */ 0, /* xShmDelete */ 0, /* xRename */ 0, /* xCurrentTimeInt64 */ }; sqlite3_vfs_register(&winVfs, 1); return SQLITE_OK; } int sqlite3_os_end(void){ return SQLITE_OK; |
︙ | ︙ |
Changes to src/sqlite.h.in.
︙ | ︙ | |||
814 815 816 817 818 819 820 821 | ** the actual number of bytes of randomness obtained. ** The xSleep() method causes the calling thread to sleep for at ** least the number of microseconds given. The xCurrentTime() ** method returns a Julian Day Number for the current date and time. ** */ typedef struct sqlite3_vfs sqlite3_vfs; struct sqlite3_vfs { | > | > > > > > > > > > > > > > > > | | > > > > > > > > > > > > > > > > > | 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 | ** the actual number of bytes of randomness obtained. ** The xSleep() method causes the calling thread to sleep for at ** least the number of microseconds given. The xCurrentTime() ** method returns a Julian Day Number for the current date and time. ** */ typedef struct sqlite3_vfs sqlite3_vfs; typedef struct sqlite3_shm sqlite3_shm; struct sqlite3_vfs { int iVersion; /* Structure version number (currently 2) */ int szOsFile; /* Size of subclassed sqlite3_file */ int mxPathname; /* Maximum file pathname length */ sqlite3_vfs *pNext; /* Next registered VFS */ const char *zName; /* Name of this virtual file system */ void *pAppData; /* Pointer to application-specific data */ int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*, int flags, int *pOutFlags); int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir); int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut); int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut); void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename); void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg); void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void); void (*xDlClose)(sqlite3_vfs*, void*); int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut); int (*xSleep)(sqlite3_vfs*, int microseconds); int (*xCurrentTime)(sqlite3_vfs*, double*); int (*xGetLastError)(sqlite3_vfs*, int, char *); /* ** The methods above are in version 1 of the sqlite_vfs object ** definition. Those that follow are added in version 2 or later */ int (*xShmOpen)(sqlite3_vfs*, const char *zName, sqlite3_shm**); int (*xShmSize)(sqlite3_shm*, int reqSize, int *pNewSize, char **); int (*xShmPush)(sqlite3_shm*); int (*xShmPull)(sqlite3_shm*); int (*xShmLock)(sqlite3_shm*, int lockType, int ofst, int nByte); int (*xShmClose)(sqlite3_shm*); int (*xShmDelete)(sqlite3_vfs*, const char *zName); int (*xRename)(sqlite3_vfs*, const char *zOld, const char *zNew, int dirSync); int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*); /* ** The methods above are in versions 1 and 2 of the sqlite_vfs object. ** New fields may be appended in figure versions. The iVersion ** value will increment whenever this happens. */ }; /* ** CAPI3REF: Flags for the xAccess VFS method ** ** These integer constants can be used as the third parameter to ** the xAccess method of an [sqlite3_vfs] object. They determine ** what kind of permissions the xAccess method is looking for. ** With SQLITE_ACCESS_EXISTS, the xAccess method ** simply checks whether the file exists. ** With SQLITE_ACCESS_READWRITE, the xAccess method ** checks whether the file is both readable and writable. ** With SQLITE_ACCESS_READ, the xAccess method ** checks whether the file is readable. */ #define SQLITE_ACCESS_EXISTS 0 #define SQLITE_ACCESS_READWRITE 1 #define SQLITE_ACCESS_READ 2 /* ** CAPI3REF: Flags for the xShmLock VFS method ** ** These integer constants can be used as the second parameter to ** the xShmLock method of an [sqlite3_vfs] object. They determine ** the specific locking action. Exactly one of the first three ** values must be used ini the lockType parameter. The fourth ** value (SQLITE_SHM_BLOCK) can optionally be ORed into the lockType ** parameter to cause the thread to block until the lock becomes ** available. */ #define SQLITE_SHM_RDLK 0x01 #define SQLITE_SHM_WRLK 0x02 #define SQLITE_SHM_UNLK 0x04 #define SQLITE_SHM_BLOCK 0x08 /* ** CAPI3REF: Initialize The SQLite Library ** ** ^The sqlite3_initialize() routine initializes the ** SQLite library. ^The sqlite3_shutdown() routine ** deallocates any resources that were allocated by sqlite3_initialize(). ** These routines are designed to aid in process initialization and |
︙ | ︙ |
Changes to src/test6.c.
︙ | ︙ | |||
777 778 779 780 781 782 783 | cfFullPathname, /* xFullPathname */ cfDlOpen, /* xDlOpen */ cfDlError, /* xDlError */ cfDlSym, /* xDlSym */ cfDlClose, /* xDlClose */ cfRandomness, /* xRandomness */ cfSleep, /* xSleep */ | | > > > > > > > > > | 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 | cfFullPathname, /* xFullPathname */ cfDlOpen, /* xDlOpen */ cfDlError, /* xDlError */ cfDlSym, /* xDlSym */ cfDlClose, /* xDlClose */ cfRandomness, /* xRandomness */ cfSleep, /* xSleep */ cfCurrentTime, /* xCurrentTime */ 0, /* xShmOpen */ 0, /* xShmSize */ 0, /* xShmPush */ 0, /* xShmPull */ 0, /* xShmLock */ 0, /* xShmClose */ 0, /* xShmDelete */ 0, /* xRename */ 0 /* xCurrentTimeInt64 */ }; if( objc!=2 ){ Tcl_WrongNumArgs(interp, 1, objv, "ENABLE"); return TCL_ERROR; } |
︙ | ︙ |
Changes to src/test_demovfs.c.
︙ | ︙ | |||
619 620 621 622 623 624 625 | demoFullPathname, /* xFullPathname */ demoDlOpen, /* xDlOpen */ demoDlError, /* xDlError */ demoDlSym, /* xDlSym */ demoDlClose, /* xDlClose */ demoRandomness, /* xRandomness */ demoSleep, /* xSleep */ | | > > > > > > > > > | 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 | demoFullPathname, /* xFullPathname */ demoDlOpen, /* xDlOpen */ demoDlError, /* xDlError */ demoDlSym, /* xDlSym */ demoDlClose, /* xDlClose */ demoRandomness, /* xRandomness */ demoSleep, /* xSleep */ demoCurrentTime, /* xCurrentTime */ 0, /* xShmOpen */ 0, /* xShmSize */ 0, /* xShmPush */ 0, /* xShmPull */ 0, /* xShmLock */ 0, /* xShmClose */ 0, /* xShmDelete */ 0, /* xRename */ 0 /* xCurrentTimeInt64 */ }; return &demovfs; } #endif /* !defined(SQLITE_TEST) || defined(SQLITE_OS_UNIX) */ |
︙ | ︙ |
Changes to src/test_devsym.c.
︙ | ︙ | |||
88 89 90 91 92 93 94 | 0, /* xDlOpen */ 0, /* xDlError */ 0, /* xDlSym */ 0, /* xDlClose */ #endif /* SQLITE_OMIT_LOAD_EXTENSION */ devsymRandomness, /* xRandomness */ devsymSleep, /* xSleep */ | | > > > > > > > > > | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | 0, /* xDlOpen */ 0, /* xDlError */ 0, /* xDlSym */ 0, /* xDlClose */ #endif /* SQLITE_OMIT_LOAD_EXTENSION */ devsymRandomness, /* xRandomness */ devsymSleep, /* xSleep */ devsymCurrentTime, /* xCurrentTime */ 0, /* xShmOpen */ 0, /* xShmSize */ 0, /* xShmPush */ 0, /* xShmPull */ 0, /* xShmLock */ 0, /* xShmClose */ 0, /* xShmDelete */ 0, /* xRename */ 0 /* xCurrentTimeInt64 */ }; static sqlite3_io_methods devsym_io_methods = { 1, /* iVersion */ devsymClose, /* xClose */ devsymRead, /* xRead */ devsymWrite, /* xWrite */ |
︙ | ︙ |
Changes to src/test_journal.c.
︙ | ︙ | |||
175 176 177 178 179 180 181 | jtFullPathname, /* xFullPathname */ jtDlOpen, /* xDlOpen */ jtDlError, /* xDlError */ jtDlSym, /* xDlSym */ jtDlClose, /* xDlClose */ jtRandomness, /* xRandomness */ jtSleep, /* xSleep */ | | > > > > > > > > > | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | jtFullPathname, /* xFullPathname */ jtDlOpen, /* xDlOpen */ jtDlError, /* xDlError */ jtDlSym, /* xDlSym */ jtDlClose, /* xDlClose */ jtRandomness, /* xRandomness */ jtSleep, /* xSleep */ jtCurrentTime, /* xCurrentTime */ 0, /* xShmOpen */ 0, /* xShmSize */ 0, /* xShmPush */ 0, /* xShmPull */ 0, /* xShmLock */ 0, /* xShmClose */ 0, /* xShmDelete */ 0, /* xRename */ 0 /* xCurrentTimeInt64 */ }; static sqlite3_io_methods jt_io_methods = { 1, /* iVersion */ jtClose, /* xClose */ jtRead, /* xRead */ jtWrite, /* xWrite */ |
︙ | ︙ |
Changes to src/test_onefile.c.
︙ | ︙ | |||
194 195 196 197 198 199 200 | fsFullPathname, /* xFullPathname */ fsDlOpen, /* xDlOpen */ fsDlError, /* xDlError */ fsDlSym, /* xDlSym */ fsDlClose, /* xDlClose */ fsRandomness, /* xRandomness */ fsSleep, /* xSleep */ | | > > > > > > > > > | 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | fsFullPathname, /* xFullPathname */ fsDlOpen, /* xDlOpen */ fsDlError, /* xDlError */ fsDlSym, /* xDlSym */ fsDlClose, /* xDlClose */ fsRandomness, /* xRandomness */ fsSleep, /* xSleep */ fsCurrentTime, /* xCurrentTime */ 0, /* xShmOpen */ 0, /* xShmSize */ 0, /* xShmPush */ 0, /* xShmPull */ 0, /* xShmLock */ 0, /* xShmClose */ 0, /* xShmDelete */ 0, /* xRename */ 0 /* xCurrentTimeInt64 */ }, 0, /* pFileList */ 0 /* pParent */ }; static sqlite3_io_methods fs_io_methods = { 1, /* iVersion */ |
︙ | ︙ |
Changes to src/test_osinst.c.
︙ | ︙ | |||
199 200 201 202 203 204 205 | instFullPathname, /* xFullPathname */ instDlOpen, /* xDlOpen */ instDlError, /* xDlError */ instDlSym, /* xDlSym */ instDlClose, /* xDlClose */ instRandomness, /* xRandomness */ instSleep, /* xSleep */ | | > > > > > > > > > | 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | instFullPathname, /* xFullPathname */ instDlOpen, /* xDlOpen */ instDlError, /* xDlError */ instDlSym, /* xDlSym */ instDlClose, /* xDlClose */ instRandomness, /* xRandomness */ instSleep, /* xSleep */ instCurrentTime, /* xCurrentTime */ 0, /* xShmOpen */ 0, /* xShmSize */ 0, /* xShmPush */ 0, /* xShmPull */ 0, /* xShmLock */ 0, /* xShmClose */ 0, /* xShmDelete */ 0, /* xRename */ 0 /* xCurrentTimeInt64 */ }; static sqlite3_io_methods inst_io_methods = { 1, /* iVersion */ instClose, /* xClose */ instRead, /* xRead */ instWrite, /* xWrite */ |
︙ | ︙ |