-C Stricter\sassert()\sstatements\son\sunixShmSystemLock().
-D 2025-10-25T11:37:54.456
+C Fix\sthe\sCLI\sso\sthat\sit\sdoes\snot\stry\sto\sopen\swhat\smight\sbe\san\sSQLite\ndatabase\susing\sopen()\sin\sthe\sdeduceDatabaseType()\sroutine,\sas\sthis\scan\nlead\sto\sbroken\sposix\sadvisory\slocks.
+D 2025-10-25T18:35:29.707
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/resolve.c f8d1d011aba0964ff1bdccd049d4d2c2fec217efd90d202a4bb775e926b2c25d
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c b95181711d59c36d9789e67f76c4cfec64b99f9629a50be5e6566e117b87d957
-F src/shell.c.in 8d218cb62f8badb58cb6d91302ca8b6ccdc93232dd2ba39a9ace2e41fd8495cb
+F src/shell.c.in a1cf350fa00e75eecf21d76e64a3bd2daaf90a5d31c1a2597e59edd7e3e2ee1a
F src/sqlite.h.in fcf692ee7d0997efee1e48ac9b533f18ec1eb2243255173134ab7ee0c70bc455
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
F src/sqlite3ext.h 7f236ca1b175ffe03316d974ef57df79b3938466c28d2f95caef5e08c57f3a52
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 86f53a2eb37d8ec98bc9d4c6b00253cc00d798e79c7d409e65d608354a556e19
-R dcf753e10a96715b1840de9a0d3fab75
+P ed01ed337c04cce4cdbb6e80628b6f716d537e072b80067bd2bd6c5d18a1454f
+R aa6ff8a07549169951095444f01a467f
U drh
-Z 78fddbc0c09532d4fb60b8889bacc776
+Z 0645197cb8b7d28672cb6a8bbdf9cfb5
# Remove this line to create a well-formed Fossil manifest.
** the type cannot be determined from content.
*/
int deduceDatabaseType(const char *zName, int dfltZip){
- FILE *f = sqlite3_fopen(zName, "rb");
+ FILE *f;
size_t n;
+ sqlite3 *db = 0;
+ sqlite3_stmt *pStmt = 0;
int rc = SHELL_OPEN_UNSPEC;
char zBuf[100];
- if( f==0 ){
- if( dfltZip && sqlite3_strlike("%.zip",zName,0)==0 ){
- return SHELL_OPEN_ZIPFILE;
- }else{
- return SHELL_OPEN_NORMAL;
- }
+ if( access(zName,0)!=0 ) goto database_type_by_name;
+ if( sqlite3_open_v2(zName, &db, SQLITE_OPEN_READONLY, 0)==SQLITE_OK
+ && sqlite3_prepare_v2(db,"SELECT count(*) FROM sqlite_schema",-1,&pStmt,0)
+ ==SQLITE_OK
+ && sqlite3_step(pStmt)==SQLITE_ROW
+ ){
+ rc = SHELL_OPEN_NORMAL;
}
+ sqlite3_finalize(pStmt);
+ sqlite3_close(db);
+ if( rc==SHELL_OPEN_NORMAL ) return SHELL_OPEN_NORMAL;
+ f = sqlite3_fopen(zName, "rb");
+ if( f==0 ) goto database_type_by_name;
n = fread(zBuf, 16, 1, f);
if( n==1 && memcmp(zBuf, "SQLite format 3", 16)==0 ){
fclose(f);
}
fclose(f);
return rc;
+
+database_type_by_name:
+ if( dfltZip && sqlite3_strlike("%.zip",zName,0)==0 ){
+ rc = SHELL_OPEN_ZIPFILE;
+ }else{
+ rc = SHELL_OPEN_NORMAL;
+ }
+ return rc;
}
#ifndef SQLITE_OMIT_DESERIALIZE