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

📄 cdromfslib.c

📁 VxWorks操作系统内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
#include <private/cdromFsVersionP.h> /* CDROMFS_VERSION SPR#78687 */#include <cdromFsLib.h>#include <private/cdromFsLibP.h>     /* Must be after cdromFsLib.h *//* For common source with VxWorks AE */#ifdef	_WRS_VXWORKS_5_X	/* Built for Veloce T2.2 */#undef	VXWORKS_AE		/* Not built for VxWorks AE */#elif	!defined(KHEAP_ALLOC)	/* Built for T2 VxWorks 5.4 */#undef	VXWORKS_AE		/* Not built for VxWorks AE */#define KHEAP_ALLOC	malloc#define KHEAP_FREE	free#else  /* VxWorks AE */#define VXWORKS_AE		/* Built for VxWorks AE */#include <objLib.h>		/* objOwnerSet() */#include <pdLlib.h>		/* pdIdKernelGet() */#endif /* VxWorks AE *//* defines */#define SIZE64/* DEBUG */#ifdef	DEBUG#undef	NDEBUG			/* assert() is active */#define ERR_SET_SELF		/* Display errnoSet() calls */#undef	LOCAL#define LOCAL    int		cdromFsDbg	= 0;    u_char	dbgvBuf[2048];#define DBG_MSG(level)\	if ((level)<=cdromFsDbg) printf#define DBG_COP_TO_BUF(str, len)\	{\	bzero (dbgvBuf, sizeof(dbgvBuf));\	bcopy ((str), dbgvBuf, (len));\	}extern void d (FAST void *adrs, int nunits, int width);#else  /* DEBUG */#define NDEBUG			   /* assert() is inactive */#undef  ERR_SET_SELF		   /* Do not display errnoSet calls */#define DBG_MSG(level)		     if (0) printf#define DBG_COP_TO_BUF(str, len)	(str,len)#endif	/* DEBUG */#include <assert.h>		   /* This must follow the ifdef DEBUG *//* sybsystem version fields SPR#78687 */#define SUBSYSTEM_VERSION_MAJOR(VERSION)	LMSB(VERSION)#define SUBSYSTEM_VERSION_MINOR(VERSION)	LNMSB(VERSION)#define SUBSYSTEM_VERSION_PATCH(VERSION)	LNLSB(VERSION)#define SUBSYSTEM_VERSION_BUILD(VERSION)	LLSB(VERSION)/* paramaters (Can be changed) */#define CDROM_LIB_MAX_PT_SIZE (4*64 KB) /* maximum path table size supported *//* constants (Cannot be changed or no need to change) */#define SLASH		'/'#define BACK_SLASH	'\\'#define POINT		'.'#define SEMICOL		';'/* SEC_BUF struct constant */#define CDROM_COM_BUF_SIZE	  3	/* sectors to read via single access *//* * All character variables in the module are defined as u_char (*). * Following macros are defined to prevent compilation warnings */#define bzero(a,b)	bzero ((char *)(a), (b))#define bcopy(a,b,c)	bcopy ((char *)(a), (char *)(b), (c))#define strncpy(a,b,c)	strncpy ((char *)(a), (char *)(b), (c))#define strcpy(a,b)	strcpy ((char *)(a), (char *)(b))#define strncmp(a,b,c)	strncmp ((char *)(a), (char *)(b), (c))#define strcmp(a,b)	strcmp ((char *)(a), (char *)(b))#define strchr(a,b)	strchr ((char *)(a), (b))#define strspn(a,b)	strspn ((char *)(a), (char *)(b))/* * Under development all errors are not set to <errno> directly, but * logged on the console with some comments */#ifdef ERR_SET_SELF#define errnoSet(a)	errnoSetOut (__LINE__, (u_char *)#a, (a))#endif/* Macros *//* data fields in buffer may not be bounded correctly */#define C_BUF_TO_SHORT(dest, source, start)\	{\	CDROM_SHORT buf;\	bcopy ((u_char *)(source)+ (start), (u_char *)&buf, sizeof(buf));\	(dest) = buf;\	}#define C_BUF_TO_LONG(dest, source, start)\	{\	CDROM_LONG buf;\	bcopy ((u_char *)(source)+ (start), (u_char *)&buf, sizeof(buf));\	(dest) = buf;\	}#define LAST_BITS(val,bitNum)	((~((u_long)(-1)<<(bitNum)))&((u_long)val))					/* Rounded up number of as per b */#define A_PER_B(a,b)		(((a)+(b)-1)/(a))/* to get some fields from path table records */#define PT_REC_SIZE(size, pPT)	((size) = ((u_char)(*(pPT)+(*(pPT)&1))+ISO_PT_REC_DI))#define PT_PARENT_REC(prev, pPT)\	C_BUF_TO_SHORT (prev, pPT, ISO_PT_REC_PARENT_DIR_N)/* to assign secBuf as empty */#define LET_SECT_BUF_EMPTY(pSecBuf)	((pSecBuf)->numSects = 0)/* Logical expressions */#define	IF_A_THEN_B(A,B)	(~((A) && ~(B)))/* typedefs */#ifdef SIZE64typedef long long	fsize_t;#elsetypedef size_t		fsize_t;#endif /* SIZE64 */typedef u_short CDROM_SHORT;	/* 2-bytes fields */typedef u_long	CDROM_LONG;	/* 4-bytes fields *//* globals */STATUS cdromFsInit (void);/* cdrom file system number in driver table */int	cdromFsDrvNum = ERROR;/* locals */#ifdef	DEBUG/* *  Pointers to structs for symbolic debugging use * * If you need to display a struct, set one of these pointers and then * print it. */T_ISO_VD_HEAD *	     pCdromFsDbgTIsoVdHead; /* VD header */T_ISO_VD_DATE_TIME * pCdromFsDbgTIsoVdDateTime; /* VolDesc date/time */T_ISO_PVD_SVD *	     pCdromFsDbgTIsoPvdSvd; /* Prim/Sup Volume Descriptor */SEC_BUF *	     pCdromFsDbgSecBuf; /* Sector buf (Disk cache) */CDROM_VOL_DESC *     pCdromFsDbgVolDesc; /* Mounted CD volume */T_CDROMFS_VD_LST *   pCdromFsDbgTCdromfsVdLst; /* VolDesc of mounted volume */T_FILE_DATE_TIME *   pCdromFsDbgTFileDateTime; /* Directory date/time */T_CDROM_FILE *	     pCdromFsCdromFile;	/* File descriptor */#endif/* forward declarations */#ifdef ERR_SET_SELFLOCAL VOID errnoSetOut(int line, const u_char * str, int err);#endifLOCAL T_CDROM_FILE_ID	cdromFsFDAlloc (CDROM_VOL_DESC_ID pVolDesc);LOCAL void		cdromFsFDFree (T_CDROM_FILE_ID pFD);LOCAL STATUS		cdromFsSectBufAlloc (CDROM_VOL_DESC_ID pVolDesc,					     SEC_BUF_ID pSecBuf,					     int numSectInBuf);LOCAL STATUS		cdromFsSectBufAllocBySize (CDROM_VOL_DESC_ID pVolDesc,						   SEC_BUF_ID pSecBuf,						   int size);LOCAL void		cdromFsSectBufFree (SEC_BUF_ID pSecBuf);LOCAL u_char *		cdromFsGetLS (CDROM_VOL_DESC_ID pVolDesc, u_long LSNum,				      u_long maxLBs, SEC_BUF_ID secBuf);LOCAL u_char *		cdromFsGetLB (T_CDROMFS_VD_LST_ID pVDLst, u_long LBNum,				      u_long maxLBs, SEC_BUF_ID secBuf);LOCAL u_char *		cdromFsDIRGet (T_CDROM_FILE_ID	pFD);LOCAL u_char *		cdromFsPTGet (T_CDROMFS_VD_LST_ID pVdLst,				      SEC_BUF_ID pSecBuf);LOCAL u_long		cdromFsNextPTRec (u_char ** ppPT, u_long offset,					  u_long PTSize);LOCAL u_char		cdromFsShiftCount (u_long source, u_long dest);LOCAL STATUS		cdromFsVDAddToList (CDROM_VOL_DESC_ID pVolDesc,					    const u_char * pVDData,#ifdef	CDROMFS_MULTI_SESSION_SUPPORT					    u_long SesiPseudoLBNum,#endif	/* CDROMFS_MULTI_SESSION_SUPPORT */					    u_long VDPseudoLBNum,					    u_short uniCodeLev,					    u_char VDSizeToLSSizeShift);LOCAL void		cdromFsVolUnmount (CDROM_VOL_DESC_ID pVolDesc);LOCAL STATUS		cdromFsVolMount (CDROM_VOL_DESC_ID pVolDesc);LOCAL time_t		cdromFsDirDateTime2Long (const T_FILE_DATE_TIME *						 pDateTime);LOCAL STATUS		cdromFsFillFDForDir (T_CDROMFS_VD_LST_ID pVDList,					     T_CDROM_FILE_ID pFD,					     u_char * pPTRec,					     u_int dirRecNumInPT);LOCAL STATUS		cdromFsFillFDForFile (T_CDROMFS_VD_LST_ID pVDList,					      T_CDROM_FILE_ID pFD);#ifdef	CDROMFS_MODE_AUTO_COMBINE_VOLUME_DESCRIPTORSLOCAL u_long		cdromFsFindDirEntered (const u_char * pPTRec,					       u_short LBSize);LOCAL u_long		cdromFsAddRecsToFD (u_char *	RecpPTRec,					    u_int RecStartOff,					    u_char * FdpPTRec,					    u_int FdStartOff,					    u_int numOfRecCopy,					    u_int destSize);#endif	/* CDROMFS_MODE_AUTO_COMBINE_VOLUME_DESCRIPTORS */LOCAL int		cdromFsStrUpcaseCmp (const u_char * string1,					     const u_char * string2);LOCAL STATUS		cdromFsFindFileInDir (T_CDROMFS_VD_LST_ID pVDList,					      T_CDROM_FILE_ID pFD,					      const u_char * name,					      u_char * pPTRec,					      u_int dirRecNumInPT);LOCAL int		cdromFsFilenameLength (const u_char * name);LOCAL int		cdromFsFilenameCompare (const u_char * name,						const u_char * string,						u_int stringLen, BOOL upCase);#ifdef	CDROMFS_MODE_AUTO_COMBINE_VOLUME_DESCRIPTORSLOCAL int		cdromFsDirEntryCompare (const u_char * name1,						const u_char * name2,						u_int name1Len,						u_int name2Len,						BOOL upCase);#endif	/* CDROMFS_MODE_AUTO_COMBINE_VOLUME_DESCRIPTORS */LOCAL int		cdromFsFindDirOnLevel (T_CDROMFS_VD_LST_ID pVDList,					       const u_char * name,					       u_char * pPT,					       u_int parDirNum,					       u_int * pPathLev,					       u_char ** ppRecord);#ifdef	CDROMFS_MODE_AUTO_COMBINE_VOLUME_DESCRIPTORSLOCAL STATUS		cdromFsDirEntriesOtherVDAdd (T_CDROMFS_VD_LST_ID						     pVDList,						     const u_char * path,						     T_CDROM_FILE_ID pFD);#endif	/* CDROMFS_MODE_AUTO_COMBINE_VOLUME_DESCRIPTORS */LOCAL STATUS		cdromFsFindPathInDirHierar(T_CDROMFS_VD_LST_ID pVDList,						   const u_char * path,						   T_CDROM_FILE_ID pFD,						   int options);LOCAL T_CDROM_FILE_ID	cdromFsFindPath (CDROM_VOL_DESC_ID pVolDesc,					 const u_char * path, int options);LOCAL STATUS		cdromFsFillStat (T_CDROM_FILE_ID fd,struct stat * arg);#if 0			/* NOT USED until record format files supported */LOCAL STATUS		cdromFsCountMdu (T_CDROM_FILE_ID fd, int prevabsoff);#endif /* NOT USED until record format files supported */LOCAL STATUS		cdromFsFillPos (T_CDROM_FILE_ID fd,u_char *PrevDirPtr,					short i, int len, int NewOffs);LOCAL STATUS		cdromFsSkipDirRec (T_CDROM_FILE_ID fd, u_char flags);LOCAL STATUS		cdromFsDirBound (T_CDROM_FILE_ID fd);LOCAL void		cdromFsSkipGap (T_CDROM_FILE_ID fd , u_long * fsLb,					long absPos);LOCAL void		cdromFsFixFsect (T_CDROM_FILE_ID fd);LOCAL STATUS		cdromFsVolLock (CDROM_VOL_DESC_ID pVolDesc,					int errorValue,					BOOL mountIfNotMounted);LOCAL T_CDROM_FILE_ID	cdromFsOpen (CDROM_VOL_DESC_ID	pVolDesc,				     const u_char * path, int options);LOCAL STATUS		cdromFsClose (T_CDROM_FILE_ID pFD);LOCAL STATUS		cdromFsReadOnlyError (void);LOCAL STATUS		cdromFsLabelGet (T_CDROM_FILE_ID fd, char * pLabel);LOCAL STATUS		cdromFsSeek (T_CDROM_FILE_ID fd, fsize_t posArg);LOCAL STATUS		cdromFsDirSeek (T_CDROM_FILE_ID fd, DIR * pDir);LOCAL u_char *		cdromFsUnicodeStrncpy (u_char * dstString,					       size_t dstLen,					       const u_char * srcString,					       size_t srcLen);LOCAL STATUS		cdromFsDirRead (T_CDROM_FILE_ID fd, DIR * pDir);#ifdef	CDROMFS_MULTI_SESSION_SUPPORTLOCAL STATUS		cdromFsTocRead (CDROM_VOL_DESC_ID pVolDesc,					CDROM_TRACK_RECORD * pCdStatus);#endif	/* CDROMFS_MULTI_SESSION_SUPPORT */LOCAL STATUS		cdromFsIoctl (T_CDROM_FILE_ID fd, int function,				      int arg);LOCAL STATUS		cdromFsRead (int desc, u_char * buffer,				     size_t maxBytes);LOCAL STATUS		cdromFsReadyChange (CDROM_VOL_DESC_ID pVDList);LOCAL STATUS		cdromFsVolDescGet (T_CDROMFS_VD_LST_ID pVDList,					   T_ISO_PVD_SVD * pVolDescOut);LOCAL CDROM_VOL_DESC_ID	cdromFsDevDelete (void * arg, STATUS retStat);#ifdef	DEBUG#ifdef	CDROMFS_MULTI_SESSION_SUPPORTvoid			cdromFsTocPrint (CDROM_TRACK_RECORD * pCdStatus);#endif	/* CDROMFS_MULTI_SESSION_SUPPORT */void			cdromFsDiskDirDateTimePrint (const T_FILE_DATE_TIME *						     pDateTime);const u_char *		cdromFsDiskDirPrint (const u_char * pDirRec,					     T_CDROMFS_VD_LST_ID pVDList);T_CDROM_FILE_ID		cdromFsFDPrint (T_CDROM_FILE_ID	pFD, BOOL printEAR,					u_char * message, u_long line);const u_char *		cdromFsDiskPTPrint (const u_char * pPTRec);LOCAL time_t		cdromFsVDDateTime2Long (const T_ISO_VD_DATE_TIME *						pDateTime);void			cdromFsDiskVDDateTimePrint (const T_ISO_VD_DATE_TIME *						    pDateTime);void			cdromFsDiskEARPrint (const u_char * pEAR);LOCAL STATUS		cdromFsSectBufAllocByLB (T_CDROMFS_VD_LST_ID pVDList,						 SEC_BUF_ID pSecBuf,						 int numLB);int			cdDump (CDROM_VOL_DESC_ID pVolDesc, u_long LBRead);#endif	/* DEBUG *//***************************************************************************** cdromFsInit - initialize cdromFsLib** This routine initializes cdromFsLib.	It must be called exactly* once before calling any other routine in cdromFsLib.** RETURNS: OK or ERROR, if driver can not be installed.** ERRNO: S_iosLib_DRIVER_GLUT** SEE ALSO: cdromFsDevCreate(), iosLib.h*/STATUS cdromFsInit (void)    {    if (cdromFsDrvNum != ERROR)	{	return OK;		/* SPR#78456 */	}    /* install cdromFs into driver table */    cdromFsDrvNum = iosDrvInstall (	 (FUNCPTR) cdromFsReadOnlyError, /* pointer to driver create func */	 (FUNCPTR) cdromFsReadOnlyError, /* pointer to driver delete func */	 (FUNCPTR) cdromFsOpen,		 /* pointer to driver open func */	 (FUNCPTR) cdromFsClose,	 /* pointer to driver close func */	 (FUNCPTR) cdromFsRead,		 /* pointer to driver read func */	 (FUNCPTR) cdromFsReadOnlyError, /* pointer to driver write func */	 (FUNCPTR) cdromFsIoctl		 /* pointer to driver ioctl func */	);    if (cdromFsDrvNum == ERROR)	{	printf ("cdromFsLib: iosDrvInstall failed\n");	/* SPR#32715, SPR#32726 */	}#ifdef	DEBUG    else	{	DBG_MSG (1)("%d. cdromFsLib: Initialized\n", __LINE__);	}#endif	/* DEBUG */    return (cdromFsDrvNum == ERROR ? ERROR : OK); /* SPR#78456 */    } /* cdromFsInit() */#ifdef ERR_SET_SELF/***************************************************************************** errnoSetOut - put error message** This routine is called instead of errnoSet() during module creation.** RETURNS: N/A*/LOCAL VOID errnoSetOut    (    int line,    const u_char * str,    int err    )    {    printf ("ERROR: line %d : %s = 0x%x\n", line, str, err);    errno = err;    }#endif	/* ERR_SET_SELF *//***************************************************************************** cdromFsFDAlloc - allocate file descriptor structure** This routine allocates a file descriptor structure and initializes some* of its base members, such as 'magic' and 'sectBuf'.  Later, you can use* this file descriptor structure when opening a file.  However, be aware that* the file descriptor allocated here is not yet connected to the volume's file* descriptor list.  To free the file descriptor structure allocated here,* use cdromFsFDFree ().** RETURNS: ptr to FD or NULL.** ERRNO: S_memLib_NOT_ENOUGH_MEMORY*/LOCAL T_CDROM_FILE_ID cdromFsFDAlloc    (    CDROM_VOL_DESC_ID	pVolDesc	/* processed volume */    )    {    T_CDROM_FILE_ID	pFD = KHEAP_ALLOC (sizeof(T_CDROM_FILE));    if (pFD == NULL)	return NULL;    bzero (pFD, sizeof (T_CDROM_FILE));

⌨️ 快捷键说明

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