亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? os.c

?? sqlite源碼wince移植版
?? C
?? 第 1 頁 / 共 5 頁
字號:
        if( isNT() ){          UnlockFile(id->h, FIRST_LOCKBYTE+1, 0, N_LOCKBYTE, 0);        }else{          res = UnlockFile(id->h, FIRST_LOCKBYTE + id->locked, 0, 1, 0);        }      }      if( res ){        res = LockFile(id->h, FIRST_LOCKBYTE+1, 0, N_LOCKBYTE, 0);      }else{        res = 0;      }      UnlockFile(id->h, FIRST_LOCKBYTE, 0, 1, 0);    }    if( res ){      id->locked = -1;      rc = SQLITE_OK;    }else{      rc = SQLITE_BUSY;    }  }  return rc;# else  int decCount = 0;  // if already write locked, return success  if ( id->locked < 0 )     return SQLITE_OK;  // If file not shared, always success  if ( id->hMux == 0 )  {    id->locked = -1;    return SQLITE_OK;  }#  ifndef SQLITE_WCE_OMIT_FILELOCK  // Lock file for all processes  if ( ! wceport_LockFileMutex(id->hMux) )    return SQLITE_BUSY;  // If I have a read-lock, release lock  if ( id->locked > 0 && sqliteOsUnlock(id) != SQLITE_OK )  {    ReleaseSemaphore( id->hSem, 1, NULL );    id->locked = 0;  }  // try to decrement semaphore to non-signaled state  decCount = id->locked > 0 ? MAX_FILE_READERS - 1 : MAX_FILE_READERS;  if ( ! wceport_DecrementSemaphoreN(id->hSem,decCount) )  {	// Someone is locking the file (reader or writer)    ReleaseMutex( id->hMux );    return SQLITE_BUSY;  }  // success  id->locked = -1;  ReleaseMutex( id->hMux );#  else // SQLITE_OMIT_FILELOCK  id->locked = -1;#  endif  return SQLITE_OK;# endif#endif#if OS_MAC  int rc;  if( id->locked<0 || id->refNumRF == -1 ){    rc = SQLITE_OK;  }else{    OSErr res;    int cnt = 5;    ParamBlockRec params;    memset(&params, 0, sizeof(params));    params.ioParam.ioRefNum = id->refNumRF;    params.ioParam.ioPosMode = fsFromStart;    params.ioParam.ioPosOffset = FIRST_LOCKBYTE;    params.ioParam.ioReqCount = 1;    while( cnt-->0 && (res = PBLockRangeSync(&params))!=noErr ){      UInt32 finalTicks;      Delay(1, &finalTicks); /* 1/60 sec */    }    if( res == noErr ){      params.ioParam.ioPosOffset = FIRST_LOCKBYTE + id->locked;      params.ioParam.ioReqCount = 1;      if( id->locked==0             || PBUnlockRangeSync(&params)==noErr ){        params.ioParam.ioPosOffset = FIRST_LOCKBYTE+1;        params.ioParam.ioReqCount = N_LOCKBYTE;        res = PBLockRangeSync(&params);      }else{        res = afpRangeNotLocked;      }      params.ioParam.ioPosOffset = FIRST_LOCKBYTE;      params.ioParam.ioReqCount = 1;      PBUnlockRangeSync(&params);    }    if( res == noErr ){      id->locked = -1;      rc = SQLITE_OK;    }else{      rc = SQLITE_BUSY;    }  }  return rc;#endif}/*** Unlock the given file descriptor.  If the file descriptor was** not previously locked, then this routine is a no-op.  If this** library was compiled with large file support (LFS) but LFS is not** available on the host, then an SQLITE_NOLFS is returned.*/int sqliteOsUnlock(OsFile *id){#if OS_UNIX  int rc;  if( !id->locked ) return SQLITE_OK;  sqliteOsEnterMutex();  assert( id->pLock->cnt!=0 );  if( id->pLock->cnt>1 ){    id->pLock->cnt--;    rc = SQLITE_OK;  }else{    struct flock lock;    int s;    lock.l_type = F_UNLCK;    lock.l_whence = SEEK_SET;    lock.l_start = lock.l_len = 0L;    s = fcntl(id->fd, F_SETLK, &lock);    if( s!=0 ){      rc = (errno==EINVAL) ? SQLITE_NOLFS : SQLITE_BUSY;    }else{      rc = SQLITE_OK;      id->pLock->cnt = 0;    }  }  if( rc==SQLITE_OK ){    /* Decrement the count of locks against this same file.  When the    ** count reaches zero, close any other file descriptors whose close    ** was deferred because of outstanding locks.    */    struct openCnt *pOpen = id->pOpen;    pOpen->nLock--;    assert( pOpen->nLock>=0 );    if( pOpen->nLock==0 && pOpen->nPending>0 ){      int i;      for(i=0; i<pOpen->nPending; i++){        close(pOpen->aPending[i]);      }      sqliteFree(pOpen->aPending);      pOpen->nPending = 0;      pOpen->aPending = 0;    }  }  sqliteOsLeaveMutex();  id->locked = 0;  return rc;#endif#if OS_WIN# ifndef _WIN32_WCE  int rc;  if( id->locked==0 ){    rc = SQLITE_OK;  }else if( isNT() || id->locked<0 ){    UnlockFile(id->h, FIRST_LOCKBYTE+1, 0, N_LOCKBYTE, 0);    rc = SQLITE_OK;    id->locked = 0;  }else{    UnlockFile(id->h, FIRST_LOCKBYTE+id->locked, 0, 1, 0);    rc = SQLITE_OK;    id->locked = 0;  }  return rc;# else  if ( id->locked == 0 || id->hMux == 0 )  {    id->locked = 0;    return SQLITE_OK;  }#  ifndef SQLITE_WCE_OMIT_FILELOCK  // Lock file for all processes  if ( ! wceport_LockFileMutex(id->hMux) )    return SQLITE_BUSY;	// This cannot happen  if ( id->locked < 0 )  {	// Write locked    wceport_IncrementSemaphoreN( id->hSem, MAX_FILE_READERS );  }  else  {	// Read locked    wceport_IncrementSemaphoreN( id->hSem, 1 );  }  // Update lock status and release file mutex lock  id->locked = 0;  ReleaseMutex( id->hMux );#  else // SQLITE_OMIT_FILELOCK  id->locked = 0;#  endif // SQLITE_OMIT_FILELOCK  return SQLITE_OK;# endif#endif#if OS_MAC  int rc;  ParamBlockRec params;  memset(&params, 0, sizeof(params));  params.ioParam.ioRefNum = id->refNumRF;  params.ioParam.ioPosMode = fsFromStart;  if( id->locked==0 || id->refNumRF == -1 ){    rc = SQLITE_OK;  }else if( id->locked<0 ){    params.ioParam.ioPosOffset = FIRST_LOCKBYTE+1;    params.ioParam.ioReqCount = N_LOCKBYTE;    PBUnlockRangeSync(&params);    rc = SQLITE_OK;    id->locked = 0;  }else{    params.ioParam.ioPosOffset = FIRST_LOCKBYTE+id->locked;    params.ioParam.ioReqCount = 1;    PBUnlockRangeSync(&params);    rc = SQLITE_OK;    id->locked = 0;  }  return rc;#endif}/*** Get information to seed the random number generator.  The seed** is written into the buffer zBuf[256].  The calling function must** supply a sufficiently large buffer.*/int sqliteOsRandomSeed(char *zBuf){  /* We have to initialize zBuf to prevent valgrind from reporting  ** errors.  The reports issued by valgrind are incorrect - we would  ** prefer that the randomness be increased by making use of the  ** uninitialized space in zBuf - but valgrind errors tend to worry  ** some users.  Rather than argue, it seems easier just to initialize  ** the whole array and silence valgrind, even if that means less randomness  ** in the random seed.  **  ** When testing, initializing zBuf[] to zero is all we do.  That means  ** that we always use the same random number sequence.* This makes the  ** tests repeatable.  */  memset(zBuf, 0, 256);#if OS_UNIX && !defined(SQLITE_TEST)  {    int pid;    time((time_t*)zBuf);    pid = getpid();    memcpy(&zBuf[sizeof(time_t)], &pid, sizeof(pid));  }#endif#if OS_WIN && !defined(SQLITE_TEST)  GetSystemTime((LPSYSTEMTIME)zBuf);#endif#if OS_MAC  {    int pid;    Microseconds((UnsignedWide*)zBuf);    pid = getpid();    memcpy(&zBuf[sizeof(UnsignedWide)], &pid, sizeof(pid));  }#endif  return SQLITE_OK;}/*** Sleep for a little while.  Return the amount of time slept.*/int sqliteOsSleep(int ms){#if OS_UNIX#if defined(HAVE_USLEEP) && HAVE_USLEEP  usleep(ms*1000);  return ms;#else  sleep((ms+999)/1000);  return 1000*((ms+999)/1000);#endif#endif#if OS_WIN  Sleep(ms);  return ms;#endif#if OS_MAC  UInt32 finalTicks;  UInt32 ticks = (((UInt32)ms+16)*3)/50;  /* 1/60 sec per tick */  Delay(ticks, &finalTicks);  return (int)((ticks*50)/3);#endif}/*** Static variables used for thread synchronization*/static int inMutex = 0;#ifdef SQLITE_UNIX_THREADS  static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;#endif#ifdef SQLITE_W32_THREADS  static CRITICAL_SECTION cs;#endif#ifdef SQLITE_MACOS_MULTITASKING  static MPCriticalRegionID criticalRegion;#endif/*** The following pair of routine implement mutual exclusion for** multi-threaded processes.  Only a single thread is allowed to** executed code that is surrounded by EnterMutex() and LeaveMutex().**** SQLite uses only a single Mutex.  There is not much critical** code and what little there is executes quickly and without blocking.*/void sqliteOsEnterMutex(){#ifdef SQLITE_UNIX_THREADS  pthread_mutex_lock(&mutex);#endif#ifdef SQLITE_W32_THREADS  static int isInit = 0;  while( !isInit ){    static long lock = 0;    if( InterlockedIncrement(&lock)==1 ){      InitializeCriticalSection(&cs);      isInit = 1;    }else{      Sleep(1);    }  }  EnterCriticalSection(&cs);#endif#ifdef SQLITE_MACOS_MULTITASKING  static volatile int notInit = 1;  if( notInit ){    if( notInit == 2 ) /* as close as you can get to thread safe init */      MPYield();    else{      notInit = 2;      MPCreateCriticalRegion(&criticalRegion);      notInit = 0;    }  }  MPEnterCriticalRegion(criticalRegion, kDurationForever);#endif  assert( !inMutex );  inMutex = 1;}void sqliteOsLeaveMutex(){  assert( inMutex );  inMutex = 0;#ifdef SQLITE_UNIX_THREADS  pthread_mutex_unlock(&mutex);#endif#ifdef SQLITE_W32_THREADS  LeaveCriticalSection(&cs);#endif#ifdef SQLITE_MACOS_MULTITASKING  MPExitCriticalRegion(criticalRegion);#endif}/*** Turn a relative pathname into a full pathname.  Return a pointer** to the full pathname stored in space obtained from sqliteMalloc().** The calling function is responsible for freeing this space once it** is no longer needed.*/char *sqliteOsFullPathname(const char *zRelative){#if OS_UNIX  char *zFull = 0;  if( zRelative[0]=='/' ){    sqliteSetString(&zFull, zRelative, (char*)0);  }else{    char zBuf[5000];    sqliteSetString(&zFull, getcwd(zBuf, sizeof(zBuf)), "/", zRelative,                    (char*)0);  }  return zFull;#endif#if OS_WIN# ifndef _WIN32_WCE  char *zNotUsed;  char *zFull;  int nByte;  nByte = GetFullPathName(zRelative, 0, 0, &zNotUsed) + 1;  zFull = sqliteMalloc( nByte );  if( zFull==0 ) return 0;  GetFullPathName(zRelative, nByte, zFull, &zNotUsed);# else  // There is no current directory on Windows CE, so we assume  // we are working always with absolute paths  char *zFull = 0;  sqliteSetString( &zFull, zRelative, 0 );# endif  return zFull;#endif#if OS_MAC  char *zFull = 0;  if( zRelative[0]==':' ){    char zBuf[_MAX_PATH+1];    sqliteSetString(&zFull, getcwd(zBuf, sizeof(zBuf)), &(zRelative[1]),                    (char*)0);  }else{    if( strchr(zRelative, ':') ){      sqliteSetString(&zFull, zRelative, (char*)0);    }else{    char zBuf[_MAX_PATH+1];      sqliteSetString(&zFull, getcwd(zBuf, sizeof(zBuf)), zRelative, (char*)0);    }  }  return zFull;#endif}/*** The following variable, if set to a non-zero value, becomes the result** returned from sqliteOsCurrentTime().  This is used for testing.*/#ifdef SQLITE_TESTint sqlite_current_time = 0;#endif/*** Find the current time (in Universal Coordinated Time).  Write the** current time and date as a Julian Day number into *prNow and** return 0.  Return 1 if the time and date cannot be found.*/int sqliteOsCurrentTime(double *prNow){#if OS_UNIX  time_t t;  time(&t);  *prNow = t/86400.0 + 2440587.5;#endif#if OS_WIN  FILETIME ft;  /* FILETIME structure is a 64-bit value representing the number of      100-nanosecond intervals since January 1, 1601 (= JD 2305813.5).   */  double now;#ifndef _WIN32_WCE  GetSystemTimeAsFileTime( &ft );#else  {	  /* WinCE doesn't have GetSystemTimeAsFileTime() */	  SYSTEMTIME st;	  GetSystemTime( &st );	  SystemTimeToFileTime( &st, &ft );  }#endif  now = ((double)ft.dwHighDateTime) * 4294967296.0;   *prNow = (now + ft.dwLowDateTime)/864000000000.0 + 2305813.5;#endif#ifdef SQLITE_TEST  if( sqlite_current_time ){    *prNow = sqlite_current_time/86400.0 + 2440587.5;  }#endif  return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产清纯在线一区二区www| 在线免费观看日本欧美| 99久久精品免费看| 欧美日免费三级在线| 日韩欧美另类在线| 国产精品成人一区二区艾草| 亚洲国产sm捆绑调教视频 | 99久久精品国产麻豆演员表| 欧美视频一二三区| 久久久久97国产精华液好用吗| 日韩一区有码在线| 男女男精品视频| 成人黄动漫网站免费app| 欧美色国产精品| 中文字幕免费一区| 亚洲成年人影院| 国产成人免费9x9x人网站视频| 欧美亚洲精品一区| 中文字幕第一区二区| 免费一区二区视频| 色综合夜色一区| 精品少妇一区二区三区在线播放| 亚洲欧美在线高清| 国产美女精品一区二区三区| 欧洲亚洲国产日韩| 国产欧美精品一区| 免费观看成人av| 日本道免费精品一区二区三区| 欧美精品一区二区三区在线播放 | 在线观看视频一区| 国产视频不卡一区| 麻豆91精品视频| 欧美日韩在线三级| 国产精品久久久久久一区二区三区 | 蜜桃视频一区二区三区| 91麻豆成人久久精品二区三区| 精品免费国产一区二区三区四区| 一区二区三区日韩欧美精品| 国产大片一区二区| 欧美一级二级三级蜜桃| 一级日本不卡的影视| 国产成人免费视频一区| 精品福利在线导航| 免费美女久久99| 欧美欧美欧美欧美| 亚洲国产精品嫩草影院| 91麻豆国产福利精品| 中文字幕av一区二区三区免费看| 麻豆精品视频在线观看视频| 欧美日韩一二区| 一区二区三区免费在线观看| 91色|porny| 中文字幕在线不卡一区二区三区| 国产精品自拍毛片| 久久综合色8888| 国产一区二区精品久久91| 欧美α欧美αv大片| 婷婷综合五月天| 欧美巨大另类极品videosbest | 欧美在线综合视频| 亚洲色图视频免费播放| 91在线观看美女| 中文字幕在线不卡一区| 99久久99精品久久久久久| 国产精品久久夜| 成人av在线一区二区| 国产精品毛片高清在线完整版| 国产成人鲁色资源国产91色综| 国产三级精品三级在线专区| 丁香六月久久综合狠狠色| 国产精品视频麻豆| 成人sese在线| 亚洲手机成人高清视频| 91免费国产在线观看| 亚洲乱码一区二区三区在线观看| 91亚洲男人天堂| 亚洲综合精品久久| 欧美日韩综合一区| 日本欧美韩国一区三区| 日韩精品一区二区三区老鸭窝| 久99久精品视频免费观看| 26uuu久久综合| 国产999精品久久| 中文字幕一区三区| 欧美在线啊v一区| 日本视频在线一区| 久久综合久久久久88| 风间由美中文字幕在线看视频国产欧美 | 亚洲一线二线三线久久久| 在线观看亚洲a| 男人的天堂亚洲一区| 久久蜜桃av一区二区天堂| 成人综合在线网站| 一区二区三区日韩| 欧美tk丨vk视频| 岛国av在线一区| 亚洲柠檬福利资源导航| 欧美日韩精品免费观看视频| 免费不卡在线观看| 国产拍揄自揄精品视频麻豆| 成人深夜视频在线观看| 一区二区三区免费| 日韩免费视频线观看| 国产成人免费视频| 亚洲自拍偷拍欧美| 欧美变态口味重另类| 成人av在线播放网站| 亚洲电影视频在线| 2020国产精品自拍| 91久久国产最好的精华液| 久热成人在线视频| 国产精品不卡在线观看| 69久久99精品久久久久婷婷| 国产制服丝袜一区| 一卡二卡欧美日韩| 久久精品人人做| 欧美三电影在线| 粉嫩av亚洲一区二区图片| 夜夜精品视频一区二区| www国产亚洲精品久久麻豆| 91色视频在线| 国模套图日韩精品一区二区| 亚洲欧美成人一区二区三区| 日韩免费在线观看| 色拍拍在线精品视频8848| 蜜桃免费网站一区二区三区| 亚洲视频一二三区| 日韩精品资源二区在线| 91国偷自产一区二区开放时间 | 国产亚洲精品久| 精品视频资源站| 岛国精品在线播放| 久久国产尿小便嘘嘘| 国产精品乱码一区二区三区软件| 亚洲欧美一区二区在线观看| 欧美一卡二卡三卡| 成人高清在线视频| 三级在线观看一区二区| 国产精品九色蝌蚪自拍| 91精品国产aⅴ一区二区| 99久久久精品免费观看国产蜜| 久久精品国产第一区二区三区| 尤物在线观看一区| 久久久www免费人成精品| 欧美精品久久久久久久多人混战| 国产suv精品一区二区883| 午夜精品国产更新| 亚洲精品乱码久久久久久| 国产日韩在线不卡| 日韩欧美国产精品一区| 欧美视频完全免费看| 99国产精品国产精品毛片| 国产乱码一区二区三区| 日韩不卡手机在线v区| 一区二区三区在线播放| 中文欧美字幕免费| 久久亚洲二区三区| 欧美一区二区三区播放老司机| 色哟哟国产精品| 91在线播放网址| 9i在线看片成人免费| 国产99久久久久| 国产电影一区在线| 国产成人在线视频免费播放| 久久激情五月激情| 蜜臀av性久久久久蜜臀av麻豆| 亚洲成人福利片| 亚洲观看高清完整版在线观看| 亚洲精品日日夜夜| 亚洲视频电影在线| 亚洲视频香蕉人妖| 亚洲人成精品久久久久久| 中文字幕一区二区三区不卡在线| 中文文精品字幕一区二区| 久久久久久免费网| 久久久国产一区二区三区四区小说| 日韩欧美国产系列| 日韩欧美三级在线| 日韩欧美黄色影院| 精品伦理精品一区| 久久综合网色—综合色88| 久久综合99re88久久爱| 久久先锋影音av鲁色资源| 久久看人人爽人人| 日本一区二区三区电影| 中文字幕的久久| 亚洲三级电影网站| 亚洲一区二区精品视频| 午夜国产精品影院在线观看| 午夜精品久久久久久| 美女视频黄频大全不卡视频在线播放| 日韩av在线发布| 精品综合免费视频观看| 国产成人免费av在线| caoporen国产精品视频| 欧洲av一区二区嗯嗯嗯啊| 欧美日韩国产高清一区二区 | 中文字幕亚洲成人| 一区二区三国产精华液| 亚洲成a人v欧美综合天堂|