⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_common.h

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 H
字号:
/*** 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.*//*** At least two bugs have slipped in because we changed the MEMORY_DEBUG** macro to SQLITE_DEBUG and some older makefiles have not yet made the** switch.  The following code should catch this problem at compile-time.*/#ifdef MEMORY_DEBUG# error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."#endif/* * When testing, this global variable stores the location of the * pending-byte in the database file. */#ifdef SQLITE_TESTunsigned int sqlite3_pending_byte = 0x40000000;#endifint sqlite3_os_trace = 0;#ifdef SQLITE_DEBUG#define OSTRACE1(X)         if( sqlite3_os_trace ) sqlite3DebugPrintf(X)#define OSTRACE2(X,Y)       if( sqlite3_os_trace ) sqlite3DebugPrintf(X,Y)#define OSTRACE3(X,Y,Z)     if( sqlite3_os_trace ) sqlite3DebugPrintf(X,Y,Z)#define OSTRACE4(X,Y,Z,A)   if( sqlite3_os_trace ) sqlite3DebugPrintf(X,Y,Z,A)#define OSTRACE5(X,Y,Z,A,B) if( sqlite3_os_trace ) sqlite3DebugPrintf(X,Y,Z,A,B)#define OSTRACE6(X,Y,Z,A,B,C) \    if(sqlite3_os_trace) sqlite3DebugPrintf(X,Y,Z,A,B,C)#define OSTRACE7(X,Y,Z,A,B,C,D) \    if(sqlite3_os_trace) sqlite3DebugPrintf(X,Y,Z,A,B,C,D)#else#define OSTRACE1(X)#define OSTRACE2(X,Y)#define OSTRACE3(X,Y,Z)#define OSTRACE4(X,Y,Z,A)#define OSTRACE5(X,Y,Z,A,B)#define OSTRACE6(X,Y,Z,A,B,C)#define OSTRACE7(X,Y,Z,A,B,C,D)#endif/*** Macros for performance tracing.  Normally turned off.  Only works** on i486 hardware.*/#ifdef SQLITE_PERFORMANCE_TRACE__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 TIMER_ELAPSED     elapse#else#define TIMER_START#define TIMER_END#define TIMER_ELAPSED     0#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_TESTint sqlite3_io_error_hit = 0;int sqlite3_io_error_pending = 0;int sqlite3_io_error_persist = 0;int sqlite3_diskfull_pending = 0;int sqlite3_diskfull = 0;#define SimulateIOError(CODE)  \  if( sqlite3_io_error_pending || sqlite3_io_error_hit ) \     if( sqlite3_io_error_pending-- == 1 \         || (sqlite3_io_error_persist && sqlite3_io_error_hit) ) \                { local_ioerr(); CODE; }static void local_ioerr(){  IOTRACE(("IOERR\n"));  sqlite3_io_error_hit = 1;}#define SimulateDiskfullError(CODE) \   if( sqlite3_diskfull_pending ){ \     if( sqlite3_diskfull_pending == 1 ){ \       local_ioerr(); \       sqlite3_diskfull = 1; \       sqlite3_io_error_hit = 1; \       CODE; \     }else{ \       sqlite3_diskfull_pending--; \     } \   }#else#define SimulateIOError(A)#define SimulateDiskfullError(A)#endif/*** When testing, keep a count of the number of open files.*/#ifdef SQLITE_TESTint sqlite3_open_file_count = 0;#define OpenCounter(X)  sqlite3_open_file_count+=(X)#else#define OpenCounter(X)#endif/*** sqlite3GenericMalloc** sqlite3GenericRealloc** sqlite3GenericOsFree** sqlite3GenericAllocationSize**** Implementation of the os level dynamic memory allocation interface in terms** of the standard malloc(), realloc() and free() found in many operating** systems. No rocket science here.**** There are two versions of these four functions here. The version** implemented here is only used if memory-management or memory-debugging is** enabled. This version allocates an extra 8-bytes at the beginning of each** block and stores the size of the allocation there.**** If neither memory-management or debugging is enabled, the second** set of implementations is used instead.*/#if defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) || defined (SQLITE_MEMDEBUG)void *sqlite3GenericMalloc(int n){  char *p = (char *)malloc(n+8);  assert(n>0);  assert(sizeof(int)<=8);  if( p ){    *(int *)p = n;    p += 8;  }  return (void *)p;}void *sqlite3GenericRealloc(void *p, int n){  char *p2 = ((char *)p - 8);  assert(n>0);  p2 = (char*)realloc(p2, n+8);  if( p2 ){    *(int *)p2 = n;    p2 += 8;  }  return (void *)p2;}void sqlite3GenericFree(void *p){  assert(p);  free((void *)((char *)p - 8));}int sqlite3GenericAllocationSize(void *p){  return p ? *(int *)((char *)p - 8) : 0;}#elsevoid *sqlite3GenericMalloc(int n){  char *p = (char *)malloc(n);  return (void *)p;}void *sqlite3GenericRealloc(void *p, int n){  assert(n>0);  p = realloc(p, n);  return p;}void sqlite3GenericFree(void *p){  assert(p);  free(p);}/* Never actually used, but needed for the linker */int sqlite3GenericAllocationSize(void *p){ return 0; }#endif/*** The default size of a disk sector*/#ifndef PAGER_SECTOR_SIZE# define PAGER_SECTOR_SIZE 512#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -