]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Ensure that all win32 API functions invocations in os_win.c are made via the function...
authordan <Dan Kennedy>
Wed, 11 Dec 2024 15:30:58 +0000 (15:30 +0000)
committerdan <Dan Kennedy>
Wed, 11 Dec 2024 15:30:58 +0000 (15:30 +0000)
FossilOrigin-Name: 2ffdc799c63ff8858f2aa9177ca9c74be2df5d7594cb10fb0a233537d83fd563

manifest
manifest.uuid
src/os_win.c
src/test1.c

index 9d021c1455a9551d813d4e4a741acdceda349710..3500b38ef8a4ded9c581a9994cbf96f4749234f4 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sproblem\swith\swalsetlk.test\son\swindows.
-D 2024-12-10T21:24:28.723
+C Ensure\sthat\sall\swin32\sAPI\sfunctions\sinvocations\sin\sos_win.c\sare\smade\svia\sthe\sfunction\stable.\sFix\sasan\serror\sin\stest\scode.
+D 2024-12-11T15:30:58.684
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -762,7 +762,7 @@ F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e
 F src/os_kv.c 4d39e1f1c180b11162c6dc4aa8ad34053873a639bac6baae23272fc03349986a
 F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d872107
 F src/os_unix.c d2edbd92b07a3f778c2defa8a2e9d75acceb6267bda56948c41e8cdda65224d6
-F src/os_win.c c7a28dee9db7f4ca01aaf1f8561635870fc660581a5a7c8ecee6aa455829cf29
+F src/os_win.c 49cd1fbdf60dd185ce25dd0d02b2670603c3e5edc9a8fb3f21585491c9d45e30
 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
 F src/pager.c 9656ad4e8331efb8a4f94f7a0c6440b98caea073950a367ea0c728a53b8e62c9
 F src/pager.h 4b1140d691860de0be1347474c51fee07d5420bd7f802d38cbab8ea4ab9f538a
@@ -788,7 +788,7 @@ F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
 F src/tclsqlite.c 90441d3cc16f966a23499d9096a3d2d971e5e8fddb4d1413b096b79c2b2cff07
 F src/tclsqlite.h 65e2c761446e1c9fa0342b7d2612a703483643c8b6a316d12a65b745a4727395
-F src/test1.c 325a66d5e52b84ba6b6d54f9d605e31a8304c395df0c589e0ade87fd2b7213b2
+F src/test1.c 04f44c6f87d3c5ee0a07775601625c319835ef35ab5060d02bbe25e0ec996615
 F src/test2.c 7ebc518e6735939d8979273a6f7b1d9b5702babf059f6ad62499f7f60a9eb9a3
 F src/test3.c e7573aa0f78ee4e070a4bc8c3493941c1aa64d5c66d4825c74c0f055451f432b
 F src/test4.c 13e57ae7ec7a959ee180970aef09deed141252fe9bb07c61054f0dfa4f1dfd5d
@@ -2202,8 +2202,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 55e4e7bb0074859e8c3e736e7eceb69af8408ce75135f5baa09e98aaf4e2a321
-R fc6eda57c88b8dbee00e08f5cd38d881
+P 704e6567c14a4a07a1a4d1fc2bd8a7f288b55b27508d23ba7f5c755c830c14ec
+R 1b1d5ac8540859f8a7b2d263d2f24a8d
 U dan
-Z c836a38a8f9471fb3b026d0dce0ae730
+Z 95b5c408908f206ff5d85841ad8872eb
 # Remove this line to create a well-formed Fossil manifest.
index d354804d8c01c342bd1623e9423f46e63266ca87..4ec306133d5f1a3e0dab04d62d4253ffb24682d5 100644 (file)
@@ -1 +1 @@
-704e6567c14a4a07a1a4d1fc2bd8a7f288b55b27508d23ba7f5c755c830c14ec
+2ffdc799c63ff8858f2aa9177ca9c74be2df5d7594cb10fb0a233537d83fd563
index 00866dbf6756a01a5befc3031c7049b6f1b66e88..7867c876e95847e836ec888f2cc05f5da0bc4011 100644 (file)
@@ -731,6 +731,12 @@ static struct win_syscall {
 #define osGetFullPathNameW ((DWORD(WINAPI*)(LPCWSTR,DWORD,LPWSTR, \
         LPWSTR*))aSyscall[25].pCurrent)
 
+/*
+** For GetLastError(), MSDN says:
+**
+** Minimum supported client: Windows XP [desktop apps | UWP apps]
+** Minimum supported server: Windows Server 2003 [desktop apps | UWP apps]
+*/
   { "GetLastError",            (SYSCALL)GetLastError,            0 },
 
 #define osGetLastError ((DWORD(WINAPI*)(VOID))aSyscall[26].pCurrent)
@@ -1013,11 +1019,13 @@ static struct win_syscall {
 #define osCreateEventExW ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,LPCWSTR, \
         DWORD,DWORD))aSyscall[62].pCurrent)
 
-#if !SQLITE_OS_WINRT
+/*
+** For WaitForSingleObject(), MSDN says:
+**
+** Minimum supported client: Windows XP [desktop apps | UWP apps]
+** Minimum supported server: Windows Server 2003 [desktop apps | UWP apps]
+*/
   { "WaitForSingleObject",     (SYSCALL)WaitForSingleObject,     0 },
-#else
-  { "WaitForSingleObject",     (SYSCALL)0,                       0 },
-#endif
 
 #define osWaitForSingleObject ((DWORD(WINAPI*)(HANDLE, \
         DWORD))aSyscall[63].pCurrent)
@@ -1164,6 +1172,24 @@ static struct win_syscall {
 #define osFlushViewOfFile \
         ((BOOL(WINAPI*)(LPCVOID,SIZE_T))aSyscall[79].pCurrent)
 
+/*
+** If SQLITE_ENABLE_SETLK_TIMEOUT is defined, we require CreateEvent()
+** to implement blocking locks with timeouts. MSDN says:
+**
+** Minimum supported client: Windows XP [desktop apps | UWP apps]
+** Minimum supported server: Windows Server 2003 [desktop apps | UWP apps]
+*/
+#ifdef SQLITE_ENABLE_SETLK_TIMEOUT
+  { "CreateEvent",              (SYSCALL)CreateEvent,            0 },
+#else
+  { "CreateEvent",              (SYSCALL)0,                      0 },
+#endif
+
+#define osCreateEvent ( \
+    (HANDLE(WINAPI*) (LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR)) \
+    aSyscall[80].pCurrent \
+)
+
 }; /* End of the overrideable system calls */
 
 /*
@@ -2583,7 +2609,7 @@ static int winHandleLockTimeout(
     ovlp.Offset = offset;
 
     if( nMs>0 ){
-      ovlp.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+      ovlp.hEvent = osCreateEvent(NULL, TRUE, FALSE, NULL);
       if( ovlp.hEvent==NULL ){
         return SQLITE_IOERR;
       }
@@ -2593,7 +2619,7 @@ static int winHandleLockTimeout(
     ret = osLockFileEx(hFile, flags, 0, nByte, 0, &ovlp);
 
     if( !ret && nMs>0 && GetLastError()==ERROR_IO_PENDING ){
-      DWORD res = WaitForSingleObject(ovlp.hEvent, (DWORD)nMs);
+      DWORD res = osWaitForSingleObject(ovlp.hEvent, (DWORD)nMs);
       if( res==WAIT_OBJECT_0 ){
         /* Successfully obtained the lock. */
         ret = TRUE;
@@ -6342,7 +6368,7 @@ int sqlite3_os_init(void){
 
   /* Double-check that the aSyscall[] array has been constructed
   ** correctly.  See ticket [bb3a86e890c8e96ab] */
-  assert( ArraySize(aSyscall)==80 );
+  assert( ArraySize(aSyscall)==81 );
 
   /* get memory map allocation granularity */
   memset(&winSysInfo, 0, sizeof(SYSTEM_INFO));
index 57836abe1c14a6481e93d2b6d8077828dcd45cad..ee99f8dadd1787486d011eeac50c72d660239362 100644 (file)
@@ -7984,13 +7984,16 @@ static int SQLITE_TCLAPI win32_file_lock(
   Tcl_Obj *CONST objv[]
 ){
   static struct win32FileLocker x = { "win32_file_lock", 0, 0, 0, 0, 0 };
-  const char *zFilename;
+  const char *zFilename = 0;
+  int nFilename = 0;
+  char *zTerm = 0;
   char zBuf[200];
   int retry = 0;
   HANDLE ev;
   DWORD wResult;
   sqlite3_vfs *pVfs = 0;
   int flags = SQLITE_OPEN_MAIN_DB | SQLITE_OPEN_READWRITE;
+  int rc = SQLITE_OK;
   
   if( objc!=4 && objc!=1 ){
     Tcl_WrongNumArgs(interp, 1, objv, "FILENAME DELAY1 DELAY2");
@@ -8018,11 +8021,19 @@ static int SQLITE_TCLAPI win32_file_lock(
   }
   if( Tcl_GetIntFromObj(interp, objv[2], &x.delay1) ) return TCL_ERROR;
   if( Tcl_GetIntFromObj(interp, objv[3], &x.delay2) ) return TCL_ERROR;
-  zFilename = Tcl_GetString(objv[1]);
-
   pVfs = sqlite3_vfs_find(0);
   x.pFd = (sqlite3_file*)sqlite3_malloc(pVfs->szOsFile);
-  if( pVfs->xOpen(pVfs, zFilename, x.pFd, flags, &flags)!=SQLITE_OK ){
+
+  /* xOpen() must be passed a dual-nul-terminated string */
+  zFilename = Tcl_GetStringFromObj(objv[1], &nFilename);
+  zTerm = (char*)sqlite3_malloc(nFilename+2);
+  memcpy(zTerm, zFilename, nFilename);
+  zTerm[nFilename] = 0;
+  zTerm[nFilename+1] = 0;
+  rc = pVfs->xOpen(pVfs, zTerm, x.pFd, flags, &flags);
+  sqlite3_free(zTerm);
+
+  if( rc!=SQLITE_OK ){
     Tcl_AppendResult(interp, "cannot open file: ", zFilename, (char*)0);
     return TCL_ERROR;
   }