📄 romfs.c
字号:
status=FALSE;
break;
}
}
dwPointer=pFile->dwFilePointer + lDistanceToMove;
break;
case FILE_BEGIN:
DEBUGMSG(ZONE_FILE, (TEXT("romfs: SetFilePointer in BEGIN \r\n")));
if( lDistanceToMove < 0 ){
status=FALSE;
SetLastError( ERROR_NEGATIVE_SEEK );
}else{
dwPointer=lDistanceToMove;
}
break;
case FILE_END:
DEBUGMSG(ZONE_FILE, (TEXT("romfs: SetFilePointer in END \r\n")));
if( lDistanceToMove > 0 ){
dwPointer=pFile->nFileSizeLow;
}else{
if( (DWORD)ABS(lDistanceToMove) > pFile->nFileSizeLow){
SetLastError( ERROR_NEGATIVE_SEEK );
status=FALSE;
}else{
dwPointer=pFile->nFileSizeLow + lDistanceToMove;
}
}
break;
default:
status=FALSE;
break;
}
DEBUGMSG(ZONE_FILE, (TEXT("romfs: FileSize-%x, dwPointer-%x \r\n"), pFile->nFileSizeLow, dwPointer));
if( status) {
if( dwPointer > pFile->nFileSizeLow )
dwPointer = pFile->nFileSizeLow;
pFile->dwFilePointer = dwPointer;
SetLastError( 0 );
}else{
dwPointer=0xFFFFFFFF;
}
if( pDistanceToMoveHigh != NULL ) {// because the ISO9660 documents only defines the file size as
// DWORD, this DWORD value is ignored.
// RETAILMSG(ZONE_FILE, (TEXT("romfs:SetFilePointer High move is %d \r\n"),*pDistanceToMoveHigh));
DEBUGMSG(ZONE_FILE, (TEXT("romfs:SetFilePointer not support pDistanceToMoveHigh parm!\r\n")));
/* if(*pDistanceToMoveHigh !=0 ) {
dwPointer =pFile->nFileSizeLow;
pFile->dwFilePointer= dwPointer;
*pDistanceToMoveHigh=0;
}
*/
}
LeaveCriticalSection( &(pFile->cs_File));
DEBUGMSG(ZONE_FILE, (TEXT("romfs: SetFilePointer leaved %d\r\n"),pFile->dwFilePointer));
return dwPointer;
}
/*DWORD DoROM_GetFileSize(PFILE pFileIn, LPDWORD pFileSizeHigh)
{
PROMFILE pFile=(PROMFILE)pFileIn;
DWORD dwSize;
RETAILMSG(ZONE_FILE, (TEXT("romfs: GetFileSize entered\r\n")));
if( ! HELP_IsFile (pFile ) ) {
return 0xFFFFFFFF;
}
if( pFileSizeHigh != NULL ) { //the files in CDROM can take only less than DWORD size.
RETAILMSG(ZONE_FILE, (TEXT("romfs: GetFileSize High size is no NULL\r\n")));
*pFileSizeHigh = 0;
}
EnterCriticalSection( &pFile->cs_File );
dwSize = pFile->nFileSizeLow;
LeaveCriticalSection( &pFile->cs_File );
RETAILMSG(ZONE_FILE, (TEXT("romfs: GetFileSize leaved %x\r\n"),dwSize));
return dwSize;
}*/
//The function don't support now.//
/*BOOL DoROM_GetFileInformationByHandle(PFILE pFileIn, FILE_INFORMATION *pFileInfo)
{
PROMFILE pFile=(PROMFILE)pFileIn;
RETAILMSG(ZONE_FILE, (TEXT("romfs: GetFileInformationByHandle entered\r\n")));
if( ! HELP_IsFile (pFile ) ) {
return FALSE;
}
if( pFileInfo ==NULL ){
SetLastError( ERROR_INVALID_PARAMETER );
return FALSE;
}
EnterCriticalSection( &pFile->cs_File );
memcpy( (PUCHAR)pFileInfo, (PUCHAR)pFile, sizeof( FILE_FIND_DATA ) );
pFileInfo->nNumberOfLinks=1;
pFileInfo->nFileSizeHigh=0;
pFileInfo->nFileSizeLow =pFile->nFileSizeLow;
LeaveCriticalSection( &pFile->cs_File );
RETAILMSG(ZONE_FILE, (TEXT("romfs: GetFileInformationByHandle leaved\r\n")));
return TRUE;
}*/
/*BOOL DoROM_GetFileTime(PFILE pF, FILETIME *pCreation, FILETIME *pLastAccess, FILETIME *pLastWrite)
{
PROMFILE pFile=(PROMFILE) pF;
RETAILMSG(ZONE_FILE, (TEXT("romfs: GetFileTime entered %x\r\n"),pF));
if( ! HELP_IsFile( pFile) ){
return FALSE;
}
RETAILMSG(ZONE_DEBUG, (TEXT("romfs: GetFileTime entered %x create %x ,Access %x, Write %x\r\n")
,pF,pCreation,pLastAccess,pLastWrite));
EnterCriticalSection( &pFile->cs_File );
if( pCreation!=NULL)
*pCreation = pFile->ftCreationTime;
if( pLastAccess !=NULL)
*pLastAccess=pFile->ftLastAccessTime;
if( pLastWrite != NULL)
*pLastWrite = pFile->ftLastWriteTime;
LeaveCriticalSection( &pFile->cs_File );
RETAILMSG(ZONE_FILE, (TEXT("romfs: GetFileTime leaved\r\n")));
return TRUE;
}*/
BOOL ROM_CloseFile(HANDLE pFileClose)
{
return DoROM_CloseFile((PFILE)pFileClose);
}
#define DEBUG_DoROM_CloseFile 1
static BOOL DoROM_CloseFile(PFILE pFileClose)
{
PROMFILE pFile=(PROMFILE)pFileClose;
PROMFILE pF =pFileList;
BOOL status = FALSE;
DEBUGMSG(ZONE_FILE | DEBUG_DoROM_CloseFile, (TEXT("romfs: CloseFile entered\r\n")));
EnterCriticalSection( &Crit_File );
if( pFile == pFileList){
pFileList = pFile->next; // delete the node specified by pFile
DEBUGMSG(ZONE_FILE, (TEXT("romfs: CloseFile succeed\r\n")));
status=TRUE;
}else{
while (pF->next)
{
if( pF->next==pFile ){
pF->next=pFile->next; // delete the node specified by pFile
DEBUGMSG(ZONE_FILE, (TEXT("romfs: CloseFile succeed\r\n")));
status=TRUE;
break;
}
pF = pF->next;
}
}
LeaveCriticalSection( &Crit_File );
if( status ) { // free this node.
CRITICAL_SECTION crit_this=pFile->cs_File;
EnterCriticalSection( &crit_this );
KHeap_Free( pFile, sizeof( ROMFILE) );
//free( pFile);
LeaveCriticalSection( &crit_this);
DeleteCriticalSection(&crit_this);
}else{
SetLastError( ERROR_INVALID_HANDLE);
ERRORMSG(ZONE_FILE, (TEXT("romfs: CloseFile error.\r\n")));
}
DEBUGMSG(ZONE_FILE | DEBUG_DoROM_CloseFile, (TEXT("romfs: CloseFile leaved %x\r\n"),status));
return status;
}
/*
HANDLE DoROM_FindFirstFileW(PVOL pVolume, HANDLE hProc, LPCTSTR pwsFileSpec, FILE_FIND_DATA * pfd)
{
PROMVOLUME pVol=(PROMVOLUME)pVolume;
PROMSEARCH pSearch;
// HANDLE ret;
//RETAILMSG(ZONE_SEARCH,(TEXT("romfs: FindFirstFileW the pSearch path_%s \r\n"), pwsFileSpec));
//RETAILMSG(ZONE_SEARCH,(TEXT("romfs: FindFirstFileW volume %x ,disk %x \r\n"),pVolume, pVol->hDevice));
if( ! IsVolume(pVol) ){
RETAILMSG(ZONE_SEARCH,(TEXT("romfs: FindFirstFileW volume %x is invalid\r\n"),pVolume));
return INVALID_HANDLE_VALUE;
}
if( pwsFileSpec == NULL || pfd == NULL ){
SetLastError( ERROR_INVALID_PARAMETER);
return INVALID_HANDLE_VALUE;
}
EnterCriticalSection( &pVol->cs_Volume );
//RETAILMSG(ZONE_ERROR,(TEXT("rom:1\r\n")));
pSearch=(PROMSEARCH)HELP_FindFirstFile( pVolume, pwsFileSpec, pfd, FIND_NORMAL_CALL );
RETAILMSG(ZONE_SEARCH,(TEXT("romfs:FindFirstFileW %s \r\n"),pfd->cFileName));
if( (HANDLE)pSearch !=INVALID_HANDLE_VALUE ) {
// insert this handle to the search list table head.
strcpy(pSearch->wFileSpecial,pwsFileSpec );
pSearch->pVol = pVol;
RETAILMSG(ZONE_SEARCH,(TEXT("romfs: FindFirstFileW the pSearch path %s \r\n"),pSearch->wFileSpecial));
RETAILMSG(ZONE_SEARCH,(TEXT("romfs: FindFirstFileW before initialize section\r\n")));
InitializeCriticalSection( &pSearch->cs_Search );
RETAILMSG(ZONE_SEARCH,(TEXT("romfs: FindFirstFileW after initialize section\r\n")));
LeaveCriticalSection( &pVol->cs_Volume );
EnterCriticalSection(&Crit_Search);
pSearch->next = pSearchList; // insert this node into list.
pSearchList=pSearch;
LeaveCriticalSection(&Crit_Search);
return (HANDLE)pSearch;
}
RETAILMSG(ZONE_SEARCH,(TEXT("romfs: FindFirstFileW failed %d \r\n"),GetLastError( ) ));
Error_Search:
LeaveCriticalSection(&pVol->cs_Volume);
return INVALID_HANDLE_VALUE;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BOOL DoROM_FindNextFileW(PFIND pSearchBuffer, FILE_FIND_DATA * pfd)
{
LPTOCentry pTocentry;
LPFILESentry pFileentry;
PROMFILE pFile;
PROMSEARCH pSearch= (PROMSEARCH)pSearchBuffer;
WORD wOffset;
WORD wSectorSize;
WORD wOffsetInSector;
PROMVOLUME pCdVol;
BOOL status=FALSE;
UINT index, FileMode;
RETAILMSG(ZONE_SEARCH, (TEXT("romfs: DoROM_FindNextFileW <\r\n")));
if(pSearch->pVol == NULL){
RETAILMSG(ZONE_SEARCH, (TEXT("romfs: DoROM_FindNextFileW parm error!\r\n")));
return FALSE;
}
memset(pfd->cFileName, 0, sizeof(pfd->cFileName));
if( ! HELP_IsSearch (pSearch ) ) {
RETAILMSG(ZONE_ERROR,(TEXT("romfs: FindNextFileW pSearch %x is invalid\r\n"),pSearch));
return FALSE;
}
if( pfd ==NULL ) {
RETAILMSG(ZONE_ERROR,(TEXT("romfs: FindNextFileW pfd (NULL) is invalid\r\n")));
SetLastError( ERROR_INVALID_PARAMETER );
return FALSE;
}
EnterCriticalSection( &pSearch->cs_Search);
// FormatFilePath( (TCHAR *)pSearch->wFileSpecial);
pFile = malloc(sizeof( ROMFILE));
if( pFile != NULL ){
//RETAILMSG(ZONE_ERROR,(TEXT("rom:2\r\n")));
pSearch = HELP_FindFirstFile((PVOL)pSearch->pVol, pSearch->wFileSpecial, (FILE_FIND_DATA *)pFile, FIND_CREATE_CALL);
if(pSearch == INVALID_HANDLE_VALUE){
free(pFile);
return FALSE;
}
if(pFile->dwFileBase != pSearch->pFileBase){
memcpy(pfd, pFile, sizeof(FILE_FIND_DATA));
}else{
RETAILMSG(ZONE_DEBUG, (TEXT("romfs: There is no file!\r\n")));
}
free(pSearch);
free(pFile);
}
LeaveCriticalSection( &pSearch->cs_Search);
RETAILMSG(ZONE_SEARCH, (TEXT("romfs: FindNextFileW leaved %s\r\n"),pfd->cFileName));
return status;
}*/
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*BOOL DoROM_FindClose(PFIND pSearchIn)
{
PROMSEARCH pSearch= (PROMSEARCH)pSearchIn;
PROMSEARCH pSh=pSearchList;
BOOL status=FALSE;
RETAILMSG(ZONE_SEARCH, (TEXT("romfs: FindClose entered %x \r\n"),pSearchIn));
EnterCriticalSection( &Crit_Search );
if( pSearch == pSearchList){
pSearchList = pSearch->next;
status = TRUE;
RETAILMSG(ZONE_SEARCH, (TEXT("romfs: CloseSearchHandle succeed\r\n")));
}else{
while (pSh->next)
{
if( pSh->next == pSearch )
{
pSh->next = pSearch->next;
status = TRUE;
RETAILMSG(ZONE_SEARCH, (TEXT("romfs: CloseSearchHandle succeed\r\n")));
}
}
}
LeaveCriticalSection( &Crit_Search );
if( status ) {
CRITICAL_SECTION crit_this = pSearch->cs_Search;
EnterCriticalSection( &crit_this );
LeaveCriticalSection( &crit_this);
DeleteCriticalSection(&crit_this);
}else{
SetLastError( ERROR_INVALID_HANDLE);
RETAILMSG(ZONE_SEARCH, (TEXT("romfs: CloseSearchHandle failed\r\n")));
}
RETAILMSG(ZONE_SEARCH, (TEXT("romfs: CloseSearchHandle leaved %d\r\n"),status));
return status;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -