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

📄 romfs.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 3 页
字号:
					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 + -