📄 fs26fseek.c
字号:
#ifdef FSS_FTR#define ACCESS_RIGHTS_INTERNAL_FS#define FS26FSEEK_C#undef FILE_NUMBER#define FILE_NUMBER 26 #include "Fs.h"#undef PROCEDURE_NUMBER #define PROCEDURE_NUMBER 1void Fs26_01FSeek ( void * pp_Param ){ register t_FsCmdFSeek * pl_Param = ( t_FsCmdFSeek * ) pp_Param; register t_fsFILE * pl_Stream = pl_Param->p_Stream; register s32 vl_NewPosition; register s32 vl_BasePosition;/* #ifdef FS_DEBUG */ /* Verify if vp_Stream point on a stream if not OK enter an exception */ MC_FS_CO_VERIFY_IF_IS_FILE_OF_ENTITY( pl_Param, pl_Stream ); if ( MC_FS_STATUS(pl_Param) != FS_OK ) return;/* #endif */ /* Note that an operation was executed on the stream */ pl_Stream->v_OperationExecuted = 1; /* Determine base of the position */ switch (pl_Param->v_Whence) { case FS_SEEK_SET: vl_BasePosition = 0; break; case FS_SEEK_CUR: vl_BasePosition = pl_Stream->v_FilePosition; break; case FS_SEEK_END: vl_BasePosition = pl_Stream->v_FileSize; break; /* Error return */ default: { /* Err unknow whence -> invalid argument */ MC_FS_STATUS(pl_Param) = FS_EINVAL; return ; } } /* Set the interlayer table pointer */ MC_FS_LL_SET_NEW_VOL(MC_FS_VD_GET_VOL_PTR_OF_FILE( pl_Stream )); /* Calculate new position */ vl_NewPosition = vl_BasePosition + pl_Param->v_Offset; /* Verify if position not out of file */ if ( ( vl_NewPosition < 0 ) || (vl_NewPosition > pl_Stream->v_FileSize) ) { /* Err invalid argument */ MC_FS_STATUS(pl_Param) = FS_EINVAL; return ; } /* Updates file position */ pl_Stream->v_FilePosition = vl_NewPosition; /* If file can be readen and writen modify file state to READ_WRITE */ if ( ( pl_Stream->s_OpenMode.v_WriteEnabled == TRUE ) && ( pl_Stream->s_OpenMode.v_ReadEnabled == TRUE ) ) pl_Stream->v_StreamState = FS_SSTATE_READ_OR_WRITE; /* Update IO buffer content from file */ MC_FS_BF_UPDATE_IO_BUFF_FROM_FILE( pl_Stream, vl_NewPosition );}#undef PROCEDURE_NUMBER #define PROCEDURE_NUMBER 2u32 Fs26_02ProcessFSeek(u8 vp_Behaviour, t_fsFILE * pp_Stream, s32 vp_Offset, s32 vp_Whence ){ /* Reserve message space */ t_FsCmdFSeek * pl_FSeek = (t_FsCmdFSeek * ) MC_FS_GET_MEMORY(sizeof(t_FsCmdFSeek)); /* Fill message with input parameters */ pl_FSeek->p_Stream = pp_Stream; pl_FSeek->v_Offset = vp_Offset; pl_FSeek->v_Whence = vp_Whence; /* Send message by setting operation and return command identifier */ return( MC_FS_MA_SEND_CMD_MSG_TO_FS(vp_Behaviour, (void*)pl_FSeek,FS_CMD_FSEEK_REQ ));}#endif /* FSS_FTR */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -