-C Patch\saround\scompilers\sthat\sdo\snot\ssupport\s"long\slong\sint".\s(CVS\s1656)
-D 2004-06-22T12:13:55
+C Improve\sthe\sos_test.c\smodule.\s(CVS\s1657)
+D 2004-06-22T12:18:32
F Makefile.in 0a3d7aaefa50717bd550b0cf568a51072c4c103c
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
F doc/report1.txt a031aaf37b185e4fa540223cb516d3bccec7eeac
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
F ltmain.sh f6b283068efa69f06eb8aa1fe4bddfdbdeb35826
-F main.mk 0692293db19dc8206d88abe9c24e11fa22a2ab95
+F main.mk e0dcbccbec3295c7b59d6d5578cf48304b99c887
F mkdll.sh 68d34a961a1fdfa15ef27fc4f4740be583112124
F publish.sh 5bc5e493fa1773a3c0d9712182de0f5abd494903
F spec.template a38492f1c1dd349fc24cb0565e08afc53045304b
F src/auth.c 60db23b98bb94c8b0178180faaf49dc116674217
F src/btree.c 0cf8a52a57a7eb13d50719114ee1fa353e89d7d3
F src/btree.h 32f96abef464cf8765b23ca669acfe90d191fcc5
-F src/build.c ee7548a4dfc446d4312c217d74badbd2898a7eef
+F src/build.c baed8f54ea9fb785cb798dc6600b07697b8595d4
F src/date.c b3e8b2bef1e3f2ce24e5b057203036defb18c3f1
F src/delete.c e81545e546f6bc87d7508a93a09ca70695265af3
F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37
F src/os_common.h ba1b7306e16e2091718f2c48db0fe6c1d7a31bb8
F src/os_mac.c 3d31e26be1411acfb7961033098631b4f3486fdf
F src/os_mac.h 51d2445f47e182ed32d3bd6937f81070c6fd9bd4
-F src/os_test.c 616d6845ef7015c31d283ece85e8a7700f7986c7
-F src/os_test.h 6665b2ace17a76ecee68bc463343340d3cd5c1cc
+F src/os_test.c 0c6490723681649c11852adf701f00e09a981d1e
+F src/os_test.h c47bad966c6f6f9bb4448abfc03c18884bc0ca9f
F src/os_unix.c 39e73ed02fc992a6bfc52200ea26704633412cc0
F src/os_unix.h 00c1f82b526ab2fb7ee5ddd555ea4ed68363c93a
F src/os_win.c 84549f6cc815237533c5d0eb3697352b03478d96
F src/os_win.h babd4e912967c6b09088cfe38a45e8005a07ba44
-F src/pager.c d9d3f577319ebac6670d3f44eca46060b78ee6b2
+F src/pager.c 5fac95a8fef916a4c5915ccc3b8dc72312681880
F src/pager.h bc58d32a9dee464f7268fb68652c130a4216e438
F src/parse.y 097438674976355a10cf177bd97326c548820b86
F src/pragma.c 0750e1c360647dbe0a991f16133b0fe5e42e5039
F src/sqliteInt.h dd796b6abc6d50505fe33c54f0143d7000681a41
F src/table.c af14284fa36c8d41f6829e3f2819dce07d3e2de2
F src/tclsqlite.c 8d093146332b2f0cbf2a8ebe8597d481619308a3
-F src/test1.c ee426e026ad9223483e7a84bb68849fc6e9f542e
+F src/test1.c 9a9d9069c1c390c8be81038f77aed976bb58844c
F src/test2.c dafd8bd314a554bf376c6d3a8c83fd69219f5a40
F src/test3.c 7247090d15a5a43823079b6fd8dad1ed3cccdedf
F src/test4.c a921a69821fd30209589228e64f94e9f715b6fe2
F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
F www/version3.tcl af528563442e3039928f9018327a18157e53a44f
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P d16b863849d1aa887fe403e25153b1e9df6b837e
-R 85dc3ae43867f14feba3557419001a96
-U drh
-Z bbfe7d28a769302b653c6e45868a429e
+P d98b1502e2947d24ab9f4a5d2e5b9a95dde92faf
+R 6110d7f21fe73b602543dea11b1b80ca
+U danielk1977
+Z 5ef671e5847eb9235ebe6c8ce5485e34
return i;
}
+static OsTestFile *pAllFiles = 0;
+
/*
** Initialise the os_test.c specific fields of pFile.
*/
-static void initFile(OsFile *pFile){
+static void initFile(OsFile *id){
+ OsTestFile *pFile = (OsTestFile *)sqliteMalloc(sizeof(OsTestFile));
pFile->nMaxWrite = 0;
pFile->nBlk = 0;
pFile->apBlk = 0;
+ *id = pFile;
+ pFile->pNext = pAllFiles;
+ pAllFiles = pFile;
+}
+
+/*
+** Undo the work done by initFile. Delete the OsTestFile structure
+** and unlink the structure from the pAllFiles list.
+*/
+static void closeFile(OsFile *id){
+ OsTestFile *pFile = *id;
+ if( pFile==pAllFiles ){
+ pAllFiles = pFile->pNext;
+ }else{
+ OsTestFile *p;
+ for(p=pAllFiles; p->pNext!=pFile; p=p->pNext ){
+ assert( p );
+ }
+ p->pNext = pFile->pNext;
+ }
+ sqliteFree(pFile);
+ *id = 0;
}
/*
** Return the current seek offset from the start of the file. This
** is unix-only code.
*/
-static off_t osTell(OsFile *pFile){
+static off_t osTell(OsTestFile *pFile){
return lseek(pFile->fd.h, 0, SEEK_CUR);
}
/*
** Load block 'blk' into the cache of pFile.
*/
-static int cacheBlock(OsFile *pFile, int blk){
+static int cacheBlock(OsTestFile *pFile, int blk){
if( blk>=pFile->nBlk ){
int n = ((pFile->nBlk * 2) + 100 + blk);
pFile->apBlk = (u8 **)sqliteRealloc(pFile->apBlk, n * sizeof(u8*));
** Write the cache of pFile to disk. If crash is non-zero, randomly
** skip blocks when writing. The cache is deleted before returning.
*/
-static int writeCache2(OsFile *pFile, int crash){
+static int writeCache2(OsTestFile *pFile, int crash){
int i;
int nMax = pFile->nMaxWrite;
off_t offset;
/*
** Write the cache to disk.
*/
-static int writeCache(OsFile *pFile){
- if( crashseed() ){
- /* FIX ME: writeCache2() should be called on all open files
- ** here. */
- writeCache2(pFile, 1);
+static int writeCache(OsTestFile *pFile){
+ int cs = crashseed();
+ if( cs==1 ){
+ /* FIX ME: writeCache2() should be called on all open files here. */
+ OsTestFile *pFile;
+ for(pFile=pAllFiles; pFile; pFile=pFile->pNext){
+ writeCache2(pFile, 1);
+ }
exit(-1);
}else{
+ if( cs>0 ) sqlite3SetCrashseed(cs-1);
return writeCache2(pFile, 0);
}
}
** Close the file.
*/
int sqlite3OsClose(OsFile *id){
- if( !id->fd.isOpen ) return SQLITE_OK;
- writeCache(id);
- sqlite3RealClose(&id->fd);
+ if( !(*id) ) return SQLITE_OK;
+ if( (*id)->fd.isOpen ){
+ writeCache(*id);
+ sqlite3RealClose(&(*id)->fd);
+ }
+ closeFile(id);
return SQLITE_OK;
}
int i;
u8 *zCsr;
int rc = SQLITE_OK;
+ OsTestFile *pFile = *id;
- offset = osTell(id);
+ offset = osTell(pFile);
end = offset+amt;
blk = (offset/BLOCKSIZE);
len = len - (BLOCK_OFFSET(i+1)-end);
}
- if( i<id->nBlk && id->apBlk[i]){
- u8 *pBlk = id->apBlk[i];
+ if( i<pFile->nBlk && pFile->apBlk[i]){
+ u8 *pBlk = pFile->apBlk[i];
memcpy(zCsr, &pBlk[off], len);
}else{
- rc = sqlite3RealSeek(&id->fd, BLOCK_OFFSET(i) + off);
+ rc = sqlite3RealSeek(&pFile->fd, BLOCK_OFFSET(i) + off);
if( rc!=SQLITE_OK ) return rc;
- rc = sqlite3RealRead(&id->fd, zCsr, len);
+ rc = sqlite3RealRead(&pFile->fd, zCsr, len);
if( rc!=SQLITE_OK ) return rc;
}
}
assert( zCsr==&((u8 *)pBuf)[amt] );
- rc = sqlite3RealSeek(&id->fd, end);
+ rc = sqlite3RealSeek(&pFile->fd, end);
return rc;
}
int i;
const u8 *zCsr;
int rc = SQLITE_OK;
+ OsTestFile *pFile = *id;
- offset = osTell(id);
+ offset = osTell(pFile);
end = offset+amt;
blk = (offset/BLOCKSIZE);
int len = 0;
/* Make sure the block is in the cache */
- rc = cacheBlock(id, i);
+ rc = cacheBlock(pFile, i);
if( rc!=SQLITE_OK ) return rc;
/* Write into the cache */
- pBlk = id->apBlk[i];
+ pBlk = pFile->apBlk[i];
assert( pBlk );
if( BLOCK_OFFSET(i) < offset ){
memcpy(&pBlk[off], zCsr, len);
zCsr += len;
}
- if( id->nMaxWrite<end ){
- id->nMaxWrite = end;
+ if( pFile->nMaxWrite<end ){
+ pFile->nMaxWrite = end;
}
assert( zCsr==&((u8 *)pBuf)[amt] );
- rc = sqlite3RealSeek(&id->fd, end);
+ rc = sqlite3RealSeek(&pFile->fd, end);
return rc;
}
** real sync() function.
*/
int sqlite3OsSync(OsFile *id){
- int rc = writeCache(id);
+ int rc = writeCache(*id);
if( rc!=SQLITE_OK ) return rc;
- rc = sqlite3RealSync(&id->fd);
+ rc = sqlite3RealSync(&(*id)->fd);
return rc;
}
** is written to disk.
*/
int sqlite3OsTruncate(OsFile *id, off_t nByte){
- id->nMaxWrite = nByte;
- return sqlite3RealTruncate(&id->fd, nByte);
+ (*id)->nMaxWrite = nByte;
+ return sqlite3RealTruncate(&(*id)->fd, nByte);
}
/*
** the file, then return this size instead of the on-disk size.
*/
int sqlite3OsFileSize(OsFile *id, off_t *pSize){
- int rc = sqlite3RealFileSize(&id->fd, pSize);
- if( rc==SQLITE_OK && pSize && *pSize<id->nMaxWrite ){
- *pSize = id->nMaxWrite;
+ int rc = sqlite3RealFileSize(&(*id)->fd, pSize);
+ if( rc==SQLITE_OK && pSize && *pSize<(*id)->nMaxWrite ){
+ *pSize = (*id)->nMaxWrite;
}
return rc;
}
*/
int sqlite3OsOpenReadWrite(const char *zFilename, OsFile *id, int *pReadonly){
initFile(id);
- return sqlite3RealOpenReadWrite(zFilename, &id->fd, pReadonly);
+ return sqlite3RealOpenReadWrite(zFilename, &(*id)->fd, pReadonly);
}
int sqlite3OsOpenExclusive(const char *zFilename, OsFile *id, int delFlag){
initFile(id);
- return sqlite3RealOpenExclusive(zFilename, &id->fd, delFlag);
+ return sqlite3RealOpenExclusive(zFilename, &(*id)->fd, delFlag);
}
int sqlite3OsOpenReadOnly(const char *zFilename, OsFile *id){
initFile(id);
- return sqlite3RealOpenReadOnly(zFilename, &id->fd);
+ return sqlite3RealOpenReadOnly(zFilename, &(*id)->fd);
}
/*
** backend.
*/
int sqlite3OsSeek(OsFile *id, off_t offset){
- return sqlite3RealSeek(&id->fd, offset);
+ return sqlite3RealSeek(&(*id)->fd, offset);
}
int sqlite3OsCheckReservedLock(OsFile *id){
- return sqlite3RealCheckReservedLock(&id->fd);
+ return sqlite3RealCheckReservedLock(&(*id)->fd);
}
int sqlite3OsLock(OsFile *id, int locktype){
- return sqlite3RealLock(&id->fd, locktype);
+ return sqlite3RealLock(&(*id)->fd, locktype);
}
int sqlite3OsUnlock(OsFile *id, int locktype){
- return sqlite3RealUnlock(&id->fd, locktype);
+ return sqlite3RealUnlock(&(*id)->fd, locktype);
}
int sqlite3OsFileModTime(OsFile *id, double *prNow){
- return sqlite3RealFileModTime(&id->fd, prNow);
+ return sqlite3RealFileModTime(&(*id)->fd, prNow);
}
int sqlite3OsOpenDirectory(const char *zDirname, OsFile *id){
- return sqlite3RealOpenDirectory(zDirname, &id->fd);
+ return sqlite3RealOpenDirectory(zDirname, &(*id)->fd);
}
#endif /* OS_TEST */