modernc.org/cc@v1.0.1/v2/testdata/_sqlite/src/os_common.h (about)

     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  /*
    33  ** Macros for performance tracing.  Normally turned off.  Only works
    34  ** on i486 hardware.
    35  */
    36  #ifdef SQLITE_PERFORMANCE_TRACE
    37  
    38  /*
    39  ** hwtime.h contains inline assembler code for implementing
    40  ** high-performance timing routines.
    41  */
    42  #include "hwtime.h"
    43  
    44  static sqlite_uint64 g_start;
    45  static sqlite_uint64 g_elapsed;
    46  #define TIMER_START       g_start=sqlite3Hwtime()
    47  #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
    48  #define TIMER_ELAPSED     g_elapsed
    49  #else
    50  #define TIMER_START
    51  #define TIMER_END
    52  #define TIMER_ELAPSED     ((sqlite_uint64)0)
    53  #endif
    54  
    55  /*
    56  ** If we compile with the SQLITE_TEST macro set, then the following block
    57  ** of code will give us the ability to simulate a disk I/O error.  This
    58  ** is used for testing the I/O recovery logic.
    59  */
    60  #if defined(SQLITE_TEST)
    61  extern int sqlite3_io_error_hit;
    62  extern int sqlite3_io_error_hardhit;
    63  extern int sqlite3_io_error_pending;
    64  extern int sqlite3_io_error_persist;
    65  extern int sqlite3_io_error_benign;
    66  extern int sqlite3_diskfull_pending;
    67  extern int sqlite3_diskfull;
    68  #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
    69  #define SimulateIOError(CODE)  \
    70    if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
    71         || sqlite3_io_error_pending-- == 1 )  \
    72                { local_ioerr(); CODE; }
    73  static void local_ioerr(){
    74    IOTRACE(("IOERR\n"));
    75    sqlite3_io_error_hit++;
    76    if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
    77  }
    78  #define SimulateDiskfullError(CODE) \
    79     if( sqlite3_diskfull_pending ){ \
    80       if( sqlite3_diskfull_pending == 1 ){ \
    81         local_ioerr(); \
    82         sqlite3_diskfull = 1; \
    83         sqlite3_io_error_hit = 1; \
    84         CODE; \
    85       }else{ \
    86         sqlite3_diskfull_pending--; \
    87       } \
    88     }
    89  #else
    90  #define SimulateIOErrorBenign(X)
    91  #define SimulateIOError(A)
    92  #define SimulateDiskfullError(A)
    93  #endif /* defined(SQLITE_TEST) */
    94  
    95  /*
    96  ** When testing, keep a count of the number of open files.
    97  */
    98  #if defined(SQLITE_TEST)
    99  extern int sqlite3_open_file_count;
   100  #define OpenCounter(X)  sqlite3_open_file_count+=(X)
   101  #else
   102  #define OpenCounter(X)
   103  #endif /* defined(SQLITE_TEST) */
   104  
   105  #endif /* !defined(_OS_COMMON_H_) */