e54ca3fe2e
FossilOrigin-Name: 4f7c0961ad6cb7082bf7716f0c7ca16a8742c039
83 lines
2.3 KiB
C
83 lines
2.3 KiB
C
/*
|
|
** 2004 May 22
|
|
**
|
|
** The author disclaims copyright to this source code. In place of
|
|
** a legal notice, here is a blessing:
|
|
**
|
|
** May you do good and not evil.
|
|
** May you find forgiveness for yourself and forgive others.
|
|
** May you share freely, never taking more than you give.
|
|
**
|
|
******************************************************************************
|
|
**
|
|
** This file contains macros and a little bit of code that is common to
|
|
** all of the platform-specific files (os_*.c) and is #included into those
|
|
** files.
|
|
**
|
|
** This file should be #included by the os_*.c files only. It is not a
|
|
** general purpose header file.
|
|
*/
|
|
|
|
|
|
/*
|
|
** Macros for performance tracing. Normally turned off. Only works
|
|
** on i486 hardware.
|
|
*/
|
|
#if 0
|
|
static int last_page = 0;
|
|
__inline__ unsigned long long int hwtime(void){
|
|
unsigned long long int x;
|
|
__asm__("rdtsc\n\t"
|
|
"mov %%edx, %%ecx\n\t"
|
|
:"=A" (x));
|
|
return x;
|
|
}
|
|
static unsigned long long int g_start;
|
|
static unsigned int elapse;
|
|
#define TIMER_START g_start=hwtime()
|
|
#define TIMER_END elapse=hwtime()-g_start
|
|
#define SEEK(X) last_page=(X)
|
|
#define TRACE1(X) sqlite3DebugPrintf(X)
|
|
#define TRACE2(X,Y) sqlite3DebugPrintf(X,Y)
|
|
#define TRACE3(X,Y,Z) sqlite3DebugPrintf(X,Y,Z)
|
|
#define TRACE4(X,Y,Z,A) sqlite3DebugPrintf(X,Y,Z,A)
|
|
#define TRACE5(X,Y,Z,A,B) sqlite3DebugPrintf(X,Y,Z,A,B)
|
|
#else
|
|
#define TIMER_START
|
|
#define TIMER_END
|
|
#define SEEK(X)
|
|
#define TRACE1(X)
|
|
#define TRACE2(X,Y)
|
|
#define TRACE3(X,Y,Z)
|
|
#define TRACE4(X,Y,Z,A)
|
|
#define TRACE5(X,Y,Z,A,B)
|
|
#endif
|
|
|
|
|
|
/*
|
|
** If we compile with the SQLITE_TEST macro set, then the following block
|
|
** of code will give us the ability to simulate a disk I/O error. This
|
|
** is used for testing the I/O recovery logic.
|
|
*/
|
|
#ifdef SQLITE_TEST
|
|
int sqlite3_io_error_pending = 0;
|
|
#define SimulateIOError(A) \
|
|
if( sqlite3_io_error_pending ) \
|
|
if( sqlite3_io_error_pending-- == 1 ){ local_ioerr(); return A; }
|
|
static void local_ioerr(){
|
|
sqlite3_io_error_pending = 0; /* Really just a place to set a breakpoint */
|
|
}
|
|
#else
|
|
#define SimulateIOError(A)
|
|
#endif
|
|
|
|
/*
|
|
** When testing, keep a count of the number of open files.
|
|
*/
|
|
#ifdef SQLITE_TEST
|
|
int sqlite3_open_file_count = 0;
|
|
#define OpenCounter(X) sqlite3_open_file_count+=(X)
|
|
#else
|
|
#define OpenCounter(X)
|
|
#endif
|