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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os_win.c

?? 調用sqlite開源數據的小程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*** 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 code that is specific to windows.*/#include "sqliteInt.h"#include "os.h"#if OS_WIN               /* This file is used for windows only */#include <winbase.h>#ifdef __CYGWIN__# include <sys/cygwin.h>#endif/*** Macros used to determine whether or not to use threads.*/#if defined(THREADSAFE) && THREADSAFE# define SQLITE_W32_THREADS 1#endif/*** Include code that is common to all os_*.c files*/#include "os_common.h"/*** Do not include any of the File I/O interface procedures if the** SQLITE_OMIT_DISKIO macro is defined (indicating that there database** will be in-memory only)*/#ifndef SQLITE_OMIT_DISKIO/*** The following variable is (normally) set once and never changes** thereafter.  It records whether the operating system is Win95** or WinNT.**** 0:   Operating system unknown.** 1:   Operating system is Win95.** 2:   Operating system is WinNT.**** In order to facilitate testing on a WinNT system, the test fixture** can manually set this value to 1 to emulate Win98 behavior.*/int sqlite3_os_type = 0;/*** Return true (non-zero) if we are running under WinNT, Win2K or WinXP.** Return false (zero) for Win95, Win98, or WinME.**** Here is an interesting observation:  Win95, Win98, and WinME lack** the LockFileEx() API.  But we can still statically link against that** API as long as we don't call it win running Win95/98/ME.  A call to** this routine is used to determine if the host is Win95/98/ME or** WinNT/2K/XP so that we will know whether or not we can safely call** the LockFileEx() API.*/static int isNT(void){  if( sqlite3_os_type==0 ){    OSVERSIONINFO sInfo;    sInfo.dwOSVersionInfoSize = sizeof(sInfo);    GetVersionEx(&sInfo);    sqlite3_os_type = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;  }  return sqlite3_os_type==2;}/*** Convert a UTF-8 string to UTF-32.  Space to hold the returned string** is obtained from sqliteMalloc.*/static WCHAR *utf8ToUnicode(const char *zFilename){  int nByte;  WCHAR *zWideFilename;  if( !isNT() ){    return 0;  }  nByte = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0)*sizeof(WCHAR);  zWideFilename = sqliteMalloc( nByte*sizeof(zWideFilename[0]) );  if( zWideFilename==0 ){    return 0;  }  nByte = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename, nByte);  if( nByte==0 ){    sqliteFree(zWideFilename);    zWideFilename = 0;  }  return zWideFilename;}/*** Convert UTF-32 to UTF-8.  Space to hold the returned string is** obtained from sqliteMalloc().*/static char *unicodeToUtf8(const WCHAR *zWideFilename){  int nByte;  char *zFilename;  nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, 0, 0, 0, 0);  zFilename = sqliteMalloc( nByte );  if( zFilename==0 ){    return 0;  }  nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, zFilename, nByte,                              0, 0);  if( nByte == 0 ){    sqliteFree(zFilename);    zFilename = 0;  }  return zFilename;}/*** Delete the named file*/int sqlite3OsDelete(const char *zFilename){  WCHAR *zWide = utf8ToUnicode(zFilename);  if( zWide ){    DeleteFileW(zWide);    sqliteFree(zWide);  }else{    DeleteFileA(zFilename);  }  TRACE2("DELETE \"%s\"\n", zFilename);  return SQLITE_OK;}/*** Return TRUE if the named file exists.*/int sqlite3OsFileExists(const char *zFilename){  int exists = 0;  WCHAR *zWide = utf8ToUnicode(zFilename);  if( zWide ){    exists = GetFileAttributesW(zWide) != 0xffffffff;    sqliteFree(zWide);  }else{    exists = GetFileAttributesA(zFilename) != 0xffffffff;  }  return exists;}/*** Attempt to open a file for both reading and writing.  If that** fails, try opening it read-only.  If the file does not exist,** try to create it.**** On success, a handle for the open file is written to *id** and *pReadonly is set to 0 if the file was opened for reading and** writing or 1 if the file was opened read-only.  The function returns** SQLITE_OK.**** On failure, the function returns SQLITE_CANTOPEN and leaves** *id and *pReadonly unchanged.*/int sqlite3OsOpenReadWrite(  const char *zFilename,  OsFile *id,  int *pReadonly){  HANDLE h;  WCHAR *zWide = utf8ToUnicode(zFilename);  assert( !id->isOpen );  if( zWide ){    h = CreateFileW(zWide,       GENERIC_READ | GENERIC_WRITE,       FILE_SHARE_READ | FILE_SHARE_WRITE,       NULL,       OPEN_ALWAYS,       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,       NULL    );    if( h==INVALID_HANDLE_VALUE ){      h = CreateFileW(zWide,         GENERIC_READ,         FILE_SHARE_READ,         NULL,         OPEN_ALWAYS,         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,         NULL      );      if( h==INVALID_HANDLE_VALUE ){        sqliteFree(zWide);        return SQLITE_CANTOPEN;      }      *pReadonly = 1;    }else{      *pReadonly = 0;    }    sqliteFree(zWide);  }else{    h = CreateFileA(zFilename,       GENERIC_READ | GENERIC_WRITE,       FILE_SHARE_READ | FILE_SHARE_WRITE,       NULL,       OPEN_ALWAYS,       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,       NULL    );    if( h==INVALID_HANDLE_VALUE ){      h = CreateFileA(zFilename,         GENERIC_READ,         FILE_SHARE_READ,         NULL,         OPEN_ALWAYS,         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,         NULL      );      if( h==INVALID_HANDLE_VALUE ){        return SQLITE_CANTOPEN;      }      *pReadonly = 1;    }else{      *pReadonly = 0;    }  }  id->h = h;  id->locktype = NO_LOCK;  id->sharedLockByte = 0;  id->isOpen = 1;  OpenCounter(+1);  TRACE3("OPEN R/W %d \"%s\"\n", h, zFilename);  return SQLITE_OK;}/*** Attempt to open a new file for exclusive access by this process.** The file will be opened for both reading and writing.  To avoid** a potential security problem, we do not allow the file to have** previously existed.  Nor do we allow the file to be a symbolic** link.**** If delFlag is true, then make arrangements to automatically delete** the file when it is closed.**** On success, write the file handle into *id and return SQLITE_OK.**** On failure, return SQLITE_CANTOPEN.*/int sqlite3OsOpenExclusive(const char *zFilename, OsFile *id, int delFlag){  HANDLE h;  int fileflags;  WCHAR *zWide = utf8ToUnicode(zFilename);  assert( !id->isOpen );  if( delFlag ){    fileflags = FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_RANDOM_ACCESS                      | FILE_FLAG_DELETE_ON_CLOSE;  }else{    fileflags = FILE_FLAG_RANDOM_ACCESS;  }  if( zWide ){    h = CreateFileW(zWide,       GENERIC_READ | GENERIC_WRITE,       0,       NULL,       CREATE_ALWAYS,       fileflags,       NULL    );    sqliteFree(zWide);  }else{    h = CreateFileA(zFilename,       GENERIC_READ | GENERIC_WRITE,       0,       NULL,       CREATE_ALWAYS,       fileflags,       NULL    );  }  if( h==INVALID_HANDLE_VALUE ){    return SQLITE_CANTOPEN;  }  id->h = h;  id->locktype = NO_LOCK;  id->sharedLockByte = 0;  id->isOpen = 1;  OpenCounter(+1);  TRACE3("OPEN EX %d \"%s\"\n", h, zFilename);  return SQLITE_OK;}/*** Attempt to open a new file for read-only access.**** On success, write the file handle into *id and return SQLITE_OK.**** On failure, return SQLITE_CANTOPEN.*/int sqlite3OsOpenReadOnly(const char *zFilename, OsFile *id){  HANDLE h;  WCHAR *zWide = utf8ToUnicode(zFilename);  assert( !id->isOpen );  if( zWide ){    h = CreateFileW(zWide,       GENERIC_READ,       0,       NULL,       OPEN_EXISTING,       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,       NULL    );    sqliteFree(zWide);  }else{    h = CreateFileA(zFilename,       GENERIC_READ,       0,       NULL,       OPEN_EXISTING,       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,       NULL    );  }  if( h==INVALID_HANDLE_VALUE ){    return SQLITE_CANTOPEN;  }  id->h = h;  id->locktype = NO_LOCK;  id->sharedLockByte = 0;  id->isOpen = 1;  OpenCounter(+1);  TRACE3("OPEN RO %d \"%s\"\n", h, zFilename);  return SQLITE_OK;}/*** Attempt to open a file descriptor for the directory that contains a** file.  This file descriptor can be used to fsync() the directory** in order to make sure the creation of a new file is actually written** to disk.**** This routine is only meaningful for Unix.  It is a no-op under** windows since windows does not support hard links.**** On success, a handle for a previously open file is at *id is** updated with the new directory file descriptor and SQLITE_OK is** returned.**** On failure, the function returns SQLITE_CANTOPEN and leaves** *id unchanged.*/int sqlite3OsOpenDirectory(  const char *zDirname,  OsFile *id){  return SQLITE_OK;}/*** If the following global variable points to a string which is the** name of a directory, then that directory will be used to store** temporary files.*/char *sqlite3_temp_directory = 0;/*** Create a temporary file name in zBuf.  zBuf must be big enough to** hold at least SQLITE_TEMPNAME_SIZE characters.*/int sqlite3OsTempFileName(char *zBuf){  static char zChars[] =    "abcdefghijklmnopqrstuvwxyz"    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"    "0123456789";  int i, j;  char zTempPath[SQLITE_TEMPNAME_SIZE];  if( sqlite3_temp_directory ){    strncpy(zTempPath, sqlite3_temp_directory, SQLITE_TEMPNAME_SIZE-30);    zTempPath[SQLITE_TEMPNAME_SIZE-30] = 0;  }else if( isNT() ){    char *zMulti;    WCHAR zWidePath[SQLITE_TEMPNAME_SIZE];    GetTempPathW(SQLITE_TEMPNAME_SIZE-30, zWidePath);    zMulti = unicodeToUtf8(zWidePath);    if( zMulti ){      strncpy(zTempPath, zMulti, SQLITE_TEMPNAME_SIZE-30);      zTempPath[SQLITE_TEMPNAME_SIZE-30] = 0;      sqliteFree(zMulti);    }  }else{    GetTempPathA(SQLITE_TEMPNAME_SIZE-30, zTempPath);  }  for(i=strlen(zTempPath); i>0 && zTempPath[i-1]=='\\'; i--){}  zTempPath[i] = 0;  for(;;){    sprintf(zBuf, "%s\\"TEMP_FILE_PREFIX, zTempPath);    j = strlen(zBuf);    sqlite3Randomness(15, &zBuf[j]);    for(i=0; i<15; i++, j++){      zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];    }    zBuf[j] = 0;    if( !sqlite3OsFileExists(zBuf) ) break;  }  TRACE2("TEMP FILENAME: %s\n", zBuf);  return SQLITE_OK; }/*** Close a file.*/int sqlite3OsClose(OsFile *id){  if( id->isOpen ){    TRACE2("CLOSE %d\n", id->h);    CloseHandle(id->h);    OpenCounter(-1);    id->isOpen = 0;  }  return SQLITE_OK;}/*** Read data from a file into a buffer.  Return SQLITE_OK if all** bytes were read successfully and SQLITE_IOERR if anything goes** wrong.*/int sqlite3OsRead(OsFile *id, void *pBuf, int amt){  DWORD got;  assert( id->isOpen );  SimulateIOError(SQLITE_IOERR);  TRACE3("READ %d lock=%d\n", id->h, id->locktype);  if( !ReadFile(id->h, pBuf, amt, &got, 0) ){    got = 0;  }  if( got==(DWORD)amt ){    return SQLITE_OK;  }else{    return SQLITE_IOERR;  }}/*** Write data from a buffer into a file.  Return SQLITE_OK on success** or some other error code on failure.*/int sqlite3OsWrite(OsFile *id, const void *pBuf, int amt){  int rc = 0;  DWORD wrote;  assert( id->isOpen );  SimulateIOError(SQLITE_IOERR);  SimulateDiskfullError;  TRACE3("WRITE %d lock=%d\n", id->h, id->locktype);  assert( amt>0 );  while( amt>0 && (rc = WriteFile(id->h, pBuf, amt, &wrote, 0))!=0 && wrote>0 ){    amt -= wrote;    pBuf = &((char*)pBuf)[wrote];  }  if( !rc || amt>(int)wrote ){    return SQLITE_FULL;  }  return SQLITE_OK;}/*** Some microsoft compilers lack this definition.*/#ifndef INVALID_SET_FILE_POINTER

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久99| 91蝌蚪国产九色| 久久综合久久综合九色| 成人avav影音| 午夜亚洲福利老司机| 精品国产一区二区三区久久久蜜月| 国产精品一级片| 亚洲欧美国产三级| 欧美一卡2卡三卡4卡5免费| 成人短视频下载| 午夜精品爽啪视频| 国产午夜精品一区二区| 欧美午夜精品久久久久久超碰| 久久成人免费电影| 国产午夜精品在线观看| 色94色欧美sute亚洲13| 另类小说色综合网站| 国产精品家庭影院| 欧美日韩国产三级| 丁香网亚洲国际| 亚洲图片一区二区| 欧美激情一区二区三区四区| 欧美日韩国产一级| 91视频一区二区| 国产综合色在线| 水野朝阳av一区二区三区| 91麻豆精品国产自产在线| 99久久国产综合精品女不卡| 国产综合色精品一区二区三区| 亚洲综合激情网| 亚洲自拍偷拍麻豆| 国产精品第四页| 久久亚洲精精品中文字幕早川悠里| 欧美日韩国产综合视频在线观看| 国产在线播放一区三区四| 午夜视频久久久久久| 洋洋av久久久久久久一区| 成人免费在线观看入口| 国产欧美一区二区精品性| 久久久噜噜噜久久人人看| 日韩欧美国产精品| 欧美一级片在线| 欧美日韩高清不卡| 成人黄色免费短视频| 国产精品一区二区无线| 麻豆精品国产91久久久久久 | 欧美一三区三区四区免费在线看| 欧美性猛交xxxxxx富婆| 亚洲美女区一区| 中文字幕一区二区三区在线观看| 精品国产亚洲一区二区三区在线观看| 色综合久久六月婷婷中文字幕| 国产999精品久久久久久绿帽| 久久精品免费观看| 蜜臀va亚洲va欧美va天堂| 日本中文字幕不卡| 无吗不卡中文字幕| 中文字幕一区在线观看视频| 久久久精品黄色| 日韩免费电影一区| 欧美一区二区在线免费播放| 成人黄色av电影| 韩国精品在线观看| 高清成人免费视频| 成人精品小蝌蚪| 91蝌蚪porny| 色香蕉久久蜜桃| 欧美中文字幕不卡| 欧美喷潮久久久xxxxx| 一本一道综合狠狠老| 色婷婷av一区二区三区软件| 日本韩国精品在线| 精品视频在线免费看| 8v天堂国产在线一区二区| 欧美一区二区视频在线观看| 欧美成人精品1314www| 2024国产精品视频| 欧美极品少妇xxxxⅹ高跟鞋| 日韩毛片精品高清免费| 一区二区三区中文字幕| 国产精品私房写真福利视频| 亚洲欧美区自拍先锋| 五月婷婷另类国产| 日韩精品久久久久久| 久草中文综合在线| 成人午夜伦理影院| 丁香婷婷深情五月亚洲| 5月丁香婷婷综合| 久久欧美中文字幕| 欧美性色综合网| 欧美一级日韩不卡播放免费| 精品国产sm最大网站| 日韩一区在线看| 日韩成人午夜精品| 懂色av一区二区三区免费观看| 色综合激情五月| 精品日韩在线观看| 中文字幕日韩精品一区| 日本在线观看不卡视频| 成人av手机在线观看| 欧美老女人第四色| 亚洲国产成人自拍| 肉肉av福利一精品导航| 久久国产精品第一页| kk眼镜猥琐国模调教系列一区二区| 欧美蜜桃一区二区三区| 欧美成人aa大片| 亚洲日本电影在线| 国内不卡的二区三区中文字幕| 色狠狠桃花综合| 国产肉丝袜一区二区| 午夜激情久久久| 成人午夜看片网址| 欧美电视剧在线看免费| 亚洲综合在线五月| 国产一区二区三区在线观看免费 | 国产一区中文字幕| 欧美视频你懂的| 国产精品人妖ts系列视频| 亚洲成a人在线观看| 精品国产成人系列| 日韩av一区二区在线影视| 成人高清免费观看| 成人av集中营| 中文乱码免费一区二区| 麻豆国产精品视频| 欧美一区二区不卡视频| 樱花影视一区二区| 懂色av中文一区二区三区| 日韩美女主播在线视频一区二区三区| 亚洲精品日韩专区silk| 不卡一二三区首页| 中文字幕av一区二区三区 | 国产真实乱对白精彩久久| 欧美日韩中文字幕一区| 亚洲日本中文字幕区| 国产成人夜色高潮福利影视| 日韩亚洲欧美高清| 亚洲在线一区二区三区| 91免费视频网| 亚洲欧美综合色| 国产在线视视频有精品| 日韩三级中文字幕| 午夜激情综合网| 欧美调教femdomvk| 亚洲愉拍自拍另类高清精品| 成人国产一区二区三区精品| 久久在线免费观看| 香蕉加勒比综合久久| 国产精品一区免费在线观看| 久久久久久久久一| 国产乱色国产精品免费视频| 日韩精品在线看片z| www..com久久爱| 日本视频中文字幕一区二区三区| 亚洲欧美日韩人成在线播放| 国产成人免费在线| 2017欧美狠狠色| 99re热这里只有精品免费视频| 久久精品欧美日韩精品| 欧美日韩成人高清| 男男gaygay亚洲| 亚洲精品写真福利| 国产欧美日韩另类一区| 国产片一区二区| 亚洲一区二区中文在线| 国产91富婆露脸刺激对白| 久久久www免费人成精品| 国产成人99久久亚洲综合精品| 国产精品高潮呻吟| 美女在线一区二区| 国产精品女主播av| 色88888久久久久久影院野外| 男女性色大片免费观看一区二区 | 日韩专区欧美专区| 日韩一级精品视频在线观看| 蜜臀av亚洲一区中文字幕| 中文字幕成人网| www..com久久爱| 亚洲综合无码一区二区| 91无套直看片红桃| 香蕉久久一区二区不卡无毒影院| 欧美色综合网站| 国产黄色精品网站| 自拍偷拍欧美激情| 欧美丰满少妇xxxbbb| 午夜精品久久久久| 精品捆绑美女sm三区| 精品在线一区二区| 亚洲国产精品久久久久秋霞影院| 欧美一区二区久久久| 国内精品久久久久影院一蜜桃| 国产亚洲婷婷免费| 色就色 综合激情| 国产成人啪免费观看软件 | 精品国产乱码久久久久久久久| 成人黄色在线视频| 日韩电影在线看| 欧美国产一区视频在线观看| 在线观看免费一区|