- C Merge\sthe\slatest\senhancements\sfrom\strunk.
- D 2015-11-19T19:48:24.878
- F Makefile.in eebca73951f1f5827925d997e634daef95fdd364
-C Remove\sunreachable\sbranches\sfrom\sthe\sdecltype\scomputation\slogic\sin\sthe\squery\nplanner.
-D 2015-12-02T19:46:12.775
-F Makefile.in 23d9a63484a383fc64951b25ef44067930f98dc6
++C Merge\sall\srecent\strunk\senhancements,\sespecially\sthe\sunix\sVFS\schanges.
++D 2015-12-02T20:22:38.912
++F Makefile.in 28325f17527ba422645ebf98901f8876c312a825
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
- F Makefile.msc e928e68168df69b353300ac87c10105206653a03
+ F Makefile.msc e8fdca1cb89a1b58b5f4d3a130ea9a3d28cb314d
F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7
F VERSION 8b9d3ac6f1962f94e06ba05462422a544f9c4e36
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
- F main.mk 99fbce4b5b6ad626f61b13baea34c73a443be17f
-F main.mk 9001039f432baeba1074e2d1885f3dfd572b8636
++F main.mk 6693ea5f978d0175d056baa83ace9f8aac56814e
F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
F src/attach.c e944d0052b577703b9b83aac1638452ff42a8395
F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240
F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc
- F src/bitvec.c d1f21d7d91690747881f03940584f4cc548c9d3d
+ F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf
F src/btmutex.c 45a968cc85afed9b5e6cf55bf1f42f8d18107f79
-F src/btree.c d3bdd8462a86492e2ebc9aca4a0168429017de25
+F src/btree.c 59c8f28530850c9f94be62aa4c020d39a4de10d2
F src/btree.h 2d76dee44704c47eed323356a758662724b674a0
F src/btreeInt.h 3ab435ed27adea54d040584b0bcc488ee7db1e38
- F src/build.c 5a3b71786e2b96d2bb92d40f190eb1fe736f25ca
+ F src/build.c e83da4d004a4e050c01acbb821ff7a7b1019c29b
F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
- F src/ctime.c 509ef9c64d1321f42448f111da86400b1799218a
+ F src/ctime.c 58eda76364fb6f374e044aa4493219b13abf9400
F src/date.c fb1c99172017dcc8e237339132c91a21a0788584
F src/dbstat.c ffd63fc8ba7541476ced189b95e95d7f2bc63f78
F src/delete.c 00af9f08a15ddc5cba5962d3d3e5bf2d67b2e7da
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
F src/insert.c e1d20ae8979e25519c2670233718676bedcfedc9
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
-F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
+F src/legacy.c 9c17d86e06522c261307f0eb6bcb1254c8b04a59
F src/loadext.c 18586e45a215325f15096821e9c082035d4fb810
- F src/main.c 5d8883e245ff3c7a24529e964d807a942a8fd16a
-F src/main.c 3f2828fce1e45c3ad096c69eee1e96962c7281c5
++F src/main.c 66b67b2b3b0f972d4c5aee89d5d31e2f863606e9
F src/malloc.c 337bbe9c7d436ef9b7d06b5dd10bbfc8f3025972
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
F src/mutex.c 8e45800ee78e0cd1f1f3fe8e398853307f4a085c
F src/mutex.h 779d588e3b7756ec3ecf7d78cde1d84aba414f85
F src/mutex_noop.c 9d4309c075ba9cc7249e19412d3d62f7f94839c4
- F src/mutex_unix.c a94b46f3f7beba307dde1b298b0f99f9c3677a93
+ F src/mutex_unix.c fc54f25b2a750d53b32512a4a728cec28039ae2a
F src/mutex_w32.c 5e6fe1c298fb5a8a15aaed4161d5759311431c17
F src/notify.c 9711a7575036f0d3040ba61bc6e217f13a9888e7
-F src/os.c 8fd25588eeba74068d41102d26810e216999b6c8
+F src/os.c 5822c2b843a77219bba1e28887cdc816b27ca29d
F src/os.h 3e57a24e2794a94d3cf2342c6d9a884888cd96bf
F src/os_common.h abdb9a191a367793268fe553d25bab894e986a0e
F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
- F src/os_unix.c f3e7ee04047592105e6408fde79a218cdf85bbe9
- F src/os_win.c 210580a96369786f43f3ccb47096f7b9b86fe980
-F src/os_unix.c 60997373a8d90bd17e1c0e49d11ef361b713439b
-F src/os_win.c 386fba30419e8458b13209781c2af5590eab2811
++F src/os_unix.c 325d29171a7031739931be1a7baf18ebf3ca391f
++F src/os_win.c d5f32f015c52888b76c8919a8b3fa5c532dff497
F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
- F src/pager.c 93b495fb0503425bb909a01ff4f5794dbfab819c
- F src/pager.h 22bbab15f41ac42ce0b51e39a7d02eb5eb2833c2
-F src/pager.c f92aacd5216d8815136c9e0190041783c602641a
-F src/pager.h 9153c71a89dc82a5a77e485f3929792116c70aae
++F src/pager.c f286cbf210d862543635057132da176f4d69ac75
++F src/pager.h 3bb11e11eb1a9f4819bb0d91ede24b039916d8fd
F src/parse.y 23737e649c26ce327603799e57f5c2ff50e5e6ba
F src/pcache.c 73895411fa6b7bd6f0091212feabbe833b358d23
F src/pcache.h 1ff11adce609ba7de139b6abfabaf9a2bac947b5
- F src/pcache1.c 902e1bc7bdaa81b40f8543407c5e2ac8ef4dc035
+ F src/pcache1.c 46a110be31a8d9f9b41431733836822ca0dd27ab
-F src/pragma.c f3e7147299ca05ef4304a36f1fd6e002729c72c6
+F src/pragma.c c1ab37e1576d22715d3bae4f51658326240a8161
F src/pragma.h 3d94aebbebd2089899fecc01909bf2608b39507d
-F src/prepare.c 82e5db1013846a819f198336fed72c44c974e7b1
+F src/prepare.c 176b060bcf36041193c2807f2b045dce1effa4bb
- F src/printf.c f8fc8f04e75b1e983ef2793c27ec7a43b287e94a
+ F src/printf.c ca05561795ad6c2fa47acdd007702586282f7feb
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
- F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91
+ F src/resolve.c f4c897ca76ca6d5e0b3f0499c627392ffe657c8e
F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
- F src/select.c 2376d320907a5c28c55290f18fd94aa3400bf97c
- F src/shell.c f0f59ea60ad297f671b7ae0fb957a736ad17c92c
- F src/sqlite.h.in df28d4fdd2c6c902ed68bb4d0223e370f97c7d74
+ F src/select.c 1611828a7116e5f6cc1e69cd07d59b0d2c662ea9
+ F src/shell.c 2796237990d42e6a5a7beafee65ef70cc8767d21
-F src/sqlite.h.in 5bd83191711d3dc85030326daa9e8e5226a495e7
++F src/sqlite.h.in 050e7ee3bb7e7f04bceb94b5c883eda435efdcf7
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
- F src/sqlite3ext.h 4b66e3e3435da4b4c8c83696d0349f0c503b3924
- F src/sqliteInt.h ed4a27c98da2caaa6db8b0a8f57c05085586de9b
+F src/sqlite3_private.h a81a9c5f97c095cc3e86914a05f8fabe0011f4a1
-F src/sqliteInt.h 64256d193a16a147d9f6317cc4e095fdd3e0a2e9
+ F src/sqlite3ext.h 41ef50b0418a7c5ad1337bb80db5a7928dee764f
++F src/sqliteInt.h 753af29810be999593fe14bb2276b79dddccd8a6
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
F src/test_backup.c 2e6e6a081870150f20c526a2e9d0d29cda47d803
F src/test_blob.c e5a7a81d61a780da79101aeb1e60d300af169e07
F src/test_btree.c 2e9978eca99a9a4bfa8cae949efb00886860a64f
- F src/test_config.c ca2fdaf49a314ee38cc7363d90ed9cb0905f4155
-F src/test_config.c 48850687dd5abc8260e23835632511054ccae172
++F src/test_config.c 8ab92facea822bd4fc6d0198487d7638072e1ec9
F src/test_demovfs.c 0de72c2c89551629f58486fde5734b7d90758852
F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
- F src/test_fs.c ced436e3d4b8e4681328409b8081051ce614e28f
+ F src/test_fs.c aab47ac456316502faa265daadf9ac832fea12b9
F src/test_func.c 0d9c25956152adefee8881c6fadc8354793764d0
F src/test_hexio.c abfdecb6fa58c354623978efceb088ca18e379cd
F src/test_init.c 66b33120ffe9cd853b5a905ec850d51151337b32
F src/test_schema.c 2bdba21b82f601da69793e1f1d11bf481a79b091
F src/test_server.c a2615049954cbb9cfb4a62e18e2f0616e4dc38fe
F src/test_sqllog.c 0d138a8180a312bf996b37fa66da5c5799d4d57b
-F src/test_superlock.c 06797157176eb7085027d9dd278c0d7a105e3ec9
+F src/test_superlock.c 12e2bc484c6c2ba837327d37f2e6a6fd9d1464f8
F src/test_syscall.c 2e21ca7f7dc54a028f1967b63f1e76155c356f9b
- F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
+ F src/test_tclvar.c d86412527da65468ee6fa1b8607c65d0af736bc4
F src/test_thread.c af391ec03d23486dffbcc250b7e58e073f172af9
F src/test_vfs.c 3b65d42e18b262805716bd96178c81da8f2d9283
F src/test_vfstrace.c bab9594adc976cbe696ff3970728830b4c5ed698
F src/tokenize.c 5606871a377f390af7040ec3c12e0d183512d785
F src/treeview.c 78842e90c1f71269e7a73a1d4221b6fe360bab66
F src/trigger.c 322f23aad694e8f31d384dcfa386d52a48d3c52f
- F src/update.c 40e51cd0883cb5bfd6abb7d8a7cd8aa47fab2945
+ F src/update.c 17332f9fe818cbc0444c36a811800af8498af4c3
F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
- F src/util.c fc612367108b74573c5fd13a85d0a23027f438bd
+ F src/util.c e802e8e311a0d6c48cd1b3e89db164f6f0248d70
F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
- F src/vdbe.c c9869b29ad815472a1548b6772d0b26cb6976180
-F src/vdbe.c 4d75375fa8bf911aa76ab8383d6f7eea0dec0fda
++F src/vdbe.c 5cd1221f8a9ee01574124986ac2d0ec97504ea50
F src/vdbe.h efb7a8c1459e31f3ea4377824c6a7e4cb5068637
- F src/vdbeInt.h 33403622c6a8feaaac5f0f3f17f5d1bf6df42286
+ F src/vdbeInt.h 75c2e82ee3357e9210c06474f8d9bdf12c81105d
-F src/vdbeapi.c 020681b943e77766b32ae1cddf86d7831b7374ca
-F src/vdbeaux.c 9a234c9aaab4ad725daf94667cfed441a437c52d
+F src/vdbeapi.c b13f483b1375467c367de486edf2be05234e27bb
- F src/vdbeaux.c 2fab8625e7738547ebc68e43e4770e557a2a8bb7
- F src/vdbeblob.c 565fabd302f5fca3bdf3d56cac330483616a39b6
++F src/vdbeaux.c e189aaf40871062c8451bbc28ce7a275b77979d0
+ F src/vdbeblob.c fdc4a81605ae7a35ae94a55bd768b66d6be16f15
F src/vdbemem.c fdd1578e47bea61390d472de53c565781d81e045
- F src/vdbesort.c 8b23930a1289526f6d2a3a9f2e965bcc963e4a68
+ F src/vdbesort.c a7ec02da4494c59dfd071126dd3726be5a11459d
F src/vdbetrace.c 8befe829faff6d9e6f6e4dee5a7d3f85cc85f1a0
F src/vtab.c 2a8b44aa372c33f6154208e7a7f6c44254549806
F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb
- F src/wal.c 929c1d7e2da94dda41e5c2fa71a919fff91ad04b
-F src/wal.c 1569802364cd192bbd5c4a8ea3fd6de593edecbd
-F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
++F src/wal.c e93f9b7fdf5d2f6d11f0864200a8fe66ed30c8ec
+F src/wal.h 6b3a67ecd7172dcc9f18fc9cd4d76dc4c2166e68
F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba
- F src/where.c 6aceb72cc58dc06922a9e1604d559c8ca4c3e728
- F src/whereInt.h 7892bb54cf9ca0ae5c7e6094491b94c9286dc647
- F src/wherecode.c 4c96182e7b25e4be54008dee2da5b9c2f8480b9b
- F src/whereexpr.c e63244ca06c503e5f3c5b7f3c9aea0db826089ed
+ F src/where.c b18edbb9e5afabb77f4f27550c471c5c824e0fe7
+ F src/whereInt.h e20801d89e34de1912bb6a3babb30c390da27add
+ F src/wherecode.c dfbfe198e418b01f208b489e088edd230c91a4e7
+ F src/whereexpr.c eebba8340c90de73b3d3bbe8c43b84559b8e6e2c
-F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
+F test/8_3_names.test 05034aadccd2253ffe6cbefb06662b8aa4600f77
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
F test/aggnested.test b35b4cd69fc913f90d39a575e171e1116c3a4bb7
F test/spellfix.test 0597065ff57042df1f138e6a2611ae19c2698135
F test/spellfix2.test dfc8f519a3fc204cb2dfa8b4f29821ae90f6f8c3
F test/sqldiff1.test 8f6bc7c6a5b3585d350d779c6078869ba402f8f5
- F test/sqllimits1.test 89b3d5aad05b99f707ee3786bdd4416dccf83304
+ F test/sqllimits1.test a74ee2a3740b9f9c2437c246d8fb77354862a142
F test/sqllog.test a8faa2df39610a037dd372ed872d124260d32953
-F test/stat.test 8de91498c99f5298b303f70f1d1f3b9557af91bf
+F test/stat.test d7607786af4054f277f6d48b2465f27b61f380f7
F test/statfault.test f525a7bf633e50afd027700e9a486090684b1ac1
-F test/stmt.test 25d64e3dbf9a3ce89558667d7f39d966fe2a71b9
+F test/stmt.test 78a6764439cfa5abdcbf98d4d084739e81eeec4f
F test/subquery.test d7268d193dd33d5505df965399d3a594e76ae13f
F test/subquery2.test 438f8a7da1457277b22e4176510f7659b286995f
F test/subselect.test d24fd8757daf97dafd2e889c73ea4c4272dcf4e4
F test/substr.test 18f57c4ca8a598805c4d64e304c418734d843c1a
F test/subtype1.test 7fe09496352f97053af1437150751be2d0a0cae8
-F test/superlock.test 1cde669f68d2dd37d6c9bd35eee1d95491ae3fc2
+F test/superlock.test 2b27b4ae7c6b9d534b0412e0d99f989aa1f3b9cf
- F test/symlink.test 2513f7c030df0f435c6415687ba8b739f3d312df
+ F test/symlink.test cbf6cb8c6c4b63a39e9f0f6b0d5c99e249dbc102
F test/sync.test a34cd43e98b7fb84eabbf38f7ed8f7349b3f3d85
- F test/syscall.test fba9ebdc6905d05bba6a835e691f20ed9ea2cc88
+ F test/syscall.test 2aa9e111b79fb385681ff8940124def6f8faab87
F test/sysfault.test fa776e60bf46bdd3ae69f0b73e46ee3977a58ae6
- F test/tabfunc01.test 03c4ad422c6ab596cff6dcaf86dd061a9f039525
+ F test/tabfunc01.test cc33684f9480fcf1fd5ce287ac28d22971cad1cc
F test/table.test b708f3e5fa2542fa51dfab21fc07b36ea445cb2f
F test/tableapi.test 2674633fa95d80da917571ebdd759a14d9819126
F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
- P f9060b2a9860b09ea0e268f6c135a2c78bc8d12d 126b998cf163dcdd5a222634f1e929f04db3c700
- R df6d884037dca343cf419efa4c114cdb
-P 3e1d71fcaf57c0223ab9a7366c8607f8f66bb21c
-R 0397cf9717330ffe9055735c8207c81a
++P 2c9e5436bd9146f0d76eb58e75cb76109d074ff7 4f2bcff94c672312805be1400050a7026f93a9d7
++R 1c500c6cf448d5bf63a82e6dfd2aaad7
U drh
- Z 5ea58909e6378f1c3d3e2b46f59923ff
-Z 6381d064415ccbeec9de47fb6017aaa8
++Z 126ab2bbf11a0fdb5ff4a3332b3c23bf
lock.l_whence = SEEK_SET;
lock.l_start = SHARED_FIRST;
lock.l_len = divSize;
- if( unixFileLock(pFile, &lock)==(-1) ){
+ if( unixFileLock(pFile, &lock, 10)==(-1) ){
tErrno = errno;
+#if OSLOCKING_CHECK_BUSY_IOERR
+ rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
+#else
rc = SQLITE_IOERR_UNLOCK;
- if( IS_LOCK_ERROR(rc) ){
- storeLastErrno(pFile, tErrno);
- }
+#endif
+ storeLastErrno(pFile, tErrno);
goto end_unlock;
}
lock.l_type = F_RDLCK;
lock.l_whence = SEEK_SET;
lock.l_start = SHARED_FIRST+divSize;
lock.l_len = SHARED_SIZE-divSize;
- if( unixFileLock(pFile, &lock)==(-1) ){
+ if( unixFileLock(pFile, &lock, 10)==(-1) ){
tErrno = errno;
+#if OSLOCKING_CHECK_BUSY_IOERR
+ rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
+#else
rc = SQLITE_IOERR_UNLOCK;
+#endif
+ if( IS_LOCK_ERROR(rc) ){
+ storeLastErrno(pFile, tErrno);
+ }
+ storeLastErrno(pFile, tErrno);
goto end_unlock;
}
}else
/* To fully unlock the database, delete the lock file */
assert( eFileLock==NO_LOCK );
rc = osRmdir(zLockFile);
- if( rc<0 && errno==ENOTDIR ) rc = osUnlink(zLockFile);
if( rc<0 ){
int tErrno = errno;
- rc = 0;
- if( ENOENT != tErrno ){
+ if( tErrno==ENOENT ){
+ rc = SQLITE_OK;
+ }else{
+#if OSLOCKING_CHECK_BUSY_IOERR
+ rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
+#else
rc = SQLITE_IOERR_UNLOCK;
- }
- if( IS_LOCK_ERROR(rc) ){
+#endif
storeLastErrno(pFile, tErrno);
}
return rc;
if ( lrc ) {
int tErrno = errno;
/* unlock failed with an error */
+#if OSLOCKING_CHECK_BUSY_IOERR
+ lrc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
+#else
lrc = SQLITE_IOERR_UNLOCK;
+#endif
+ if( IS_LOCK_ERROR(lrc) ){
+ storeLastErrno(pFile, tErrno);
+ rc = lrc;
+ }
+ storeLastErrno(pFile, tErrno);
+ rc = lrc;
}
} else {
int tErrno = errno;
#endif
/* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
- ** no-op
+ ** no-op. But go ahead and call fstat() to validate the file
+ ** descriptor as we need a method to provoke a failure during
+ ** coverate testing.
*/
#ifdef SQLITE_NO_SYNC
- rc = SQLITE_OK;
+ {
+ struct stat buf;
+ rc = osFstat(fd, &buf);
+ }
#elif HAVE_FULLFSYNC
if( fullSync ){
+#ifdef SQLITE_USE_REQUEST_FULLFSYNC
+ rc = osFsync(fd);
+ if (!rc) {
+ OSSpinLockLock(¬ify_lock);
+ rc = notify_post(REQUEST_FULLSYNC_NOTIFICATION);
+ OSSpinLockUnlock(¬ify_lock);
+ }
+#else
rc = osFcntl(fd, F_FULLFSYNC, 0);
+#endif
}else{
rc = 1;
}
OSTRACE(("DIRSYNC %s (have_fullfsync=%d fullsync=%d)\n", pFile->zPath,
HAVE_FULLFSYNC, isFullsync));
rc = osOpenDirectory(pFile->zPath, &dirfd);
- if( rc==SQLITE_OK && dirfd>=0 ){
+ if( rc==SQLITE_OK ){
full_fsync(dirfd, 0, 0);
+#if OSCLOSE_CHECK_CLOSE_IOERR
+ if( close(pFile->dirfd) ){
+ storeLastErrno(pFile, errno);
+ rc = SQLITE_IOERR_DIR_CLOSE;
+ }
+#else
robust_close(pFile, dirfd, __LINE__);
- }else if( rc==SQLITE_CANTOPEN ){
+#endif
+ }else{
+ assert( rc==SQLITE_CANTOPEN );
rc = SQLITE_OK;
}
pFile->ctrlFlags &= ~UNIXFILE_DIRSYNC;
** a new *-shm file is created, an attempt will be made to create it
** with the same permissions.
*/
- if( osFstat(pDbFd->h, &sStat) && pInode->bProcessLock==0 ){
+ if( osFstat(pDbFd->h, &sStat) ){
+ storeLastErrno(pDbFd, errno);
rc = SQLITE_IOERR_FSTAT;
goto shm_open_err;
}
goto open_finished;
}
- /* If this process is running as root and if creating a new rollback
- ** journal or WAL file, set the ownership of the journal or WAL to be
- ** the same as the original database.
- */
- if( flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL) ){
- robustFchown(fd, uid, gid);
+ /* if we're opening the wal or journal and running as root, set the
+ ** journal uid/gid */
+ if( !isReadonly && (flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL)) ){
+ uid_t euid = geteuid();
+ if( euid==0 && (euid!=uid || getegid()!=gid) ){
- if( osFchown(fd, uid, gid) ){
++ if( robustFchown(fd, uid, gid) ){
+ rc = SQLITE_CANTOPEN_BKPT;
+ goto open_finished;
+ }
+ }
}
}
assert( fd>=0 );
{
rc = unixLogError(SQLITE_IOERR_DIR_FSYNC, "fsync", zPath);
}
+#if OSCLOSE_CHECK_CLOSE_IOERR
+ if( close(fd)&&!rc ){
+ rc = SQLITE_IOERR_DIR_CLOSE;
+ }
+#else
robust_close(0, fd, __LINE__);
- }else if( rc==SQLITE_CANTOPEN ){
+#endif
+ }else{
+ assert( rc==SQLITE_CANTOPEN );
rc = SQLITE_OK;
}
}