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

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

?? os.c

?? sqlite源碼wince移植版
?? C
?? 第 1 頁 / 共 5 頁
字號:
	s_tm.tm_min  = ls.wMinute;
	s_tm.tm_hour = ls.wHour;
	s_tm.tm_mday = ls.wDay;
	s_tm.tm_mon  = ls.wMonth -1;
	s_tm.tm_year = ls.wYear - 1900;
	s_tm.tm_wday = ls.wDayOfWeek;
	// Return pointer to static data
	return &s_tm;
}
/* --------------------------------------------------------------------- *//*** WinCE File Locking routines.**** These are just helpers for the sqliteOsFileLock family of functions.** The idea is to have a named counter, made with a named mutex and a named** semaphore. The name of this resources is generated from the file path, so** that they are unique for each database opened.**** I'm sure there are many other ways to acomplish the same thing, and maybe** some are better. If you know any better way, just say so, and I will be** happy to use it.*/#if defined(_WIN32_WCE) && ! defined(SQLITE_WCE_OMIT_FILELOCK)// I think this is more than enough for Windows CE#define MAX_FILE_READERS 64static BOOL wceport_OpenFileLock( OsFile * id ){	WCHAR aux[256];	WCHAR muxName[256] = L"SqliteMux";	WCHAR semName[256] = L"SqliteSem";	int i = 0, j = 0;	for ( ; id->filePath[i]; ++i )		switch ( id->filePath[i] )		{		case '\\':		case '/':		break;		default:		aux[j] = id->filePath[i];						++j;		}	aux[j] = '\0';	wcscat( muxName, aux );	id->hMux = CreateMutexW( NULL, FALSE, muxName );	if ( id->hMux == NULL )		return FALSE;	wcscat( semName, aux );	id->hSem = CreateSemaphoreW( NULL, MAX_FILE_READERS,								MAX_FILE_READERS, semName );	if ( id->hSem == 0 )	{		CloseHandle( id->hMux );		return FALSE;	}	id->locked = 0;	return TRUE;}static void wceport_CloseFileLock( OsFile * id ){	if ( id->hMux )		CloseHandle( id->hMux );	if ( id->hSem )		CloseHandle( id->hSem );}// Lock access to file by all processes.// Returns TRUE on success, FALSE on failure.static BOOL wceport_LockFileMutex( HANDLE hMux ){	DWORD res = WaitForSingleObject( hMux, 250 );	// I don't know very well what I have to do in this case.	// The MSDN says that this case is when a thread terminates without	// releasing the mutex. So I have to release it and try again	if ( res == WAIT_ABANDONED )	{		ReleaseMutex( hMux );		res = WaitForSingleObject( hMux, 250 );	}	// success ?	if ( res != WAIT_OBJECT_0 )	{		return FALSE;	// someone is taking a long time	}	return TRUE;}static int wceport_IncrementSemaphoreN( HANDLE hSem, unsigned count ){	DWORD prevCount;	BOOL res = ReleaseSemaphore( hSem, count, &prevCount );	// this can only fail on a program bug or operating sistem error	// what should we do if that happens ?	assert( res != FALSE );	return prevCount;}static BOOL wceport_DecrementSemaphore( HANDLE hSem ){	DWORD res = WaitForSingleObject( hSem, 250 );	// I don't know very well what I have to do in this case.	// Does this apply to semaphores ??!!...//	if ( res == WAIT_ABANDONED )//		....	// success ?	if ( res != WAIT_OBJECT_0 )	{		return FALSE;	// someone is taking a long time	}	return TRUE;}// Decrement semaphore by a specified amount.// If failure, restore the original semaphore count.static BOOL wceport_DecrementSemaphoreN( HANDLE hSem, unsigned count ){	unsigned i;	for ( i = 0; i < count; ++i )	{		if ( ! wceport_DecrementSemaphore(hSem) )		{	// Restore original count			if ( i > 0 )				wceport_IncrementSemaphoreN( hSem, i );			return FALSE;		}	}	return TRUE;}#endif // UNDER_CE && ! SQLITE_WCE_OMIT_FILELOCK/* --------------------------------------------------------------------- *//*** Delete the named file*/int sqliteOsDelete(const char *zFilename){#if OS_UNIX  unlink(zFilename);#endif#if OS_WIN# ifndef _WIN32_WCE  DeleteFile(zFilename);# else  wchar_t * aux = wStrDup( zFilename );  DeleteFileW( aux );  free( aux );# endif#endif#if OS_MAC  unlink(zFilename);#endif  return SQLITE_OK;}/*** Return TRUE if the named file exists.*/int sqliteOsFileExists(const char *zFilename){#if OS_UNIX  return access(zFilename, 0)==0;#endif#if OS_WIN# ifndef _WIN32_WCE  return GetFileAttributes(zFilename) != 0xffffffff;# else  wchar_t * aux = wStrDup( zFilename );  int ret = GetFileAttributesW( aux ) != 0xFFFFFFFF;  free( aux );  return ret;# endif#endif#if OS_MAC  return access(zFilename, 0)==0;#endif}#if 0 /* NOT USED *//*** Change the name of an existing file.*/int sqliteOsFileRename(const char *zOldName, const char *zNewName){#if OS_UNIX  if( link(zOldName, zNewName) ){    return SQLITE_ERROR;  }  unlink(zOldName);  return SQLITE_OK;#endif#if OS_WIN  if( !MoveFile(zOldName, zNewName) ){    return SQLITE_ERROR;  }  return SQLITE_OK;#endif#if OS_MAC  /**** FIX ME ***/  return SQLITE_ERROR;#endif}#endif /* NOT USED *//*** 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 sqliteOsOpenReadWrite(  const char *zFilename,  OsFile *id,  int *pReadonly){#if OS_UNIX  int rc;  id->dirfd = -1;  id->fd = open(zFilename, O_RDWR|O_CREAT|O_LARGEFILE|O_BINARY, 0644);  if( id->fd<0 ){#ifdef EISDIR    if( errno==EISDIR ){      return SQLITE_CANTOPEN;    }#endif    id->fd = open(zFilename, O_RDONLY|O_LARGEFILE|O_BINARY);    if( id->fd<0 ){      return SQLITE_CANTOPEN;     }    *pReadonly = 1;  }else{    *pReadonly = 0;  }  sqliteOsEnterMutex();  rc = findLockInfo(id->fd, &id->pLock, &id->pOpen);  sqliteOsLeaveMutex();  if( rc ){    close(id->fd);    return SQLITE_NOMEM;  }  id->locked = 0;  TRACE3("OPEN    %-3d %s\n", id->fd, zFilename);  OpenCounter(+1);  return SQLITE_OK;#endif#if OS_WIN# ifndef _WIN32_WCE  HANDLE h = CreateFile(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 = CreateFile(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->locked = 0;# else  WCHAR * wFilename = wStrDup( zFilename );  // Try to open for read/write  HANDLE h = CreateFileW( wFilename, GENERIC_READ | GENERIC_WRITE,      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL );  // If it fails, try to open read-only  if ( h==INVALID_HANDLE_VALUE )  {    h = CreateFileW( wFilename, GENERIC_READ, FILE_SHARE_READ, NULL,          OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,          NULL );    if ( h==INVALID_HANDLE_VALUE )	{      free( wFilename );      return SQLITE_CANTOPEN;	}    *pReadonly = 1;  }  else  {    *pReadonly = 0;  }  id->h = h;  id->delOnClose = 0;  id->filePath = wFilename;#  ifndef SQLITE_WCE_OMIT_FILELOCK  // Prepare file lock mechanism  if ( ! wceport_OpenFileLock( id ) )  {     // Failled to initialize file lock mechanism     CloseHandle( id->h );     /* NOTE: the spec says that *id and *pReadOnly should be left              unchanged on failure, but I don't see any problem on              ignoring this here. Should this be fixed ? */     return SQLITE_CANTOPEN;  }#  else // SQLITE_OMIT_FILELOCK  id->hMux   = 0;  id->hSem   = 0;  id->locked = 0;#  endif // SQLITE_OMIT_FILELOCK# endif  OpenCounter(+1);  return SQLITE_OK;#endif#if OS_MAC  FSSpec fsSpec;# ifdef _LARGE_FILE  HFSUniStr255 dfName;  FSRef fsRef;  if( __path2fss(zFilename, &fsSpec) != noErr ){    if( HCreate(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, 'SQLI', cDocumentFile) != noErr )      return SQLITE_CANTOPEN;  }  if( FSpMakeFSRef(&fsSpec, &fsRef) != noErr )    return SQLITE_CANTOPEN;  FSGetDataForkName(&dfName);  if( FSOpenFork(&fsRef, dfName.length, dfName.unicode,                 fsRdWrShPerm, &(id->refNum)) != noErr ){    if( FSOpenFork(&fsRef, dfName.length, dfName.unicode,                   fsRdWrPerm, &(id->refNum)) != noErr ){      if (FSOpenFork(&fsRef, dfName.length, dfName.unicode,                   fsRdPerm, &(id->refNum)) != noErr )        return SQLITE_CANTOPEN;      else        *pReadonly = 1;    } else      *pReadonly = 0;  } else    *pReadonly = 0;# else  __path2fss(zFilename, &fsSpec);  if( !sqliteOsFileExists(zFilename) ){    if( HCreate(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, 'SQLI', cDocumentFile) != noErr )      return SQLITE_CANTOPEN;  }  if( HOpenDF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdWrShPerm, &(id->refNum)) != noErr ){    if( HOpenDF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdWrPerm, &(id->refNum)) != noErr ){      if( HOpenDF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdPerm, &(id->refNum)) != noErr )        return SQLITE_CANTOPEN;      else        *pReadonly = 1;    } else      *pReadonly = 0;  } else    *pReadonly = 0;# endif  if( HOpenRF(fsSpec.vRefNum, fsSpec.parID, fsSpec.name, fsRdWrShPerm, &(id->refNumRF)) != noErr){    id->refNumRF = -1;  }  id->locked = 0;  id->delOnClose = 0;  OpenCounter(+1);  return SQLITE_OK;#endif}/*** 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 sqliteOsOpenExclusive(const char *zFilename, OsFile *id, int delFlag){#if OS_UNIX  int rc;  if( access(zFilename, 0)==0 ){    return SQLITE_CANTOPEN;  }  id->dirfd = -1;  id->fd = open(zFilename,                O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW|O_LARGEFILE|O_BINARY, 0600);  if( id->fd<0 ){    return SQLITE_CANTOPEN;  }  sqliteOsEnterMutex();  rc = findLockInfo(id->fd, &id->pLock, &id->pOpen);  sqliteOsLeaveMutex();  if( rc ){    close(id->fd);    unlink(zFilename);    return SQLITE_NOMEM;  }  id->locked = 0;  if( delFlag ){    unlink(zFilename);  }  TRACE3("OPEN-EX %-3d %s\n", id->fd, zFilename);  OpenCounter(+1);  return SQLITE_OK;#endif#if OS_WIN# ifndef _WIN32_WCE  HANDLE h;  int fileflags;  if( delFlag ){    fileflags = FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_RANDOM_ACCESS                      | FILE_FLAG_DELETE_ON_CLOSE;  }else{    fileflags = FILE_FLAG_RANDOM_ACCESS;  }  h = CreateFile(zFilename,     GENERIC_READ | GENERIC_WRITE,     0,     NULL,     CREATE_ALWAYS,     fileflags,     NULL  );  if( h==INVALID_HANDLE_VALUE ){    return SQLITE_CANTOPEN;  }  id->h = h;  id->locked = 0;# else  WCHAR * wFilename = wStrDup( zFilename );  HANDLE h = CreateFileW( wFilename, GENERIC_READ | GENERIC_WRITE, 0,                NULL, CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS, NULL );  if ( h == INVALID_HANDLE_VALUE )  {    free( wFilename );    return SQLITE_CANTOPEN;  }  id->h = h;  id->delOnClose = delFlag;  id->filePath = wFilename;  id->hMux   = 0;	// Not shared, so no need to lock file  id->hSem   = 0;  id->locked = 0;# endif  OpenCounter(+1);  return SQLITE_OK;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合久久国产九一剧情麻豆| 精品久久久久久亚洲综合网| 成人性生交大片免费看在线播放| 免费观看成人av| 美女在线视频一区| 精品亚洲欧美一区| 国内外精品视频| 丁香婷婷深情五月亚洲| 成人国产亚洲欧美成人综合网| 91黄色在线观看| 色狠狠一区二区三区香蕉| 在线观看av不卡| 欧美狂野另类xxxxoooo| 欧美一区二区在线免费观看| 欧美成人福利视频| 国产精品欧美一区喷水| 亚洲色图19p| 日韩综合在线视频| 麻豆成人av在线| 国产河南妇女毛片精品久久久| 国产成人在线影院 | 日韩三级在线观看| 日韩欧美另类在线| 中文在线一区二区 | 天堂在线一区二区| 麻豆91精品91久久久的内涵| 国产美女主播视频一区| 菠萝蜜视频在线观看一区| 在线中文字幕一区二区| 欧美成人猛片aaaaaaa| 国产精品网站在线播放| 午夜私人影院久久久久| 国产精品一区二区果冻传媒| 91免费国产在线| 日韩欧美在线不卡| 国产精品久久久久国产精品日日| 亚洲电影一级片| 国产成人精品在线看| 欧美人xxxx| 18欧美亚洲精品| 美女视频黄频大全不卡视频在线播放| 国产精品1区2区3区| 欧美日韩一区二区三区视频| 国产日韩在线不卡| 亚洲国产一二三| 成人app网站| 精品国产三级电影在线观看| 亚洲精品老司机| 国产成人精品免费视频网站| 日韩一区二区三区在线观看| 亚洲精品一卡二卡| 国产高清精品久久久久| 91精品国产综合久久久久久久久久| 欧美激情自拍偷拍| 美女任你摸久久| 欧美日韩精品一区视频| 国产精品国产三级国产三级人妇| 久久国产成人午夜av影院| 色综合天天狠狠| 国产精品成人一区二区三区夜夜夜| 久久疯狂做爰流白浆xx| 欧美日韩日日夜夜| 亚洲福中文字幕伊人影院| 99视频精品免费视频| 国产亲近乱来精品视频| 久久电影国产免费久久电影| 91精品国产色综合久久| 亚洲国产日韩精品| 91久久一区二区| 亚洲激情成人在线| 色婷婷av一区二区| 亚洲乱码国产乱码精品精可以看| 国产v综合v亚洲欧| 国产精品午夜免费| 成人h版在线观看| 国产精品欧美极品| av成人免费在线观看| 国产精品欧美一级免费| 99国产欧美另类久久久精品| 中文字幕一区二区三区四区| 99国产欧美久久久精品| 亚洲天堂久久久久久久| 91久久精品网| 亚洲国产精品自拍| 91精品国产麻豆| 蜜桃av噜噜一区二区三区小说| 日韩一区二区视频在线观看| 狠狠色伊人亚洲综合成人| 久久久久久久综合狠狠综合| 成人高清视频免费观看| 一区二区三区在线视频免费| 欧美日韩另类一区| 激情文学综合丁香| 国产精品每日更新| 欧美日韩国产影片| 精品亚洲成av人在线观看| 欧美国产日韩精品免费观看| 91免费视频网址| 麻豆成人在线观看| 国产精品第13页| 欧美一区二区三区在线看| 精品一区二区免费| 亚洲欧美色图小说| 在线播放欧美女士性生活| 国产美女av一区二区三区| 中文字幕亚洲区| 欧美一区三区二区| 成人性色生活片免费看爆迷你毛片| 亚洲欧美日韩在线不卡| 91精品国产色综合久久| jiyouzz国产精品久久| 婷婷国产在线综合| 国产精品久久久久影视| 51精品视频一区二区三区| 成人免费视频视频| 免费观看一级特黄欧美大片| 1000精品久久久久久久久| 日韩一级免费一区| 一本色道a无线码一区v| 九九国产精品视频| 亚洲主播在线播放| 国产丝袜在线精品| 欧美精品精品一区| 不卡影院免费观看| 激情综合五月天| 亚洲.国产.中文慕字在线| 国产精品美女久久久久久久网站| 欧美精品一二三区| 色综合久久久网| 国产激情精品久久久第一区二区| 五月婷婷另类国产| 综合分类小说区另类春色亚洲小说欧美| 日韩午夜三级在线| 欧美日韩一区二区不卡| 色综合久久天天| 97se亚洲国产综合自在线不卡| 国产一区二区三区黄视频 | 国产尤物一区二区在线| 亚洲国产裸拍裸体视频在线观看乱了| 国产欧美日韩三区| 久久伊人中文字幕| 日韩精品一区二区三区三区免费| 欧美日韩五月天| 欧美网站一区二区| 亚洲精品写真福利| 国产精品美女www爽爽爽| 国产亚洲欧美中文| 国产亚洲婷婷免费| 久久久电影一区二区三区| 精品国产电影一区二区| 91精品国产色综合久久不卡蜜臀| 欧美日韩国产高清一区二区| 91久久精品一区二区| 色综合久久99| 在线免费观看日本欧美| 91国偷自产一区二区开放时间 | 亚洲三级在线免费观看| 欧美国产综合一区二区| 国产区在线观看成人精品| 欧美国产精品一区二区三区| 日本一区二区三区dvd视频在线| 久久综合999| 亚洲国产激情av| 国产精品久久久久久久久图文区 | 亚洲国产精品久久久久婷婷884| 夜夜爽夜夜爽精品视频| 午夜影院久久久| 日本不卡视频在线观看| 免费观看久久久4p| 国产成人欧美日韩在线电影| 国产a视频精品免费观看| av资源网一区| 欧美亚洲国产怡红院影院| 欧美日韩精品一二三区| www日韩大片| 欧美激情综合在线| 亚洲地区一二三色| 激情文学综合丁香| 99久久精品免费精品国产| 在线观看日韩精品| 欧美一级欧美一级在线播放| 久久久久久久久岛国免费| 亚洲免费观看高清完整版在线| 五月综合激情婷婷六月色窝| 国产在线播放一区三区四| 91在线码无精品| 这里只有精品99re| 国产精品国产馆在线真实露脸 | 国产一区在线不卡| 不卡的av在线| 9191成人精品久久| 中文字幕第一区第二区| 亚洲综合成人在线视频| 麻豆91在线播放免费| 99re成人精品视频| 日韩一级免费一区| 一区二区在线免费| 国产福利一区二区三区视频在线| 在线观看国产日韩| 日本一区二区三区四区|