288 lines
9.6 KiB
C
288 lines
9.6 KiB
C
/* cdromFsLib.h - ISO 9660 File System definitions */
|
|
|
|
/*
|
|
* Copyright (c) 1997-2005, 2010 Wind River Systems, Inc.
|
|
*
|
|
* The right to copy, distribute, modify or otherwise make use
|
|
* of this software may be licensed only pursuant to the terms
|
|
* of an applicable Wind River license agreement.
|
|
*/
|
|
|
|
/*
|
|
modification history
|
|
--------------------
|
|
02n,29apr10,pad Moved extern C statement after include statements.
|
|
02m,20dec05,pcm added parameter <commonbBufferSize> to cdromFsInit()
|
|
02l,11aug05,aeg moved cdromFsDevDelete() prototype from cdromFsLibP.h
|
|
02k,30apr05,aeg deprecated cdromFsVersionNumGet() and cdromFsVersionDisplay();
|
|
removed inclusion of private/cdromFsLibP.h;
|
|
changed cdromFsDevCreate() to accept device_t not BLK_DEV *;
|
|
removed prototype for non-existent function cdromFsDevReset().
|
|
02j,08apr05,jge increased CDROM_MAX_FILE_NAME_LEN after seeing CDs that
|
|
break the Joliet 128-byte filename limit.
|
|
02i,05dec02,tkj cdromFs joliet code review changes.
|
|
02h,22oct02,tkj Change ioctl() codes to standard values.
|
|
02g,10oct02,tkj Code cleanup: Split into cdromFsLib.h and cdromFsLibP.h.
|
|
02f,01oct02,tkj Fix SPR#78416 Handles .. wrong. Accepts path xx/../yy even
|
|
if xx does not exist.
|
|
02e,16sep02,tkj Fix compiler errors/warnings.
|
|
02d,20aug02,tkj More work on SPR#78208 - Productice Joliet extensions;
|
|
Changes from Europe.
|
|
02c,27jun02,tkj More work on SPR#78208 - Productice Joliet extensions.
|
|
02b,26jun02,tkj Enchancememts: SPR#78208 - Productice Joliet extensions.
|
|
Bug fixes: SPR#32715/SPR#34826, SPR#78415, SPR#78452,
|
|
SPR#78454, SPR#78455, SPR#78456, SPR#79162.
|
|
Bugs not fixed yet: SPR#34659, SPR#75766, SPR#78416,
|
|
SPR#79162.
|
|
02a,26jun02,tkj Checkin cdromFsLib Joliet extensions as received from Wind
|
|
River Services in the Netherlands. It needs work to be
|
|
productized.
|
|
01b,07dec98,lrn add C++ support (SPR#23776)
|
|
01a,10apr97,dds SPR#7538: add CDROM file system support to vxWorks.
|
|
*/
|
|
|
|
/*
|
|
* currently only ISO 9660 is supported. All data dependent on this
|
|
* standard has prefix "ISO", or "iso" or "Iso"
|
|
*/
|
|
|
|
#ifndef cdromFsLib_h
|
|
#define cdromFsLib_h
|
|
|
|
/* includes */
|
|
|
|
#include <vxWorks.h>
|
|
#include <drv/xbd/xbd.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* defines */
|
|
|
|
/* Sizes */
|
|
|
|
#define KB *1024
|
|
|
|
#define CDROM_STD_LS_SIZE (2 KB) /* standard cdrom logical sector size */
|
|
|
|
#define CDROM_MAX_PATH_LEN 1024
|
|
#define CDROM_MAX_FILE_NAME_LEN 256
|
|
|
|
/*
|
|
* ioctl() function codes
|
|
*/
|
|
|
|
#define CDROMFS_IOCTL(X) ((M_cdromFsLib >> 8) | (X))
|
|
|
|
/* Joliet support */
|
|
|
|
#define CDROMFS_DIR_MODE_SET CDROMFS_IOCTL(0)
|
|
#define CDROMFS_DIR_MODE_GET CDROMFS_IOCTL(1)
|
|
|
|
/* Miscellaneous */
|
|
|
|
#define CDROMFS_STRIP_SEMICOLON CDROMFS_IOCTL(2)
|
|
#define CDROMFS_GET_VOL_DESC CDROMFS_IOCTL(3)
|
|
|
|
/* Multi-session support */
|
|
|
|
#define CDROMFS_SESSION_NUMBER_SET CDROMFS_IOCTL(4)
|
|
#define CDROMFS_SESSION_NUMBER_GET CDROMFS_IOCTL(5)
|
|
#define CDROMFS_MAX_SESSION_NUMBER_GET CDROMFS_IOCTL(6)
|
|
|
|
#define DEFAULT_SESSION 100
|
|
|
|
/* Obsolete - For backwards compatibility only */
|
|
|
|
#define IOCTL_DIR_MODE_SET CDROMFS_DIR_MODE_SET
|
|
#define IOCTL_DIR_MODE_GET CDROMFS_DIR_MODE_GET
|
|
#define IOCTL_STRIP_SEMICOLON CDROMFS_STRIP_SEMICOLON
|
|
#define IOCTL_GET_VOL_DESC CDROMFS_GET_VOL_DESC
|
|
#define IOCTL_SESSION_NUMBER_SET CDROMFS_SESSION_NUMBER_SET
|
|
#define IOCTL_SESSION_NUMBER_GET CDROMFS_SESSION_NUMBER_GET
|
|
#define IOCTL_MAX_SESSION_NUMBER_GET CDROMFS_MAX_SESSION_NUMBER_GET
|
|
|
|
/* Mode values for IOCT_DIR_MODE_SET/GET */
|
|
|
|
#define MODE_ISO9660 0
|
|
#define MODE_JOLIET 1
|
|
#define MODE_AUTO 2
|
|
#define MODE_MAX MODE_AUTO
|
|
#define MODE_DEFAULT MODE_ISO9660
|
|
|
|
/*
|
|
* ISO Volume Descriptors
|
|
*/
|
|
|
|
/* constants */
|
|
|
|
#define ISO_PVD_BASE_LS 16
|
|
#define ISO_STD_ID "CD001" /* must be in each VD */
|
|
#define ISO_STD_ID_SIZE 5 /* must be in each VD */
|
|
#define ISO_VD_SIZE 2048
|
|
|
|
#define ISO_VD_VERSION ((u_char)1)
|
|
|
|
/* Volume descriptor (VD) types: */
|
|
|
|
#define ISO_VD_BOOT ((u_char)0)
|
|
#define ISO_VD_PRIMARY ((u_char)1)
|
|
#define ISO_VD_SUPPLEM ((u_char)2)
|
|
#define ISO_VD_PARTN ((u_char)3)
|
|
#define ISO_VD_SETTERM ((u_char)255)
|
|
|
|
/* typedefs */
|
|
|
|
/*
|
|
* Primary/Secondary volume descriptor returned by ioctl(IOCTL_GET_VOL_DESC)
|
|
*/
|
|
|
|
/* Volume descriptor date/time field */
|
|
|
|
#define ISO_V_DATE_TIME_YEAR_SIZE 4
|
|
#define ISO_V_DATE_TIME_FIELD_STD_SIZE 2
|
|
#define ISO_V_DATE_TIME_FROM_GREENW_NIMUTE 15
|
|
|
|
typedef struct isoVDDateTime
|
|
{
|
|
u_char year[ ISO_V_DATE_TIME_YEAR_SIZE ]; /* 1-9999 */
|
|
u_char month[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 1-12 */
|
|
u_char day[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 1-31 */
|
|
u_char hour[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 0-23 */
|
|
u_char minute[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 0-59 */
|
|
u_char sec[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 0-59 */
|
|
u_char sec100[ ISO_V_DATE_TIME_FIELD_STD_SIZE ]; /* 0-99 */
|
|
signed char greenwOffBy15Minute;
|
|
} T_ISO_VD_DATE_TIME;
|
|
|
|
typedef T_ISO_VD_DATE_TIME * T_ISO_VD_DATE_TIME_ID;
|
|
|
|
/* Primary/Secondary Volume Descriptor fields sizes */
|
|
|
|
#define ISO_VD_ID_STD_SIZE 128
|
|
#define ISO_VD_F_ID_STD_SIZE 37
|
|
#define ISO_VD_SYSTEM_ID_SIZE (40-8)
|
|
#define ISO_VD_VOLUME_ID_SIZE (72-40)
|
|
#define ISO_VD_VOL_SPACE_SIZE (80+ENDIAN_OFF_LONG)
|
|
#define ISO_VD_ESCAPE_SEC_SIZE (120-88)
|
|
|
|
#define CDROM_MAX_DIR_LEV 120 /* max dir nesting level */
|
|
#define CDROM_MAX_DIR_SIZE 128 /* max directory/file Byte sice */
|
|
/* For backwards compatibility */
|
|
|
|
#define CDROM_MAX_DIR_SICE CDROM_MAX_DIR_SIZE
|
|
|
|
/* Primary/Supplementary Volume Descriptor */
|
|
|
|
typedef struct isoPrimarySuplementaryVolDescriptor
|
|
{
|
|
u_long volSize; /* logical sector per volume */
|
|
u_long PTSize; /* bytes per Path Table */
|
|
u_long PTSizeOnCD; /* bytes per Path Table on physical CD*/
|
|
u_long PTOccur; /* Path table occurence */
|
|
u_long PTOptOccur; /* optional occurence */
|
|
u_long rootDirSize; /* bytes per Root Directory */
|
|
u_long rootDirStartLB; /* where root dir starts */
|
|
|
|
u_long volDescSector; /* Sector containing the volume descriptor */
|
|
u_long volDescOffInSect; /* Volume descriptor offset in sector */
|
|
u_short volDescNum; /* Volume descriptor number in session */
|
|
|
|
u_short volSetSize; /* number of disks in set */
|
|
u_short volSeqNum; /* disk number in set */
|
|
u_short SesiOnCd; /* number of all sessions on device */
|
|
u_short ReadSession; /* Seesion that contains the volume descriptor */
|
|
u_short LBSize; /* bytes per Logical Block */
|
|
|
|
u_char type; /* volume descriptor type, have to be one */
|
|
/* of ISO_VD_PRIMARY or ISO_VD_SUPPLEM */
|
|
u_char uniCodeLev; /* Unicode level */
|
|
/* 0=ISO9660 */
|
|
/* 1=UC-level1 2=UC-level2 3=UC-level3 */
|
|
|
|
u_char fileStructVersion; /* currently 1 only (ISO) */
|
|
u_char stdID[ ISO_STD_ID_SIZE + 1 ]; /* currently have to be */
|
|
/* ISO_STD_ID */
|
|
u_char systemId[ ISO_VD_SYSTEM_ID_SIZE +1 ]; /* a-u_chars */
|
|
u_char volumeId[ ISO_VD_VOLUME_ID_SIZE +1 ]; /* d-u_chars */
|
|
u_char volSetId[ ISO_VD_ID_STD_SIZE +1 ]; /* d-u_chars */
|
|
u_char publisherId[ ISO_VD_ID_STD_SIZE +1 ]; /* a-u_chars */
|
|
u_char preparerId[ ISO_VD_ID_STD_SIZE +1 ]; /* a-u_chars */
|
|
u_char applicatId[ ISO_VD_ID_STD_SIZE +1 ]; /* a-u_chars */
|
|
u_char cprightFId[ ISO_VD_F_ID_STD_SIZE +1 ]; /* file ID */
|
|
u_char abstractFId[ ISO_VD_F_ID_STD_SIZE +1 ]; /* file ID */
|
|
u_char bibliogrFId[ ISO_VD_F_ID_STD_SIZE +1 ]; /* file ID */
|
|
T_ISO_VD_DATE_TIME creationDate;
|
|
T_ISO_VD_DATE_TIME modificationDate;
|
|
T_ISO_VD_DATE_TIME expirationDate;
|
|
T_ISO_VD_DATE_TIME effectiveDate;
|
|
} T_ISO_PVD_SVD;
|
|
|
|
typedef T_ISO_PVD_SVD * T_ISO_PVD_SVD_ID;
|
|
|
|
/*
|
|
* CD-ROM volume descriptor (internal)
|
|
*
|
|
* This is here only for the function declarations.
|
|
*/
|
|
|
|
typedef struct cdromVolDescr * CDROM_VOL_DESC_ID;
|
|
|
|
/* ========= errno codes =========== */
|
|
|
|
#define S_cdromFsLib_ALREADY_INIT (M_cdromFsLib | 1)
|
|
#define S_cdromFsLib_DEVICE_REMOVED (M_cdromFsLib | 3)
|
|
#define S_cdromFsLib_SUCH_PATH_TABLE_SIZE_NOT_SUPPORTED (M_cdromFsLib | 4)
|
|
#define S_cdromFsLib_ONE_OF_VALUES_NOT_POWER_OF_2 (M_cdromFsLib | 5)
|
|
#define S_cdromFsLib_UNKNOWN_FILE_SYSTEM (M_cdromFsLib | 6)
|
|
|
|
/* For backwards compatibility */
|
|
|
|
#define S_cdromFsLib_UNNOWN_FILE_SYSTEM S_cdromFsLib_UNKNOWN_FILE_SYSTEM
|
|
|
|
#define S_cdromFsLib_INVAL_VOL_DESCR (M_cdromFsLib | 7)
|
|
#define S_cdromFsLib_INVALID_PATH_STRING (M_cdromFsLib | 8)
|
|
#define S_cdromFsLib_MAX_DIR_HIERARCHY_LEVEL_OVERFLOW (M_cdromFsLib | 9)
|
|
#define S_cdromFsLib_NO_SUCH_FILE_OR_DIRECTORY (M_cdromFsLib | 10)
|
|
#define S_cdromFsLib_INVALID_DIRECTORY_STRUCTURE (M_cdromFsLib | 11)
|
|
#define S_cdromFsLib_INVALID_FILE_DESCRIPTOR (M_cdromFsLib | 12)
|
|
#define S_cdromFsLib_READ_ONLY_DEVICE (M_cdromFsLib | 13)
|
|
#define S_cdromFsLib_END_OF_FILE (M_cdromFsLib | 14)
|
|
#define S_cdromFsLib_INV_ARG_VALUE (M_cdromFsLib | 15)
|
|
#define S_cdromFsLib_SEMTAKE_ERROR (M_cdromFsLib | 16)
|
|
#define S_cdromFsLib_SEMGIVE_ERROR (M_cdromFsLib | 17)
|
|
#define S_cdromFsLib_VOL_UNMOUNTED (M_cdromFsLib | 18)
|
|
#define S_cdromFsLib_INVAL_DIR_OPER (M_cdromFsLib | 19)
|
|
#define S_cdromFsLib_READING_FAILURE (M_cdromFsLib | 20)
|
|
#define S_cdromFsLib_INVALID_DIR_REC_STRUCT (M_cdromFsLib | 21)
|
|
#define S_cdromFsLib_SESSION_NR_NOT_SUPPORTED (M_cdromFsLib | 23)
|
|
|
|
/* globals */
|
|
|
|
#ifndef _ASMLANGUAGE
|
|
|
|
/* function declarations */
|
|
|
|
/* interface functions */
|
|
|
|
extern STATUS cdromFsInit (UINT32 commonBufferSize);
|
|
|
|
/* user-callable functions prototypes */
|
|
|
|
extern CDROM_VOL_DESC_ID cdromFsDevCreate (char * devName, device_t device);
|
|
extern STATUS cdromFsDevDelete (CDROM_VOL_DESC_ID volDescId);
|
|
|
|
extern void cdromFsVolConfigShow (void * arg);
|
|
|
|
extern uint32_t cdromFsVersionNumGet (void) _WRS_DEPRECATED ("");
|
|
extern void cdromFsVersionDisplay (int level) _WRS_DEPRECATED ("");
|
|
|
|
#endif /* _ASMLANGUAGE */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* cdromFsLib_h */
|