Annotation of embedaddon/sqlite3/src/os_common.h, revision 1.1
1.1 ! misho 1: /*
! 2: ** 2004 May 22
! 3: **
! 4: ** The author disclaims copyright to this source code. In place of
! 5: ** a legal notice, here is a blessing:
! 6: **
! 7: ** May you do good and not evil.
! 8: ** May you find forgiveness for yourself and forgive others.
! 9: ** May you share freely, never taking more than you give.
! 10: **
! 11: ******************************************************************************
! 12: **
! 13: ** This file contains macros and a little bit of code that is common to
! 14: ** all of the platform-specific files (os_*.c) and is #included into those
! 15: ** files.
! 16: **
! 17: ** This file should be #included by the os_*.c files only. It is not a
! 18: ** general purpose header file.
! 19: */
! 20: #ifndef _OS_COMMON_H_
! 21: #define _OS_COMMON_H_
! 22:
! 23: /*
! 24: ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
! 25: ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
! 26: ** switch. The following code should catch this problem at compile-time.
! 27: */
! 28: #ifdef MEMORY_DEBUG
! 29: # error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
! 30: #endif
! 31:
! 32: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
! 33: # ifndef SQLITE_DEBUG_OS_TRACE
! 34: # define SQLITE_DEBUG_OS_TRACE 0
! 35: # endif
! 36: int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
! 37: # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
! 38: #else
! 39: # define OSTRACE(X)
! 40: #endif
! 41:
! 42: /*
! 43: ** Macros for performance tracing. Normally turned off. Only works
! 44: ** on i486 hardware.
! 45: */
! 46: #ifdef SQLITE_PERFORMANCE_TRACE
! 47:
! 48: /*
! 49: ** hwtime.h contains inline assembler code for implementing
! 50: ** high-performance timing routines.
! 51: */
! 52: #include "hwtime.h"
! 53:
! 54: static sqlite_uint64 g_start;
! 55: static sqlite_uint64 g_elapsed;
! 56: #define TIMER_START g_start=sqlite3Hwtime()
! 57: #define TIMER_END g_elapsed=sqlite3Hwtime()-g_start
! 58: #define TIMER_ELAPSED g_elapsed
! 59: #else
! 60: #define TIMER_START
! 61: #define TIMER_END
! 62: #define TIMER_ELAPSED ((sqlite_uint64)0)
! 63: #endif
! 64:
! 65: /*
! 66: ** If we compile with the SQLITE_TEST macro set, then the following block
! 67: ** of code will give us the ability to simulate a disk I/O error. This
! 68: ** is used for testing the I/O recovery logic.
! 69: */
! 70: #ifdef SQLITE_TEST
! 71: int sqlite3_io_error_hit = 0; /* Total number of I/O Errors */
! 72: int sqlite3_io_error_hardhit = 0; /* Number of non-benign errors */
! 73: int sqlite3_io_error_pending = 0; /* Count down to first I/O error */
! 74: int sqlite3_io_error_persist = 0; /* True if I/O errors persist */
! 75: int sqlite3_io_error_benign = 0; /* True if errors are benign */
! 76: int sqlite3_diskfull_pending = 0;
! 77: int sqlite3_diskfull = 0;
! 78: #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
! 79: #define SimulateIOError(CODE) \
! 80: if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
! 81: || sqlite3_io_error_pending-- == 1 ) \
! 82: { local_ioerr(); CODE; }
! 83: static void local_ioerr(){
! 84: IOTRACE(("IOERR\n"));
! 85: sqlite3_io_error_hit++;
! 86: if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
! 87: }
! 88: #define SimulateDiskfullError(CODE) \
! 89: if( sqlite3_diskfull_pending ){ \
! 90: if( sqlite3_diskfull_pending == 1 ){ \
! 91: local_ioerr(); \
! 92: sqlite3_diskfull = 1; \
! 93: sqlite3_io_error_hit = 1; \
! 94: CODE; \
! 95: }else{ \
! 96: sqlite3_diskfull_pending--; \
! 97: } \
! 98: }
! 99: #else
! 100: #define SimulateIOErrorBenign(X)
! 101: #define SimulateIOError(A)
! 102: #define SimulateDiskfullError(A)
! 103: #endif
! 104:
! 105: /*
! 106: ** When testing, keep a count of the number of open files.
! 107: */
! 108: #ifdef SQLITE_TEST
! 109: int sqlite3_open_file_count = 0;
! 110: #define OpenCounter(X) sqlite3_open_file_count+=(X)
! 111: #else
! 112: #define OpenCounter(X)
! 113: #endif
! 114:
! 115: #endif /* !defined(_OS_COMMON_H_) */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>