Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Use _commit() rather than FlushFileBuffers() as a substitute for fsync() on windows. Also cast for C++ and add support for SQLITE_FCNTL_VFSNAME. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | quota-stdio |
Files: | files | file ages | folders |
SHA1: |
e85cfe9a17a2943ee0cf7915451ff6cc |
User & Date: | drh 2011-12-15 17:42:35.299 |
Context
2011-12-15
| ||
17:44 | Add stdio support to the quota VFS. (check-in: 322bd15f97 user: drh tags: trunk) | |
17:42 | Use _commit() rather than FlushFileBuffers() as a substitute for fsync() on windows. Also cast for C++ and add support for SQLITE_FCNTL_VFSNAME. (Closed-Leaf check-in: e85cfe9a17 user: drh tags: quota-stdio) | |
2011-12-14
| ||
00:04 | Harden the utf8-to-mbcs converter in the quota module against failures. (check-in: 1cda511deb user: drh tags: quota-stdio) | |
Changes
Changes to src/test_quota.c.
︙ | ︙ | |||
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 | #endif #if SQLITE_OS_UNIX # include <unistd.h> #endif #if SQLITE_OS_WIN # include <windows.h> #endif /* ** Translate UTF8 to MBCS for use in fopen() calls. Return a pointer to the ** translated text.. Call quota_mbcs_free() to deallocate any memory ** used to store the returned pointer when done. */ static char *quota_utf8_to_mbcs(const char *zUtf8){ #if SQLITE_OS_WIN int n; /* Bytes in zUtf8 */ int nWide; /* number of UTF-16 characters */ int nMbcs; /* Bytes of MBCS */ LPWSTR zTmpWide; /* The UTF16 text */ char *zMbcs; /* The MBCS text */ int codepage; /* Code page used by fopen() */ n = strlen(zUtf8); nWide = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, NULL, 0); if( nWide==0 ) return 0; | > | | | 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 | #endif #if SQLITE_OS_UNIX # include <unistd.h> #endif #if SQLITE_OS_WIN # include <windows.h> # include <io.h> #endif /* ** Translate UTF8 to MBCS for use in fopen() calls. Return a pointer to the ** translated text.. Call quota_mbcs_free() to deallocate any memory ** used to store the returned pointer when done. */ static char *quota_utf8_to_mbcs(const char *zUtf8){ #if SQLITE_OS_WIN int n; /* Bytes in zUtf8 */ int nWide; /* number of UTF-16 characters */ int nMbcs; /* Bytes of MBCS */ LPWSTR zTmpWide; /* The UTF16 text */ char *zMbcs; /* The MBCS text */ int codepage; /* Code page used by fopen() */ n = strlen(zUtf8); nWide = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, NULL, 0); if( nWide==0 ) return 0; zTmpWide = (LPWSTR)sqlite3_malloc( (nWide+1)*sizeof(zTmpWide[0]) ); if( zTmpWide==0 ) return 0; MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zTmpWide, nWide); codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP; nMbcs = WideCharToMultiByte(codepage, 0, zTmpWide, nWide, 0, 0, 0, 0); zMbcs = nMbcs ? (char*)sqlite3_malloc( nMbcs+1 ) : 0; if( zMbcs ){ WideCharToMultiByte(codepage, 0, zTmpWide, nWide, zMbcs, nMbcs, 0, 0); } sqlite3_free(zTmpWide); return zMbcs; #else return (char*)zUtf8; /* No-op on unix */ |
︙ | ︙ | |||
710 711 712 713 714 715 716 | return pSubOpen->pMethods->xCheckReservedLock(pSubOpen, pResOut); } /* Pass xFileControl requests through to the original VFS unchanged. */ static int quotaFileControl(sqlite3_file *pConn, int op, void *pArg){ sqlite3_file *pSubOpen = quotaSubOpen(pConn); | | > > > > > > | 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 | return pSubOpen->pMethods->xCheckReservedLock(pSubOpen, pResOut); } /* Pass xFileControl requests through to the original VFS unchanged. */ static int quotaFileControl(sqlite3_file *pConn, int op, void *pArg){ sqlite3_file *pSubOpen = quotaSubOpen(pConn); int rc = pSubOpen->pMethods->xFileControl(pSubOpen, op, pArg); #if defined(SQLITE_FCNTL_VFSNAME) if( op==SQLITE_FCNTL_VFSNAME && rc==SQLITE_OK ){ *(char**)pArg = sqlite3_mprintf("quota/%z", *(char**)pArg); } #endif return rc; } /* Pass xSectorSize requests through to the original VFS unchanged. */ static int quotaSectorSize(sqlite3_file *pConn){ sqlite3_file *pSubOpen = quotaSubOpen(pConn); return pSubOpen->pMethods->xSectorSize(pSubOpen); |
︙ | ︙ | |||
1089 1090 1091 1092 1093 1094 1095 | int rc; rc = fflush(p->f); if( rc==0 && doFsync ){ #if SQLITE_OS_UNIX rc = fsync(fileno(p->f)); #endif #if SQLITE_OS_WIN | | | | 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 | int rc; rc = fflush(p->f); if( rc==0 && doFsync ){ #if SQLITE_OS_UNIX rc = fsync(fileno(p->f)); #endif #if SQLITE_OS_WIN rc = _commit(_fileno(p->f)); #endif } return rc!=0; } /* ** Seek on a quota_FILE stream. */ int sqlite3_quota_fseek(quota_FILE *p, long offset, int whence){ return fseek(p->f, offset, whence); |
︙ | ︙ |