Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fixes to the proxy locking so that os_unix.c compiles on linux with proxy locking omitted. (CVS 5935) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
6f910b7036817f4bb4de807bf48938d2 |
User & Date: | drh 2008-11-21 00:24:42.000 |
Context
2008-11-21
| ||
03:23 | On a ROLLBACK, if there page cache entries which are dirty but not in the rollback journal, make sure they get reinitialized in the btree layer. (CVS 5936) (check-in: faded96f36 user: drh tags: trunk) | |
00:24 | Fixes to the proxy locking so that os_unix.c compiles on linux with proxy locking omitted. (CVS 5935) (check-in: 6f910b7036 user: drh tags: trunk) | |
00:10 | Added support for proxy file locking style Added pragma support for controlling proxy file locking Added file control access to last errno and proxy locking Added support for TMPDIR environment variable Extended unit tests to cover new proxy locking pragmas and file control features (CVS 5934) (check-in: b9bc36d3d5 user: aswift tags: trunk) | |
Changes
Changes to src/os_unix.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ****************************************************************************** ** ** This file contains code that is specific to Unix systems. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ****************************************************************************** ** ** This file contains code that is specific to Unix systems. ** ** $Id: os_unix.c,v 1.218 2008/11/21 00:24:42 drh Exp $ */ #include "sqliteInt.h" #if SQLITE_OS_UNIX /* This file is used on unix only */ /* ** If SQLITE_ENABLE_LOCKING_STYLE is defined and is non-zero, then several ** alternative locking implementations are provided: |
︙ | ︙ | |||
398 399 400 401 402 403 404 405 406 407 408 409 410 411 | ** List of all lockInfo and openCnt objects. This used to be a hash ** table. But the number of objects is rarely more than a dozen and ** never exceeds a few thousand. And lookup is not on a critical ** path oo a simple linked list will suffice. */ static struct lockInfo *lockList = 0; static struct openCnt *openList = 0; #if IS_VXWORKS /* ** This hash table is used to bind the canonical file name to a ** unixFile structure and use the hash key (= canonical name) ** instead of the Inode number of the file to find the matching ** lockInfo and openCnt structures. It also helps to make the | > > > > > > | 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 | ** List of all lockInfo and openCnt objects. This used to be a hash ** table. But the number of objects is rarely more than a dozen and ** never exceeds a few thousand. And lookup is not on a critical ** path oo a simple linked list will suffice. */ static struct lockInfo *lockList = 0; static struct openCnt *openList = 0; #ifdef SQLITE_TEST /* simulate multiple hosts by creating unique hostid file paths */ int sqlite3_hostid_num = 0; #endif #if IS_VXWORKS /* ** This hash table is used to bind the canonical file name to a ** unixFile structure and use the hash key (= canonical name) ** instead of the Inode number of the file to find the matching ** lockInfo and openCnt structures. It also helps to make the |
︙ | ︙ | |||
1103 1104 1105 1106 1107 1108 1109 | #elif defined(USE_PREAD64) got = pread64(id->h, pBuf, cnt, offset); SimulateIOError( got = -1 ); #else newOffset = lseek(id->h, offset, SEEK_SET); SimulateIOError( newOffset-- ); if( newOffset!=offset ){ | | | 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 | #elif defined(USE_PREAD64) got = pread64(id->h, pBuf, cnt, offset); SimulateIOError( got = -1 ); #else newOffset = lseek(id->h, offset, SEEK_SET); SimulateIOError( newOffset-- ); if( newOffset!=offset ){ if( newOffset == -1 ){ ((unixFile*)id)->lastErrno = errno; }else{ ((unixFile*)id)->lastErrno = 0; } return -1; } got = read(id->h, pBuf, cnt); |
︙ | ︙ | |||
1165 1166 1167 1168 1169 1170 1171 | #if defined(USE_PREAD) got = pwrite(id->h, pBuf, cnt, offset); #elif defined(USE_PREAD64) got = pwrite64(id->h, pBuf, cnt, offset); #else newOffset = lseek(id->h, offset, SEEK_SET); if( newOffset!=offset ){ | | | 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 | #if defined(USE_PREAD) got = pwrite(id->h, pBuf, cnt, offset); #elif defined(USE_PREAD64) got = pwrite64(id->h, pBuf, cnt, offset); #else newOffset = lseek(id->h, offset, SEEK_SET); if( newOffset!=offset ){ if( newOffset == -1 ){ ((unixFile*)id)->lastErrno = errno; }else{ ((unixFile*)id)->lastErrno = 0; } return -1; } got = write(id->h, pBuf, cnt); |
︙ | ︙ | |||
2899 2900 2901 2902 2903 2904 2905 | key[i] = (key[i]&0x80 == 0x80) ? pa=0x20 : pa+0x7E; } } #endif return SQLITE_OK; } | < < < < < | 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 | key[i] = (key[i]&0x80 == 0x80) ? pa=0x20 : pa+0x7E; } } #endif return SQLITE_OK; } /* writes the host id path to path, path should be an pre-allocated buffer ** with enough space for a path */ static int getHostIDPath(char *path, size_t len){ strlcpy(path, HOSTIDPATH, len); #ifdef SQLITE_TEST if( sqlite3_hostid_num>0 ){ char suffix[2] = "1"; |
︙ | ︙ | |||
3408 3409 3410 3411 3412 3413 3414 | }else{ *(const char **)pArg = ":auto: (not held)"; } } else { *(const char **)pArg = NULL; } #else | | | 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 | }else{ *(const char **)pArg = ":auto: (not held)"; } } else { *(const char **)pArg = NULL; } #else *(void**)pArg = NULL; #endif return SQLITE_OK; } case SQLITE_SET_LOCKPROXYFILE: { #if SQLITE_ENABLE_LOCKING_STYLE unixFile *pFile = (unixFile*)id; int rc = SQLITE_OK; |
︙ | ︙ | |||
3787 3788 3789 3790 3791 3792 3793 | "/tmp", ".", }; static const unsigned char zChars[] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; | | | 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 | "/tmp", ".", }; static const unsigned char zChars[] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; unsigned int i, j; struct stat buf; const char *zDir = "."; /* It's odd to simulate an io-error here, but really this is just ** using the io-error infrastructure to test that SQLite handles this ** function failing. */ |
︙ | ︙ | |||
3947 3948 3949 3950 3951 3952 3953 | } if( isDelete ){ #if IS_VXWORKS zPath = zName; #else unlink(zName); #endif | > > | | > | 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 | } if( isDelete ){ #if IS_VXWORKS zPath = zName; #else unlink(zName); #endif } #if SQLITE_ENABLE_LOCKING_STYLE else{ ((unixFile*)pFile)->oflags = oflags; } #endif if( pOutFlags ){ *pOutFlags = flags; } assert(fd!=0); if( isOpenDirectory ){ rc = openDirectory(zPath, &dirfd); |
︙ | ︙ |