📄 mfm55getobjinfo.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 + -