On Feb 1, 2009, at 7:34 AM, Maurí cio wrote:
> Hi,
>
> When building sqlite 3.6.10 amalgamation, I get
> a warning message saying:
>
> attention : ignoring return value of ‘write’, declared with
> attribute warn_unused_result
>
> /* On OS X on an msdos filesystem, the inode number is reported
> ** incorrectly for zero-size files. See ticket #3260. To work
> ** around this problem (we consider it a bug in OS X, not SQLite)
> ** we always increase the file size to 1 by writing a single byte
> ** prior to accessing the inode number. The one byte written is
> ** an ASCII 'S' character which also happens to be the first byte
> ** in the header of every SQLite database. In this way, if there
> ** is a race condition such that another thread has already
> populated
> ** the first page of the database, no damage is done.
> */
> if( statbuf.st_size==0 ){
> write(fd, "S", 1);
> rc = fstat(fd, &statbuf);
> if( rc!=0 ){
> pFile->lastErrno = errno;
> return SQLITE_IOERR;
> }
> }
>
This is a rare example of a case where a compiler warning was actually
helpful. We usually find that warnings from compilers and other
static analysis tools do not indicate real bugs. Sometimes, however,
in our efforts to remove compiler warnings so that people won't
complain, we make the warning go away by introducing real bugs into
the code. (For an example of this, see
http://www.sqlite.org/cvstrac/tktview?tn=3618)
We find in particular that some brands of compilers emit huge
numbers of silly and pointless warnings. (Let us not name specific
brands here.)
In this case, though, the compiler warning does point to a potential
problem, though the problem is very obscure. The problem can only
result on OSX when trying to create a new SQLite database on an MSDOS
filesystem where the filesystem is full. And even then, the problem
is likely to be detected later on in the process, so it is not at all
clear that this problem could ever impact an actual application. But
it seems worth fixing, all the same.
We'll probably put the whole block of code within #ifdef __APPLE__.
D. Richard Hipp
[email protected]
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users