As I've found that sqlite-users mailing list does not accept mail
attachments, this is the text
of my patch:
Index: sqlite3.c
===================================================================
--- sqlite3.c (.../sqlite3.c) (revision 36921)
+++ sqlite3.c (.../trunk/sqlite3.c) (revision 38206)
@@ -24480,6 +24480,18 @@
#endif
/*
+** Define the OS_VMS pre-processor macro to 1 if building on
+** OpenVMS, or 0 otherwise.
+*/
+#ifndef OS_VMS
+# if defined(__VMS)
+# define OS_VMS 1
+# else
+# define OS_VMS 0
+# endif
+#endif
+
+/*
** These #defines should enable >2GB file support on Posix if the
** underlying operating system supports it. If the OS lacks
** large file support, these should be no-ops.
@@ -24609,7 +24621,7 @@
int lastErrno; /* The unix errno from last I/O
error */
void *lockingContext; /* Locking style specific state */
UnixUnusedFd *pUnused; /* Pre-allocated UnixUnusedFd */
- const char *zPath; /* Name of the file */
+ char *zPath; /* Name of the file */
unixShm *pShm; /* Shared memory segment information
*/
int szChunk; /* Configured by FCNTL_CHUNK_SIZE */
#if SQLITE_ENABLE_LOCKING_STYLE
@@ -24618,8 +24630,10 @@
#if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__)
unsigned fsFlags; /* cached details from statfs() */
#endif
+#if OS_VXWORKS || OS_VMS
+ int isDelete; /* Delete on close if true */
+#endif
#if OS_VXWORKS
- int isDelete; /* Delete on close if true */
struct vxworksFileId *pId; /* Unique file ID */
#endif
#ifndef NDEBUG
@@ -26354,6 +26368,7 @@
*/
static int closeUnixFile(sqlite3_file *id){
unixFile *pFile = (unixFile*)id;
+ OSTRACE(("CLOSE %-3d\n", pFile->h));
if( pFile->h>=0 ){
robust_close(pFile, pFile->h, __LINE__);
pFile->h = -1;
@@ -26367,8 +26382,14 @@
pFile->pId = 0;
}
#endif
- OSTRACE(("CLOSE %-3d\n", pFile->h));
+#if OS_VMS
+ if( pFile->isDelete && pFile->zPath!=NULL ){
+ OSTRACE(("DELETE-ON-CLOSE %s\n", pFile->zPath));
+ osUnlink(pFile->zPath);
+ }
+#endif
OpenCounter(-1);
+ sqlite3_free(pFile->zPath);
sqlite3_free(pFile->pUnused);
memset(pFile, 0, sizeof(unixFile));
return SQLITE_OK;
@@ -29144,7 +29165,7 @@
OSTRACE(("OPEN %-3d %s\n", h, zFilename));
pNew->h = h;
- pNew->zPath = zFilename;
+ pNew->zPath = sqlite3DbStrDup(0, zFilename);
if( memcmp(pVfs->zName,"unix-excl",10)==0 ){
pNew->ctrlFlags = UNIXFILE_EXCL;
}else{
@@ -29279,7 +29300,7 @@
#endif
pNew->lastErrno = 0;
-#if OS_VXWORKS
+#if OS_VXWORKS || OS_VMS
if( rc!=SQLITE_OK ){
if( h>=0 ) robust_close(pNew, h, __LINE__);
h = -1;
@@ -29665,7 +29686,7 @@
}
if( isDelete ){
-#if OS_VXWORKS
+#if OS_VXWORKS || OS_VMS
zPath = zName;
#else
osUnlink(zName);
@@ -29864,9 +29885,14 @@
sqlite3_snprintf(nOut, zOut, "%s", zPath);
}else{
int nCwd;
- if( osGetcwd(zOut, nOut-1)==0 ){
+ int error;
+#if OS_VMS
+ error = (0==getcwd(zOut, nOut-1, 0));
+#else
+ error = (0==osGetcwd(zOut, nOut-1));
+#endif
+ if ( error )
return unixLogError(SQLITE_CANTOPEN_BKPT, "getcwd", zPath);
- }
nCwd = (int)strlen(zOut);
sqlite3_snprintf(nOut-nCwd, &zOut[nCwd], "/%s", zPath);
}
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users