Fossil SCM

Simplified an overly-clever test for a file size being an even multiple of 512 bytes. [https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGIMwCspK4AMngMmAByPgBGmMQg0gAOqAqETgwe3r7%2BQSlpjgJhEdEscQnSdpgOGUIETMQEWT5%2BgbaY9oUMdQ0ExVGx8Ym29Y3NOW0Ko33hA2VDkgCUtqhexMjsHAD0WwDUACoAnkmYu4erxLtoWLsI8ZikuyS7tKhM6LuGu5iqrEn0ADoTBoAILhAi7PAKAD6AS4Zgg4N2DB8i12JgA7FZQeYAMx4Ki7EHo0G7Mm7YiYAhrBi7CAoljoswANl2GlUXCoVDRYDAJlxABE2fzsSC8R0lMDieTKdTiLT6T4mQFdnCzDy%2BYLhbjReKGPgqFLMQKOMtaJwArw/BwtKRUJw3NZrLsFBcNkzcTxSARNKblgBrEABDT6TiSK2%2Bu2cXgKEAhn0202kOCwGCIFCoFhJOjxciUNBZnMJYBceF8OgEeKxiAxSMxcINQ6cL0FtiCADyDFoTcTpCwLEMwHEvfwlJqADdMLHez9ql5K83eOCOpHaHgYsRGx4sJGCMQ8CxF8sqAZgAoAGp4TAAd3bJ2tXv4ghEYnYUhkgkUKnUvd0Zn0g4oE6lj6OusaQMsqBJF004ALQCiCMYdNUXQuPq4x%2BGWoSzKU5QSFwpD5OkAgYRI/5EV0/S4UMpbtJ0tTTKRZZVDUAg9I0VGDAktFTL0TH/rxHE4Vx%2BHLK6awbHoe6YJsPBmhaEa9vaHCqAAHMysHMpIuzAMgyC7KWAJmHSjqWNYjy4IQzx4gRuweIW9CXHi6q8AmWiLAGQYhuaHDhqQh7BqQ1q2spMZxt6vrLCm6YFtmjl5hAsVFiAJZljQtCVsQ1a1r29bMMQPYtpmbYEJ23aRv2g7Drao4oXgk7Tras7IPOslLoIK69muG5bhgmy2nuB5Hnwp4Xlet73ouH7CKI4jvk%2B8hKGoka6ARBhGEBZkgd14EQJB0EZHBAoWEh9HOBArhMcE%2BqcfM3GEakxGZJ4LR6BRGS3XhBEsV07FNC9OTfchrHdNMn00SMfEA5hkNCSUIlcGJbpvt6lJtfJHCWkFkbKWpGlaTpekGVwRkmcBNi7JZRBOWYnqPPZcXxB6iOuZFyx3O8Qx7aGvm8AFIbBbwoW2OFbl%2BqQgaBT5uKKSF0YRYmHk82YstC/LYtK5OWUZIkQA | Godbolt says] GCC 11 generates the same code both ways, at least, and it isn't in a CPU-critical code path anyway. Also added a comment referring to this new, simplified code, to prevent a recurrence of the problem fixed by the prior commit.

wyoung 2022-02-28 20:35 trunk
Commit c67d54010d5b3e1ce3383c478058ecb534ed299b51c951a6b140965bb0a30d6f
1 file changed +4 -1
+4 -1
--- src/db.c
+++ src/db.c
@@ -2140,11 +2140,11 @@
21402140
int res = 0;
21412141
sqlite3_stmt *pStmt = 0;
21422142
21432143
sz = file_size(zDbName, ExtFILE);
21442144
if( sz<16834 ) return 0;
2145
- if( sz & 0x1ff ) return 0;
2145
+ if( sz%512 ) return 0;
21462146
rc = sqlite3_open(zDbName, &db);
21472147
if( rc ) goto is_repo_end;
21482148
rc = sqlite3_prepare_v2(db,
21492149
"SELECT count(*) FROM sqlite_schema"
21502150
" WHERE name COLLATE nocase IN"
@@ -2188,10 +2188,13 @@
21882188
}
21892189
if( zDbName==0 ){
21902190
db_err("unable to find the name of a repository database");
21912191
}
21922192
}
2193
+ /* Don't change the file size test to call db_looks_like_a_repository()
2194
+ * or copy code from it. The sz%512 bit in particular is wrong for the
2195
+ * apndvfs case in db_open() above. */
21932196
if( file_access(zDbName, R_OK) || file_size(zDbName, ExtFILE)<1024 ){
21942197
if( file_access(zDbName, F_OK) ){
21952198
#ifdef FOSSIL_ENABLE_JSON
21962199
g.json.resultCode = FSL_JSON_E_DB_NOT_FOUND;
21972200
#endif
21982201
--- src/db.c
+++ src/db.c
@@ -2140,11 +2140,11 @@
2140 int res = 0;
2141 sqlite3_stmt *pStmt = 0;
2142
2143 sz = file_size(zDbName, ExtFILE);
2144 if( sz<16834 ) return 0;
2145 if( sz & 0x1ff ) return 0;
2146 rc = sqlite3_open(zDbName, &db);
2147 if( rc ) goto is_repo_end;
2148 rc = sqlite3_prepare_v2(db,
2149 "SELECT count(*) FROM sqlite_schema"
2150 " WHERE name COLLATE nocase IN"
@@ -2188,10 +2188,13 @@
2188 }
2189 if( zDbName==0 ){
2190 db_err("unable to find the name of a repository database");
2191 }
2192 }
 
 
 
2193 if( file_access(zDbName, R_OK) || file_size(zDbName, ExtFILE)<1024 ){
2194 if( file_access(zDbName, F_OK) ){
2195 #ifdef FOSSIL_ENABLE_JSON
2196 g.json.resultCode = FSL_JSON_E_DB_NOT_FOUND;
2197 #endif
2198
--- src/db.c
+++ src/db.c
@@ -2140,11 +2140,11 @@
2140 int res = 0;
2141 sqlite3_stmt *pStmt = 0;
2142
2143 sz = file_size(zDbName, ExtFILE);
2144 if( sz<16834 ) return 0;
2145 if( sz%512 ) return 0;
2146 rc = sqlite3_open(zDbName, &db);
2147 if( rc ) goto is_repo_end;
2148 rc = sqlite3_prepare_v2(db,
2149 "SELECT count(*) FROM sqlite_schema"
2150 " WHERE name COLLATE nocase IN"
@@ -2188,10 +2188,13 @@
2188 }
2189 if( zDbName==0 ){
2190 db_err("unable to find the name of a repository database");
2191 }
2192 }
2193 /* Don't change the file size test to call db_looks_like_a_repository()
2194 * or copy code from it. The sz%512 bit in particular is wrong for the
2195 * apndvfs case in db_open() above. */
2196 if( file_access(zDbName, R_OK) || file_size(zDbName, ExtFILE)<1024 ){
2197 if( file_access(zDbName, F_OK) ){
2198 #ifdef FOSSIL_ENABLE_JSON
2199 g.json.resultCode = FSL_JSON_E_DB_NOT_FOUND;
2200 #endif
2201

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button