984 static int asyncOpen(
985 sqlite3_vfs *pAsyncVfs,
--->986 const char *zName,
987 sqlite3_file *pFile,
988 int flags,
989 int *pOutFlags
990 ){
...
-->1009 int nName = strlen(zName)+1;
...
1016 nByte = (
1017 sizeof(AsyncFileData) + /* AsyncFileData structure */
1018 2 * pVfs->szOsFile + /* AsyncFileData.pBaseRead and
pBaseWrite */
1019 nName /* AsyncFileData.zName */
1020 );
1021 pData = sqlite3_malloc(nByte);
1022 if( !pData ){
1023 return SQLITE_NOMEM;
1024 }
1025 memset(pData, 0, nByte);
1026 pData->zName = (char *)&pData[1];
1027 pData->nName = nName;
-->1028 pData->pBaseRead = (sqlite3_file *)&pData->zName[nName];
-->1029 pData->pBaseWrite = (sqlite3_file
*)&pData->zName[nName+pVfs->szOsFile];
1030 pData->close.pFileData = pData;
1031 pData->close.op = ASYNC_CLOSE;
1032 memcpy(pData->zName, zName, nName);
nName is strlen(zName)+1, so pData->pBaseRead depends on the length of
zName, but pData->pBaseRead has to be aligned.
zName is always $(/bin/pwd)/test.db, I think.
So gmake fulltest will pass or fail depending on the length of the
absolute path of the current directory.
Those casts will get you!
Also, the test suite uses private interfaces. That's fine, but it
prevents testing a shared libsqlite3 built from the amalgamation (or
built with a modified Makefile that provides a mapfile to effect symbol
scope reduction).
BTW, the amalgamation + SQLITE_PRIVATE is a brilliantly portable way to
get symbol scope reduction for private interfaces. Hats off.
(Of course, on Solaris the "Right Way" (tm) to do symbol scope reduction
is to use a mapfile. But that's another story.)
Nico
--
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users