Ok it's not really a bug; it's just a compiler warning. I get this warning
when compiling the amalgamation:
gcc -Os -Wall -DFOSSIL_I18N=0 -L/mingw/lib -I/mingw/include -I. -I./src
-DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0
-DSQLITE_DEFAULT_FILE_FORMAT=4 -Dlocaltime=fossil_localtime -c
./src/sqlite3.c -o sqlite3.o
./src/sqlite3.c: In function `getLastErrorMsg':
./src/sqlite3.c:28450: warning: dereferencing type-punned pointer will break
strict-aliasing rules
I think the change set below resolves the warning without introducing
another bug. I could use a code review.
PS C:\rev\src\sqlite3\src> fossil info
project-name: SQLite
repository: c:\rev\fossil\sqlite3.f
local-root: C:/rev/src/sqlite3/
user-home: : C:/Users/rev/AppData/Local
project-code: 2ab58778c2967968b94284e989e43dc11791f548
server-code: 2fa7c8b2762294d28396292f74c7b94c9c50af75
checkout: a2b1183d9e9898d06d623b342bbb552e85a9b3f6 2010-01-11 12:00:48
UTC
parent: 14dc46a74aafe44c0bf7dffd26268395b2c5edb2 2010-01-09 07:33:54
UTC
tags: trunk
PS C:\rev\src\sqlite3\src> fossil diff os_win.c
--- os_win.c
+++ os_win.c
@@ -1253,25 +1253,29 @@
** buffer, excluding the terminating null char.
*/
DWORD error = GetLastError();
DWORD dwLen = 0;
char *zOut = 0;
+ union {
+ WCHAR** pzwc;
+ LPWSTR lpws;
+ } wu;
if( isNT() ){
- WCHAR *zTempWide = NULL;
+ *wu.pzwc = NULL;
dwLen = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
error,
0,
- (LPWSTR) &zTempWide,
+ wu.lpws,
0,
0);
if( dwLen > 0 ){
/* allocate a buffer and convert to UTF8 */
- zOut = unicodeToUtf8(zTempWide);
+ zOut = unicodeToUtf8(*wu.pzwc);
/* free the system buffer allocated by FormatMessage */
- LocalFree(zTempWide);
+ LocalFree(*wu.pzwc);
}
/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
** Since the ASCII version of these Windows API do not exist for WINCE,
** it's important to not reference them for WINCE builds.
*/
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users