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 <sami...@ra.rockwell.com>

> 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/sqlite-users@sqlite.org/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
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to