Annotation of embedaddon/sqlite3/src/os_common.h, revision 1.1.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>