Hello Scott,
Below is my patch on the latest SQLite 3.7.3. Please notice that I only
verify it with GCC 4.1.2 compiler in VxWorks 6.6/6.7/6.8(I have not verify
it with my real target machine yet).
*** sqlite3.c.orig 2010-10-08 10:42:22.000000000 +0800
--- sqlite3.c 2010-10-08 19:24:18.390625000 +0800
***************
*** 17,22 ****
--- 17,26 ----
** language. The code for the "sqlite3" command-line shell is also in a
** separate file. This file contains only code for the core SQLite
library.
*/
+ #if defined(OS_VXWORKS)
+ #include <vxWorks.h>
+ #endif /* OS_VXWORKS */
+
#define SQLITE_CORE 1
#define SQLITE_AMALGAMATION 1
#ifndef SQLITE_PRIVATE
***************
*** 22795,22801 ****
--- 22799,22811 ----
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
+
+ #if defined(OS_VXWORKS) && defined(_WRS_KERNEL)
+ #include <sys/times.h>
+ #else
#include <sys/time.h>
+ #endif /* OS_VXWORKS */
+
#include <errno.h>
#include <sys/mman.h>
***************
*** 24945,24951 ****
--- 24955,24965 ----
/*
** Close a file.
*/
+ #if (OS_VXWORKS < 600)
static int semClose(sqlite3_file *id) {
+ #else
+ static int semClose_native(sqlite3_file *id) {
+ #endif
if( id ){
unixFile *pFile = (unixFile*)id;
semUnlock(id, NO_LOCK);
***************
*** 25581,25587 ****
--- 25595,25607 ----
}
return -1;
}
+
+ #if defined(OS_VXWORKS) && defined(_WRS_KERNEL)
+ got = write(id->h, (char *)pBuf, cnt);
+ #else
got = write(id->h, pBuf, cnt);
+ #endif /* OS_VXWORKS */
+
#endif
TIMER_END;
if( got<0 ){
***************
*** 26762,26768 ****
--- 26782,26792 ----
semIoFinder, /* Finder function name */
semIoMethods, /* sqlite3_io_methods object name */
1, /* shared memory is disabled */
+ #if (OS_VXWORKS < 600)
semClose, /* xClose method */
+ #else
+ semClose_native, /* xClose method */
+ #endif
semLock, /* xLock method */
semUnlock, /* xUnlock method */
semCheckReservedLock /* xCheckReservedLock method */
***************
*** 27517,27523 ****
noLock = eType!=SQLITE_OPEN_MAIN_DB;
! #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
struct statfs fsInfo;
if( fstatfs(fd, &fsInfo) == -1 ){
((unixFile*)pFile)->lastErrno = errno;
--- 27541,27547 ----
noLock = eType!=SQLITE_OPEN_MAIN_DB;
! #if (defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE) &&
!defined(OS_VXWORKS)
struct statfs fsInfo;
if( fstatfs(fd, &fsInfo) == -1 ){
((unixFile*)pFile)->lastErrno = errno;
***************
*** 27530,27536 ****
}
#endif
! #if SQLITE_ENABLE_LOCKING_STYLE
#if SQLITE_PREFER_PROXY_LOCKING
isAutoProxy = 1;
#endif
--- 27554,27560 ----
}
#endif
! #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
#if SQLITE_PREFER_PROXY_LOCKING
isAutoProxy = 1;
#endif
***************
*** 27793,27799 ****
** tests repeatable.
*/
memset(zBuf, 0, nBuf);
! #if !defined(SQLITE_TEST)
{
int pid, fd;
fd = open("/dev/urandom", O_RDONLY);
--- 27817,27823 ----
** tests repeatable.
*/
memset(zBuf, 0, nBuf);
! #if !defined(SQLITE_TEST) && !defined(OS_VXWORKS)
{
int pid, fd;
fd = open("/dev/urandom", O_RDONLY);
I'v used definitions as below:
EXTRA_DEFINE += -DOS_VXWORKS_660=660
EXTRA_DEFINE += -DOS_VXWORKS_670=670
EXTRA_DEFINE += -DOS_VXWORKS_680=680
EXTRA_DEFINE += -DOS_VXWORKS=OS_VXWORKS_670
EXTRA_DEFINE += -DSQLITE_HOMEGROWN_RECURSIVE_MUTEX
EXTRA_DEFINE += -DSQLITE_ENABLE_LOCKING_STYLE=1
EXTRA_DEFINE += -DSQLITE_OMIT_LOAD_EXTENSION
Best Regards,
Huang Zhihua
2010/10/8 Scott A Mintz <[email protected]>
> I searched through all the mail archives to see if I could find someone
> that has ported SQLite to vxWorks in kernel mode. Apparently, there are a
> few folks attempting it. And fewer succeeding at it.
>
> I found an article published by ZhiHua Huang where he describes the mods
> he made to port SQLite 3.6.23.1 to vxWorks 6.5
> http://www.mail-archive.com/[email protected]/msg51531.html
>
> Using that as a starting point, I modified my files but I get the
> following errors:
> "C:/CCViews/Mintz_NetlinxUCS_L7x/NetLinxUCS/SQLite3_LIB/sqlite3.c", line
> 27262: error (dcc:1633): parse error near 'struct'
> "C:/CCViews/Mintz_NetlinxUCS_L7x/NetLinxUCS/SQLite3_LIB/sqlite3.c", line
> 27262: error (dcc:1206): syntax error
> "C:/CCViews/Mintz_NetlinxUCS_L7x/NetLinxUCS/SQLite3_LIB/sqlite3.c", line
> 27262: fatal error (dcc:1340): can't recover from earlier errors
>
> This is the code it's complaining about. The "struct statfs fsInfo;" line
> is line 27262.
>
> #ifdef FD_CLOEXEC
> fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
> #endif
>
> noLock = eType!=SQLITE_OPEN_MAIN_DB;
>
>
> #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
> struct statfs fsInfo;
> if( fstatfs(fd, &fsInfo) == -1 ){
> ((unixFile*)pFile)->lastErrno = errno;
> if( dirfd>=0 ) close(dirfd); /* silently leak if fail, in error */
> close(fd); /* silently leak if fail, in error */
> return SQLITE_IOERR_ACCESS;
> }
> if (0 == strncmp("msdos", fsInfo.f_fstypename, 5)) {
> ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS;
> }
> #endif
>
> Any ideas?
>
> -Scott
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users