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

📄 mfm55getobjinfo.c

📁 我今天开始上传5份TI、NXP、MTK的手机开发全套资料。希望对大家有很大的帮助
💻 C
字号:
#ifdef FSS_FTR#define ACCESS_RIGHTS_INTERNAL_MFM#define MFM55GETOBJINFO_C#include "mFm.h"#undef  FILE_NUMBER#define FILE_NUMBER 55 #undef PROCEDURE_NUMBER #define PROCEDURE_NUMBER 1void mFm55_01GetObjInfo( void * pp_LayerContext,void * pp_Param){   t_fs_llGetObjInfo * pl_Param = (t_fs_llGetObjInfo *) pp_Param;   char * pl_CurrPath = pl_Param->p_RestOfPath;   char * pl_NextSlatch;   u32    vl_ObjNameSize;   t_ObjectInfo * pl_ObjInfo = pl_Param->p_ObjInfo;   t_DirFileInfo * pl_DirFileInfo = (t_DirFileInfo *) &pl_ObjInfo->a_LowLayerPrivate[0];   u8 vl_LastToken = FALSE;    /* Is the path empty ( then we are at base of current working directory ) */    if ( pl_CurrPath == NIL )    {	/* If no object is knowed we are at root of the volume */    	if ( pl_ObjInfo->s_FileStatus.v_ObjExist == FALSE )	{	    /* ID is set to 0, object to exist and to type directory */ 	    pl_ObjInfo->v_ObjID = 0;	    pl_ObjInfo->s_FileStatus.v_ObjExist = TRUE;	    pl_ObjInfo->s_FileStatus.v_ObjIsFile = FALSE;	}	/* Size of last token in path is set to 0 */	pl_ObjInfo->v_SizeOfLastTokenInPath = 0;        /* Get to lower layer to have size of object */        MC_MFM_LL_GET_FILE_SIZE( pl_ObjInfo->v_ObjID, &pl_ObjInfo->v_FileSize, pl_Param->p_Status);	/* If status not OK return ( object in CWD deleted, acces time out ....) */	if ( *(pl_Param->p_Status) != FS_OK ) return;	/* Updates directory file info */	pl_DirFileInfo->v_Exist = TRUE;	pl_DirFileInfo->v_TypeOfObj = FS_OBJECT_DIR;	pl_DirFileInfo->v_IdOfObj = pl_ObjInfo->v_ObjID;	pl_DirFileInfo->v_FileSize = pl_ObjInfo->v_FileSize;	return;    }    /* If an existing object is already knowed we begin to search from this ID */    if ( pl_ObjInfo->s_FileStatus.v_ObjExist )    { 	pl_ObjInfo->v_DirID = pl_ObjInfo->v_ObjID;    }    /* Else we are at root of volume */    else    {	pl_ObjInfo->v_DirID = 0;    }    /* The directory exist */    pl_ObjInfo->s_FileStatus.v_DirExist = TRUE;    /* We suppose the object do not exist */    pl_ObjInfo->s_FileStatus.v_ObjExist = FALSE;    for(;;)    {    	/* Search size of object name until next '/'  or '\0' character */    	pl_NextSlatch = strchr( pl_CurrPath, '/');    	if ( pl_NextSlatch != 0 )	{	     vl_ObjNameSize = ((u32) (pl_NextSlatch - pl_CurrPath ));		}    	else /* No slatch found -> it is the last token (object name) */    	{	    /* Determine lenght of name */	    vl_ObjNameSize = strlen(pl_CurrPath);	    /* Note that it is the last token */	    vl_LastToken = TRUE;    	}	/* If name of size is null we are in the situation where we have "//" or 		"/\0" ( the path end with a '/' ) in the path,		 a so path is not acceptable return an error */    	if ( vl_ObjNameSize == 0 ) 	{	    *(pl_Param->p_Status) = FS_ENOENT;	    return;	}	/* A token exist search it *//* + LMSqa27027 removed */#if 0/* LMSqa01565 - 19/01/04 - tcmc_wbm */#endif/* - LMSqa27027 removed */	mFm80_03SearchObjByNameInDir( pl_ObjInfo->v_DirID, pl_CurrPath, vl_ObjNameSize,/* + LMSqa27027 removed */#if 0							 pl_DirFileInfo, pl_Param->p_Status, pp_LayerContext );								 /* End LMSqa01565 */#endif/* - LMSqa27027 removed *//* + LMSqa27027 new */							 pl_DirFileInfo, pl_Param->p_Status );								 /* - LMSqa27027 new */	/* If status not OK return ( object in CWD deleted, acces time out ....) */	if ( *(pl_Param->p_Status) != FS_OK ) return;      /* Update object info structure */      /*------------------------------*/	/* If it is the last token the object information is to update */  	if ( vl_LastToken )	{	    /* Object exist ? */	    if ( pl_DirFileInfo->v_Exist ) 	    {	    	/* Update ID of object */   	    	pl_ObjInfo->v_ObjID = pl_DirFileInfo->v_IdOfObj;		/* Initialize file size to 0 */		pl_ObjInfo->v_FileSize = 0;    	 	/* Get to lower layer to have size of file */    	    	MC_MFM_LL_GET_FILE_SIZE( pl_DirFileInfo->v_IdOfObj, &pl_ObjInfo->v_FileSize, 									pl_Param->p_Status);		/* If status not OK return ( object in CWD deleted, acces time out ....) */		if (( *(pl_Param->p_Status) != FS_OK ) &&		    ( *(pl_Param->p_Status) != FSS_ERR_MEMORY_CORRUPTED ))		    return;	    	/* Update existence of object */   	    	pl_ObjInfo->s_FileStatus.v_ObjExist = TRUE;	    	/* Update type of object */	    	if ( pl_DirFileInfo->v_TypeOfObj == FS_OBJECT_FILE)				 pl_ObjInfo->s_FileStatus.v_ObjIsFile = TRUE;	    	else pl_ObjInfo->s_FileStatus.v_ObjIsFile = FALSE;		/* Update state of object */		if ( pl_ObjInfo->v_FileSize == 0) pl_ObjInfo->s_FileStatus.v_ObjIsEmpty = TRUE;		else pl_ObjInfo->s_FileStatus.v_ObjIsEmpty = FALSE;	    }	        /* Object do not exist */	    else pl_ObjInfo->s_FileStatus.v_ObjExist = FALSE;	    /* End of path reached exit the loop */	    break;	}	else  /* It is not the last token so it is the directory info which is to update */	{	    /* Object exist ? */	    if ( pl_DirFileInfo->v_Exist )	    {		/* Is the object a directory */		if ( pl_DirFileInfo->v_TypeOfObj == FS_OBJECT_DIR )		{	    	    /* Update ID of directory */   	    	    pl_ObjInfo->v_DirID = pl_DirFileInfo->v_IdOfObj;		    /* Point on rest of path */		    pl_CurrPath = pl_NextSlatch +1;		}		else /* It is a file -> error because the path is not finish 			and we find a file */		{		    /* Set the error invalid path */	    	    *(pl_Param->p_Status) = FS_ENOTDIR;		    /* Clear existence of dir and obj */		    pl_ObjInfo->s_FileStatus.v_ObjExist = FALSE;		    pl_ObjInfo->s_FileStatus.v_DirExist = FALSE;	    	    return;		    		}	    }	    else /* object do not exist like it is not the last token -> error */	    {		/* Set the error invalid path */	    	*(pl_Param->p_Status) = FS_ENOENT;		/* Clear existence of dir and obj */		pl_ObjInfo->s_FileStatus.v_ObjExist = FALSE;		pl_ObjInfo->s_FileStatus.v_DirExist = FALSE;		return;	    }	}    }      /* Update displacement and size of last token in object info */    pl_ObjInfo->p_LastTokenInPath = pl_CurrPath;    pl_ObjInfo->v_SizeOfLastTokenInPath = vl_ObjNameSize;}#endif /* FSS_FTR */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -