summaryrefslogtreecommitdiff
path: root/dist/brew/brew_db.in
blob: b6f7a9088c7508cc7e312519a8c228877c03a15c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*-
 * $Id$
 *
 * The following provides the information necessary to build Berkeley DB
 * on BREW.
 */

#include <AEEAppGen.h>
#include <AEEShell.h>
#include <AEEFile.h>
#include <AEEStdLib.h>

#include "errno.h"
#include "db.h"
#include "clib_port.h"

/*
 * BREW doesn't have stdio.
 */
#define	EOF	(-1)			/* Declare stdio's EOF. */
#define	stderr	((IFile *)1)		/* Flag to call DBGPRINTF. */
#define	stdout	((IFile *)1)

/*
 * POSIX time structure/function compatibility.
 *
 * !!!
 * This is likely wrong, we should probably move all Berkeley DB time-specific
 * functionality into os/.
 */
struct tm {
	int tm_sec;     /* seconds after the minute - [0,59] */
	int tm_min;     /* minutes after the hour - [0,59] */
	int tm_hour;    /* hours since midnight - [0,23] */
	int tm_mday;    /* day of the month - [1,31] */
	int tm_mon;     /* months since January - [0,11] */
	int tm_year;    /* years since 1900 */
	int tm_wday;    /* days since Sunday - [0,6] */
	int tm_yday;    /* days since January 1 - [0,365] */
	int tm_isdst;   /* daylight savings time flag */
	/*
	 * We don't provide tm_zone or tm_gmtoff because BREW doesn't
	 * provide them.
	 */
};

/*
* The ctime() function converts the time pointed to by clock, representing
* time in seconds since the Epoch to local time in the form of a string.
*
* Berkeley DB uses POSIX time values internally.
*
* The POSIX time function returns seconds since the Epoch, which was
* 1970/01/01 00:00:00 UTC.
*
* BREW's GETUTCSECONDS() returns the number of seconds since
* 1980/01/06 00:00:00 UTC.
*
* To convert from BREW to POSIX, add the seconds between 1970 and 1980 plus
* 6 more days.
*/
#define	BREW_EPOCH_OFFSET	(315964800L)

/*
 * Map ANSI C library functions to BREW specific APIs.
 */
#define	atoi(a)			ATOI(a)
#define	free(a)			FREE(a)
#define	malloc(a)		MALLOC(a)
#define	memcmp(a, b, c)		MEMCMP(a, b, c)
#define	memmove(a, b, c)	MEMMOVE(a, b, c)
#define	memset(a, b, c)		MEMSET(a, b, c)
#define	realloc(a, b)		REALLOC(a, b)
#define	snprintf		SNPRINTF
#define	sprintf			SPRINTF
#define	strcat(a, b)		STRCAT(a, b)
#define	strchr(a, b)		STRCHR(a, b)
#define	strcmp(a, b)		STRCMP(a, b)
#define	strcpy(a, b)		STRCPY(a, b)
#define	strdup(a)		STRDUP(a)
#define	strlen(a)		STRLEN(a)
#define	strncmp(a, b, c)	STRNCMP(a, b, c)
#define	strncpy(a, b, c)	STRNCPY(a, b, c)
#define	strrchr(a, b)		STRRCHR(a, b)
#define	strtoul(a, b, c)	STRTOUL(a, b, c)
#define	vsnprintf(a, b, c, d)	VSNPRINTF(a, b, c, d)

/*
 * !!!
 * Don't #define memcpy to MEMCPY, even though it exists, because that results
 * in a C pre-processor loop and compile failure.
 *
 * Don't #define memcpy to MEMMOVE directly, that results in failure as well.
 */
#define	memcpy			memmove

/*
 * BREW does not have concept of 'sync'.
 *
 * It depends on the implementation of the BREW on various platforms, but
 * Mobilus confirms the version of BREW that ships to North America in 3G
 * models has sync features guaranteeing safe physical writes whenever a
 * write is performed using BREW API. Therefore, the issue is not on the
 * applications running top of BREW, but the implementation of BREW itself
 * that has to be checked in order to provide durability.
 */
#define	__os_fsync(a, b)	(0)
#define	fflush(a)		(0)

/*
 * The ANSI C library functions for which we wrote local versions.
 */
int	   fclose(FILE *);
int	   fgetc(FILE *);
char	  *fgets(char *, int, FILE *);
FILE	  *fopen(const char *, const char *);
size_t	   fwrite(const void *, size_t, size_t, FILE *);
char	  *getcwd(char *, size_t);
struct tm *localtime(const time_t *);
time_t	   time(time_t *);

/*
 * FILE_MANAGER_CREATE --
 *	Instantiate file manager instance.
 */
#define	FILE_MANAGER_CREATE(dbenv, mgr, ret) do {			\
	AEEApplet *__app = (AEEApplet *)GETAPPINSTANCE();		\
	int __ret;							\
	if ((__ret = ISHELL_CreateInstance(__app->m_pIShell,		\
	    AEECLSID_FILEMGR, (void **)&(mgr))) == SUCCESS)		\
		ret = 0;						\
	else {								\
		__db_syserr(dbenv, __ret, "ISHELL_CreateInstance");	\
		ret = __os_posix_err(__ret);				\
	}								\
} while (0)

/*
 * FILE_MANAGER_ERR --
 *	Handle file manager method error.
 */
#define	FILE_MANAGER_ERR(dbenv, mgr, name, op, ret) do {		\
	int __ret;							\
	__ret = IFILEMGR_GetLastError(mgr);				\
	if ((name) == NULL)						\
		__db_syserr(dbenv, __ret, "%s", op);			\
	else								\
		__db_syserr(dbenv, __ret, "%s: %s", name, op);		\
	(ret) = __os_posix_err(__ret);					\
} while (0)