HPUX cdfs[4]

cdfs(4) cdfs(4)
NAME
cdfs - format of CDFS file system volume
SYNOPSIS
#include <sys/types.h>
#include <sys/cdfs.h>
#include <sys/cdfsdir.h>
DESCRIPTION
Each CD-ROM can contain one or more volumes. Each of these volumes
can contain a CDFS file system (see cdrom(4) for a description of the
overall format of a CD-ROM).
The attributes of a CDFS volume are described by a volume descriptor.
(Note that only the primary volume descriptor is recognized and used
at the current level of CD-ROM support. Thus, ``volume descriptor''
in the following discussion refers to the primary volume descriptor.)
A volume descriptor is 2048 bytes in length and is described by two
data structures, one for HSG (High Sierra Group) format, and one for
ISO-9660 (International Organization for Standardization) format.
Only the pertinent portions of sys/cdfs.h are reproduced here:
#define KMAXNAMLEN 30+2+5
#define VOL_SET_ID_SIZ 128
#define VOL_ID_SIZ 32
#define STD_ID_SIZ 5
#define SYS_ID_SIZ 32
#define PUBLISHER_ID_SIZ 128
#define PREPARER_ID_SIZ 128
#define APPLICATION_ID_SIZ 128
#define APPL_USE_SIZ 512
struct icdfs /*primary volume descriptor-ISO-9660*/
{
char cdf_vold_type; /*volume descriptor type*/
char cdf_std_id[STD_ID_SIZ]; /*id "CD001" for ISO-9660*/
char cdf_vold_version; /*should be 1 for ISO-9660*/
char cdf_unused1; /*spare*/
char cdf_sys_id[SYS_ID_SIZ]; /*id of a system that knows contents of
system area, logic sector 0-15*/
char cdf_vol_id[VOL_ID_SIZ]; /*id of this volume*/
char cdf_unused2[8]; /*spare*/
int cdf_vol_size_lsb; /*size (LSB) of volume in logic block*/
int cdf_vol_size_msb; /*size (MSB) of volume in logic block*/
char cdf_unused3[32]; /*spare*/
ushort cdf_volset_siz_lsb; /*size (LSB) of volume set*/
ushort cdf_volset_siz_msb; /*size (MSB) of volume set*/
ushort cdf_volset_seq_lsb; /*sequence no. (LSB) of vol in the set*/
ushort cdf_volset_seq_msb; /*sequence no. (MSB) of vol in the set*/
ushort cdf_logblk_siz_lsb; /*size (LSB) of logic block in bytes*/
ushort cdf_logblk_siz_msb; /*size (MSB) of logic block in bytes*/
Hewlett-Packard Company - 1 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
u_int cdf_pathtbl_siz_lsb; /*size (LSB) of path table in bytes */
u_int cdf_pathtbl_siz_msb; /*size (MSB) of path table in bytes */
u_int cdf_pathtbl_loc_lsb; /*logical block no. (LSB) of path table*/
u_int cdf_pathtblo_loc_lsb; /*logical block no. (LSB) of
optional path table*/
u_int cdf_pathtbl_loc_msb; /*logical block no. (MSB) of path table*/
u_int cdf_pathtblo_loc_msb; /*logical block no. (MSB) of
optional path table*/
struct min_cddir cdf_rootdp; /*directory record of root*/
char cdf_vol_set_id[VOL_SET_ID_SIZ]; /*id of the volume set*/
char cdf_pb_id[PUBLISHER_ID_SIZ]; /*publisher's id*/
char cdf_pp_id[PREPARER_ID_SIZ]; /*preparer's id*/
char cdf_ap_id[APPLICATION_ID_SIZ]; /*application id*/
char cdf_copyright[KMAXNAMLEN]; /*copyright in this file under
root directory, the max.
len. is 18, the rest unused*/
char cdf_abstract[KMAXNAMLEN]; /*abstract in this file under
root directory, the max.
len. is 18, the rest unused*/
char cdf_bibliographic[KMAXNAMLEN]; /*bibliographic in this file
under root directory, the max.
len. is 18, the rest unused*/
/*The next four chunks are creation time, modification time, expiration time
and effective time. Since the date/time info is 17 bytes(odd), a structure
can't be used (compiler rounds up to even bytes). If for any reason this
info is changed, make sure to fix all four of them.*/
/*creation time*/
char cdf_c_year[4]; /*years since year 0000*/
char cdf_c_month[2]; /*month*/
char cdf_c_day[2]; /*day*/
char cdf_c_hour[2]; /*hour*/
char cdf_c_minute[2]; /*minute*/
char cdf_c_second[2]; /*second*/
char cdf_c_h_second[2]; /*hundredths of second*/
char cdf_c_timezone; /*timezone, offset from Greenwich Mean Time
in number of 15 minutes intervals from
-48(West) to +52(East)*/
/*modification time*/
char cdf_m_year[4]; /*years since year 0000*/
char cdf_m_month[2]; /*month*/
char cdf_m_day[2]; /*day*/
char cdf_m_hour[2]; /*hour*/
char cdf_m_minute[2]; /*minute*/
char cdf_m_second[2]; /*second*/
char cdf_m_h_second[2]; /*hundredths of second*/
char cdf_m_timezone; /*timezone, offset from Greenwich Mean Time
in number of 15 minutes intervals from
-48(West) to +52(East)*/
/*expiration time*/
char cdf_x_year[4]; /*years since year 0000*/
char cdf_x_month[2]; /*month*/
Hewlett-Packard Company - 2 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
char cdf_x_day[2]; /*day*/
char cdf_x_hour[2]; /*hour*/
char cdf_x_minute[2]; /*minute*/
char cdf_x_second[2]; /*second*/
char cdf_x_h_second[2]; /*hundredths of second*/
char cdf_x_timezone; /*timezone, offset from Greenwich Mean Time
in number of 15 minutes intervals from
-48(West) to +52(East)*/
/*effective time*/
char cdf_e_year[4]; /*years since year 0000*/
char cdf_e_month[2]; /*month*/
char cdf_e_day[2]; /*day*/
char cdf_e_hour[2]; /*hour*/
char cdf_e_minute[2]; /*minute*/
char cdf_e_second[2]; /*second*/
char cdf_e_h_second[2]; /*hundredths of second*/
char cdf_e_timezone; /*timezone, offset from Greenwich Mean Time
in number of 15 minutes intervals from
-48(West) to +52(East)*/
u_char cdfs_fs_version; /*file structure version:1 for ISO-9660*/
char cdf_unused4;
char cdf_appl_use[APPL_USE_SIZ]; /*reserved for application*/
char cdf_future_use[653]; /*reserved for future. Note that if
total size of field before this one
is changed, this size should be
changed so that the size of this
structure is 2048*/
};
struct hcdfs /*primary volume descriptor-HSG*/
{
u_int cdf_loc_lsb; /*logical block no. (LSB) of this descr.*/
u_int cdf_loc_msb; /*logical block no. (MSB) of this descr.*/
char cdf_vold_type; /*volume descriptor type*/
char cdf_std_id[STD_ID_SIZ]; /*id "CDROM" for HSG */
char cdf_vold_version; /*should be 1 for HSG */
char cdf_unused1; /*spare*/
char cdf_sys_id[SYS_ID_SIZ]; /*id of a system that knows contents of
system area, logical sector 0-15*/
char cdf_vol_id[VOL_ID_SIZ]; /*id of this volume*/
char cdf_unused2[8]; /*spare*/
int cdf_vol_size_lsb; /*size (LSB) of volume in logical block*/
int cdf_vol_size_msb; /*size (MSB) of volume in logical block*/
char cdf_unused3[32]; /*spare*/
ushort cdf_volset_siz_lsb; /*size (LSB) of volume set*/
ushort cdf_volset_siz_msb; /*size (MSB) of volume set*/
ushort cdf_volset_seq_lsb; /*sequence no. (LSB) of volume in the set*/
ushort cdf_volset_seq_msb; /*sequence no. (MSB) of volume in the set*/
ushort cdf_logblk_siz_lsb; /*size (LSB) of logical block in bytes*/
ushort cdf_logblk_siz_msb; /*size (MSB) of logical block in bytes*/
Hewlett-Packard Company - 3 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
u_int cdf_pathtbl_siz_lsb; /*size (LSB) of path table in bytes */
u_int cdf_pathtbl_siz_msb; /*size (MSB) of path table in bytes */
u_int cdf_pathtbl_loc_lsb; /*logical block no. (LSB) of path table*/
u_int cdf_pathtblo1_loc_lsb; /*logical block number (LSB) of
optional path table*/
u_int cdf_pathtblo2_loc_lsb; /*logical block number (LSB) of
optional path table*/
u_int cdf_pathtblo3_loc_lsb; /*logical block number (LSB) of
optional path table*/
u_int cdf_pathtbl_loc_msb; /*logic block num. (MSB) of path table*/
u_int cdf_pathtblo1_loc_msb; /*logic block num (MSB) of optional
path table*/
u_int cdf_pathtblo2_loc_msb; /*logic block num (MSB) of optional
path table*/
u_int cdf_pathtblo3_loc_msb; /*logic block num (MSB) of optional
path table*/
struct min_cddir cdf_rootdp; /*directory record of root*/
char cdf_vol_set_id[VOL_SET_ID_SIZ]; /*id of the volume set*/
char cdf_pb_id[PUBLISHER_ID_SIZ]; /*publisher's id*/
char cdf_pp_id[PREPARER_ID_SIZ]; /*preparer's id*/
char cdf_ap_id[APPLICATION_ID_SIZ]; /*application id*/
char cdf_copyright[KMAXNAMLEN-5]; /*copyright in this file under
root directory, the max.
len. is 12, the rest unused*/
char cdf_abstract[KMAXNAMLEN-5]; /*abstract in this file under
root directory, the max.
len. is 12, the rest unused*/
/* the next four chunks are creation time, modification time,
expiration time and effective time. Since the date/time info
is 17 bytes(odd), a structure can't be used (compiler rounds up
to even bytes). If for any reason this info is changed, be sure
to fix all four of them. */
/*creation time*/
char cdf_c_year[4]; /*years since year 0000*/
char cdf_c_month[2]; /*month*/
char cdf_c_day[2]; /*day*/
char cdf_c_hour[2]; /*hour*/
char cdf_c_minute[2]; /*minute*/
char cdf_c_second[2]; /*second*/
char cdf_c_h_second[2]; /*hundredths of second*/
/*modification time*/
char cdf_m_year[4]; /*years since year 0000*/
char cdf_m_month[2]; /*month*/
char cdf_m_day[2]; /*day*/
char cdf_m_hour[2]; /*hour*/
char cdf_m_minute[2]; /*minute*/
char cdf_m_second[2]; /*second*/
char cdf_m_h_second[2]; /*hundredths of second*/
/*expiration time*/
char cdf_x_year[4]; /*years since year 0000*/
char cdf_x_month[2]; /*month*/
Hewlett-Packard Company - 4 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
char cdf_x_day[2]; /*day*/
char cdf_x_hour[2]; /*hour*/
char cdf_x_minute[2]; /*minute*/
char cdf_x_second[2]; /*second*/
char cdf_x_h_second[2]; /*hundredths of second*/
/*effective time*/
char cdf_e_year[4]; /*years since year 0000*/
char cdf_e_month[2]; /*month*/
char cdf_e_day[2]; /*day*/
char cdf_e_hour[2]; /*hour*/
char cdf_e_minute[2]; /*minute*/
char cdf_e_second[2]; /*second*/
char cdf_e_h_second[2]; /*hundredths of second*/
u_char cdfs_fs_version; /*file structure version:1 for HSG*/
char cdf_unused4;
char cdf_appl_use[APPL_USE_SIZ]; /*reserved for application*/
char cdf_future_use[680]; /*reserved for future. Note that if
total size of field before this one
is changed, this size should be
changed so that the size of this
structure is 2048*/
};
Note the physical differences between the two formats' volume
descriptors:
1. The HSG volume descriptor includes the logical block number at
which the descriptor occurs; ISO does not.
2. The HSG volume descriptor provides for more optional path
tables (three optional type-L path tables plus three optional
type-M path tables) than does ISO (one optional path table of
each type);
3. The HSG volume descriptor does not provide for a bibliographic
file, while ISO does;
4. The HSG volume descriptor does not provide for GMT offsets in
the creation, modification, expiration, and effective times,
while ISO does;
5. The HSG volume descriptor's "reserved for future use" field is
larger than that of the ISO descriptor's.
Fields are defined as follows:
cdf_loc_lsb Defined for HSG format only. Logical block
number at which this particular volume
descriptor is arranged in least-significant-
byte-first order.
Hewlett-Packard Company - 5 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
cdf_loc_msb Same as cdf_loc_lsb except that volume
descriptor is arranged in most-significant-
byte-first order.
cdf_vold_type Volume descriptor type. Value should be one
(1) for both formats.
cdf_std_id A five-character standard ID which identifies
the standard format in use. For ISO, this
string is CD001; for HSG, it is CDROM. Note
that this field is the one most often used to
differentiate between the two formats.
cdf_vold_version Volume descriptor version number for the
volume. This value should be one (1) for
both formats.
cdf_sys_id Identifies what system or systems specify and
understand the contents of the system area
(logical blocks zero through 15). This field
can contain a string of up to 32 characters.
The ID is left-justified in the field and
padded on the right with spaces.
cdf_vol_id Identifies the volume. This field can
contain a string of up to 32 characters. The
ID is left-justified in the field and padded
on the right with spaces.
cdf_vol_size_lsb Size of this particular volume in logical
blocks. Value is given in least-
significant-byte-first order.
cdf_vol_size_msb Same as cdf_vol_size_lsb except that value is
given in most-significant-byte-first order,
cdf_volset_siz_lsb Volume-set size of the volume set of which
this volume is a member. This value is given
in least-significant-byte-first order.
cdf_volset_siz_msb Same as cdf_volset_siz_lsb except value is in
most-significant-byte-first order.
cdf_volset_seq_lsb Gives the volume-sequence number of this
volume in least-significant-byte-first order.
The volume-sequence number determines the
order in which volumes occur in the volume
set.
cdf_volset_seq_msb Same as cdf_volset_seq_lsb except value is in
most-significant-byte-first order.
Hewlett-Packard Company - 6 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
cdf_logblk_siz_lsb Logical block size for this volume in least-
significant-byte-first order. The logical
block size cannot be less than 512 bytes, and
cannot exceed the logical sector size of the
device (currently does not exceed 2048
bytes).
cdf_logblk_siz_msb Same as cdf_logblk_siz_lsb except value is in
most-significant-byte-first order.
cdf_pathtbl_siz_lsb Size of the path table for this volume in
bytes. This value is given in least-
significant-byte-first order. A path table
defines the directory hierarchy of the file
system on the volume. The first entry in the
table describes the root directory.
cdf_pathtbl_siz_msb Same as cdf_pathtbl_siz_lsb except that value
is in most-significant-byte-first order.
cdf_pathtbl_loc_lsb Logical block number of the block where the
mandatory type-L path table begins. This
value is given in least-significant-byte-
first order. A type-L path table is a path
table whose numerical values are all
specified in least-significant-byte-first
order.
cdf_pathtblo_loc_lsb (in ISO format)
cdf_pathtblo1_loc_lsb,
cdf_pathtblo2_loc_lsb,
cdf_pathtblo3_loc_lsb (in HSG format)
These fields specify the logical block
numbers of the blocks where optional type-L
path tables begin. If an optional type-L
path table does not exist, the corresponding
field is given a zero value. All values are
specified in least-significant-byte-first
order.
cdf_pathtbl_loc_msb Logical block number of the block where the
mandatory type-M path table begins. This
value is given in most-significant-byte-first
order. A type-M path table is a path table
whose numerical values are all specified in
most-significant-byte-first order.
cdf_pathtblo_loc_msb (in ISO format)
cdf_pathtblo1_loc_msb,
cdf_pathtblo2_loc_msb,
Hewlett-Packard Company - 7 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
cdf_pathtblo3_loc_msb (in HSG format)
These fields specify the logical block
numbers of the blocks where optional type-M
path tables begin. If an optional type-M
path table does not exist, the corresponding
field is given a zero value. All values are
specified in most-significant-byte-first
order.
cdf_rootdp Structure containing a duplicate of the root
directory record. This structure is defined
in <sys/cdfsdir.h> as follows:
struct min_cddir {
u_char mincdd_reclen; /*length of directory record in bytes*/
u_char mincdd_xar_len; /*length of XAR in logic blocks*/
u_int mincdd_loc_lsb; /*logic block number of the extent in LSB*/
u_int mincdd_loc_msb; /*logic block number of the extent in MSB*/
u_int mincdd_size_lsb; /*size (in bytes) of the file section in LSB*/
u_int mincdd_size_msb; /*size (in bytes) of the file section in MSB*/
u_char mincdd_year; /*years since 1900*/
u_char mincdd_month; /*month*/
u_char mincdd_day; /*day*/
u_char mincdd_hour; /*hour*/
u_char mincdd_minute; /*minute*/
u_char mincdd_second; /*second*/
char mincdd_timezone; /*timezone, offset from Greenwich Mean Time
in number of 15 minutes intervals from
-48(West) to +52(East)*/
u_char mincdd_flag; /*file flags*/
u_char mincdd_unit_size; /*size (in logic blocks) of file unit*/
u_char mincdd_lg_size; /*size (in logic blocks) of interleave gap*/
u_short mincdd_vol_seq_lsb; /*sequence num. of disc has the extent(LSB)*/
u_short mincdd_vol_seq_msb; /*sequence num. of disc has the extent(MSB)*/
u_char mincdd_idlen; /*file id length in bytes*/
char mincdd_file_id[KMINNAMLEN];
};
Fields in this structure are defined as follows:
mincdd_reclen Length of this directory record, in
bytes. Always 34.
mincdd_xar_len Length of the extended attribute record
(XAR) for the root directory, if any, in
logical blocks. If there is no XAR,
this value is zero.
mincdd_loc_lsb Logical block number of the block in
which the data for the root directory
begins, in least-significant-byte-first
Hewlett-Packard Company - 8 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
order. If mincdd_xar_len is non-zero,
this block number is the block where the
XAR begins; otherwise, it is the block
where the root directory begins.
mincdd_loc_msb Same as mincdd_loc_lsb above, only
written in most-significant-byte-first
order.
mincdd_size_lsb Length of the root directory data
(excluding any XAR) in bytes, written in
least-significant-byte-first order.
mincdd_size_msb Same as mincdd_size_lsb above, except
written in most-significant-byte-first
order.
mincdd_year Numerical value giving the number of
years since 1900, specifying the year in
which this directory record was
recorded.
mincdd_month Numerical value giving the month (1 =
January) in which this directory record
was recorded.
mincdd_day Numerical value giving the day of the
month in which this directory record was
recorded.
mincdd_hour Numerical value giving the hour of the
day (in 24-hour clock time) in which
this directory record was recorded.
mincdd_minute Numerical value giving the minute of the
hour in which this directory record was
recorded.
mincdd_second Numerical value giving the second of the
minute in which this directory record
was recorded.
mincdd_timezone Numerical value giving the offset from
Greenwich Mean Time in 15-minute
intervals (-48 to 52) of the timezone in
which this directory record was
recorded.
mincdd_flag File flags for the root directory.
Hewlett-Packard Company - 9 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
mincdd_unit_size Size of the file unit if the file is
interleaved (directories cannot be
interleaved, so this value is always
zero for the root directory).
mincdd_lg_size Size of the interleave gap if the file
is interleaved (this field is always
zero for the root directory).
mincdd_vol_seq_lsb Volume sequence number of the volume in
the volume set containing the record for
the root directory. This value is
written in least-significant-byte-first
order.
mincdd_vol_seq_msb Same as mincdd_vol_seq_lsb except
written in most-significant-byte-first
order.
mincdd_idlen Length of the name of this file. Since
the ``name'' of the root directory is a
constant byte value of zero, this value
is always one (1).
mincdd_file_id A character string giving the name of
the file. The root directory's ``name''
is always a constant byte value of zero.
Other fields are defined as follows:
cdf_vol_set_id Character string giving the
identification of the volume set of
which this volume is a member. Up to
128 characters can be specified. ID is
left-justified in the field, and padded
on the right with spaces.
cdf_pb_id Identification of the entity which
specified what would be recorded on the
volume set or volume group of which this
volume is a member. Up to 128
characters can be specified. In ISO
format only, if the first character in
the field is an underscore, the
remaining characters specify a file
whose contents provide the
identification. In both formats, the ID
is left-justified in the field and
padded on the right with spaces.
Hewlett-Packard Company - 10 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
cdf_pp_id Identification of the entity which
controls the preparation of the data
recorded on the volume. Up to 128
characters can be specified. In ISO
format only, if the first character in
the field is an underscore, the
remaining characters specify a file
whose contents provide the
identification. In both formats, the ID
is left-justified in the field and
padded on the right with spaces.
cdf_ap_id Identification of the specification for
how the data is recorded on the volume.
Up to 128 characters can be specified.
In ISO format only, if the first
character in the field is an underscore,
the remaining characters specify a file
whose contents provide the
identification. In both formats, the ID
is left-justified in the field and
padded on the right with spaces.
cdf_copyright Specifies the name of a file in the root
directory that contains the copyright
statement applicable to this volume and
all preceding volumes in the volume set.
In ISO format, up to 37 characters can
be specified; in HSG, up to 32 are
possible. The filename is left-
justified in the field and padded on the
right with spaces.
cdf_abstract Specifies the name of a file in the root
directory containing the abstract
statement applicable to this volume. In
ISO format, up to 37 characters can be
specified; in HSG, up to 32 are
possible. The filename is left-
justified in the field, and padded on
the right with spaces.
cdf_bibliographic Defined in ISO format only. Specifies
the name of a file in the root directory
which contains bibliographic records
interpreted according to standards
agreed upon by the originator and the
recipient of the volume. Up to 37
characters can be specified. The
filename is left-justified in the field
and padded on the right with spaces.
Hewlett-Packard Company - 11 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
Date/Time fields The next 28 fields (in HSG) or 32 fields
(in ISO) specify various dates and
times. Note that all fields in these
dates and times contain ASCII digits
(except for the timezone fields in ISO,
which contain an eight-bit two's
complement value). The creation time
gives the date and time at which the
volume was created (recorded). The
modification time gives the date and
time when the contents of the volume
were last modified. The expiration time
gives the date and time after which the
data on the volume is no longer valid.
The effective time gives the date and
time after which the data becomes valid.
cdfs_fs_version Specifies the version number of the
specification of the directory and path
table records. For both formats, this
value is one (1).
cdf_appl_use A 512-byte space whose contents are not
specified by the standards, but which
can be used by an application for
purposes agreed upon prior to disc
mastering.
cdf_future_use Reserved for future use; initialized to
contain zeros. This field contains 653
bytes in ISO format, and 680 bytes in
HSG.
NOTES
At the present time, only the statfs() system call (see statfs(2))
returns information from the volume descriptor. Information returned
is limited to the logical block size and the size of the volume. The
rest of the volume descriptor can only be read by means of a raw read
of the CD-ROM itself.
Fields in the volume descriptor that contain character strings are not
null-terminated.
SEE ALSO
cdrom(4), cdfsdir(4), cdnode(4).
Information Processing - Volume and File Structure of CD-ROM for
Information Interchange, Ref. No. ISO 9660: 1988 (E).
The Working Paper for Information Processing - Volume and File
Structure of" Compact Read Only Optical Discs for Information
Hewlett-Packard Company - 12 - HP-UX Release 9.0: August 1992
cdfs(4) cdfs(4)
Interchange, National Information Standards Organization [Z39].
Hewlett-Packard Company - 13 - HP-UX Release 9.0: August 1992