source: sqlite3_toppers/sqlite3/sqlite3_toppers.c@ 58

Last change on this file since 58 was 58, checked in by ertl-honda, 11 years ago

追加.

  • Property svn:keywords set to Id
File size: 7.0 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2013 by Kijineko Inc.
6 * Copyright (C) 2013 by Embedded and Real-Time Systems Laboratory
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 *
9 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * スコード中に含まれていること.
15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * の無保証規定を掲載すること.
19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
20 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
21 * と.
22 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
23 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
24 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
25 * 報告すること.
26 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
27 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
28 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
29 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
30 * 免責すること.
31 *
32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
36 * の責任を負わない.
37 *
38 * $Id: sqlite3_toppers.c 58 2013-04-12 00:36:18Z ertl-honda $
39 */
40
41/*
42 * 以下のマクロは必要に応じて定義してもしなくてもよい
43 */
44/* #define SQLITE_OMIT_DEPRECATED 1 // 非推奨のAPIを省略する */
45/* #define SQLITE_OMIT_FLOATING_POINT 1 // 浮動小数点数を64ビット整数で代用 */
46#define NO_GETTOD 1 /* gettimeofday関数が無い */
47
48/*
49 * TOPPERS/ASPカーネルで動作させるための定義
50 */
51#define SQLITE_OS_UNIX 1 /* UNIX用のコードを使用 */
52#define SQLITE_DISABLE_LFS 1 /* 2GBを越えるファイルは扱わない */
53#define SQLITE_HOMEGROWN_RECURSIVE_MUTEX 1 /* 再帰的なミューテックスはOSではなくSQLiteの実装を使う */
54#define SQLITE_OMIT_WAL 1 /* mmapによるメモリマップドファイルを使わない */
55#define SQLITE_OMIT_LOAD_EXTENSION 1 /* 共有ライブラリのダイナミックローディングを用いた機能を使用しない */
56#define SQLITE_OMIT_AUTHORIZATION 1 /* AUTHORIZATION機能を使わない */
57#define SQLITE_UNIX_THREADS 1 /* UNIXのスレッドを使用 */
58#define SQLITE_THREADSAFE 1 /* スレッドセーフに */
59
60/* pthread.hの宣言・定義を適切なものにするため定義 */
61#define _POSIX_THREADS 1
62#define _UNIX98_THREAD_MUTEX_ATTRIBUTES 1
63
64#include <sys/types.h>
65#include <sys/stat.h>
66#include <sys/time.h>
67#include <pthread.h>
68#include <errno.h>
69#include <limits.h>
70
71#pragma GCC diagnostic ignored "-Wunused-value"
72#pragma GCC diagnostic ignored "-Wunused-variable"
73#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
74#pragma GCC diagnostic ignored "-Wunused-function"
75
76#ifndef TOPPERS_SQLITE_OMIT_DEFAULT_SYSCALL
77#include <t_stddef.h>
78#include <syssvc/serial.h>
79int open(const char *file, int flags, ...) { return -1; }
80int close(int fd) { return -1; }
81off_t lseek(int __fildes, off_t __offset, int __whence ) { return -1; };
82int kill(pid_t pid, int sig) { return -1; };
83int getpid(void) { return -1; };
84int access(const char *file, int mode) { return -1; }
85char *getcwd(char *s, size_t n) { return NULL; }
86int stat(const char *file, struct stat* pstat) { return -1; }
87int fstat(int fd, struct stat* pstat) { return -1; }
88int ftruncate(int fd, off_t pos) { return -1; }
89int fcntrl(int fd, int cmd, ...) { return -1; }
90ssize_t read(int fd, void *buf, size_t n) { return -1; }
91ssize_t write(int fd, const void *buf, size_t n)
92{
93 if (fd == 1 || fd == 2)
94 return serial_wri_dat(1, buf, n);
95 return -1;
96}
97int fchmod(int fd, mode_t mode) { return -1; }
98int unlink(const char *file) { return -1; }
99int mkdir(const char *dir, mode_t mode) { return -1; }
100int rmdir(const char *dir) { return -1; }
101int fchown(int fd, uid_t uid, gid_t gid) { return -1; }
102mode_t umask(mode_t mode) { return 022; }
103#endif /* TOPPERS_SQLITE_OMIT_DEFAULT_SYSCALL */
104
105#include <kernel.h>
106#include "kernel_cfg.h"
107
108#if NO_GETTOD && !defined(TOPPERS_SQLITE_OMIT_DEFAULT_TIME)
109
110time_t time(time_t *timer)
111{
112 if (timer != NULL)
113 *timer = (time_t)-1;
114 return (time_t)-1;
115}
116
117#endif /* NO_GETTOD && !defined(TOPPERS_SQLITE_OMIT_DEFAULT_TIME) */
118
119#if SQLITE_UNIX_THREADS && !defined(TOPPERS_SQLITE_OMIT_DEFAULT_PTHREAD)
120
121pthread_t pthread_self(void)
122{
123 ID tskid = 0;
124 get_tid(&tskid);
125 return (pthread_t)tskid;
126}
127
128int pthread_equal(pthread_t lhs, pthread_t rhs)
129{
130 if (lhs < 1 || TNUM_TSKID < lhs)
131 return 0;
132 return lhs == rhs;
133}
134
135static ID sqlite3_toppers_mutexes[] =
136{
137 SQLITE_SEMID1,
138 SQLITE_SEMID2,
139 SQLITE_SEMID3,
140 SQLITE_SEMID4,
141 SQLITE_SEMID5,
142 SQLITE_SEMID6,
143};
144
145int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
146{
147 size_t i;
148 for (i = 0; i < sizeof(sqlite3_toppers_mutexes) / sizeof(sqlite3_toppers_mutexes[0]); i++)
149 {
150 if (sqlite3_toppers_mutexes[i] != 0)
151 {
152 *mutex = sqlite3_toppers_mutexes[i];
153 sqlite3_toppers_mutexes[i] = 0;
154 return 0;
155 }
156 }
157 return -1;
158}
159
160int pthread_mutex_lock(pthread_mutex_t *mutex)
161{
162 ER er;
163 if (*mutex == (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER)
164 pthread_mutex_init(mutex, NULL);
165 er = wai_sem((ID)*mutex);
166 if (MERCD(er) == E_ID)
167 errno = EINVAL;
168 return er;
169}
170
171int pthread_mutex_trylock(pthread_mutex_t *mutex)
172{
173 ER er;
174 if (*mutex == (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER)
175 pthread_mutex_init(mutex, NULL);
176 er = pol_sem((ID)*mutex);
177 switch (MERCD(er))
178 {
179 case E_ID:
180 errno = EINVAL;
181 break;
182 case E_TMOUT:
183 errno = EBUSY;
184 break;
185 }
186 return er;
187}
188
189int pthread_mutex_unlock(pthread_mutex_t *mutex)
190{
191 ER er = sig_sem((ID)*mutex);
192 if (MERCD(er) == E_ID)
193 errno = EINVAL;
194 return er;
195}
196
197int pthread_mutex_destroy(pthread_mutex_t *mutex)
198{
199 size_t i;
200 for (i = 0; i < sizeof(sqlite3_toppers_mutexes) / sizeof(sqlite3_toppers_mutexes[0]); i++)
201 {
202 if (sqlite3_toppers_mutexes[i] == 0)
203 {
204 sqlite3_toppers_mutexes[i] = *mutex;
205 ini_sem(*mutex);
206 *mutex = 0;
207 return 0;
208 }
209 }
210
211 return -1;
212}
213
214#endif /* SQLITE_UNIX_THREADS && !defined(TOPPERS_SQLITE_OMIT_DEFAULT_PTHREAD) */
215
216uid_t getuid(void)
217{
218 return 10000;
219}
220
221uid_t geteuid(void)
222{
223 return 10000;
224}
225
226unsigned int sleep(unsigned int t)
227{
228 SYSTIM t1, t2;
229
230 get_tim(&t1);
231 if (dly_tsk(t * 1000) != E_OK)
232 {
233 get_tim(&t2);
234 return (t - (t2 - t1) + 999) / 1000;
235 }
236 return 0;
237}
238
239int utimes(const char *filename, const struct timeval times[2])
240{
241 return -1;
242}
243
244int fsync(int fd)
245{
246 return -1;
247}
248
249/* SQLite本体 */
250#include "sqlite3.c"
251
Note: See TracBrowser for help on using the repository browser.