Clarified meaning of "ISO 9660:1999" as Enhanced Volume Descriptor of ECMA-119 4th Edition
This commit is contained in:
parent
eed1e64aed
commit
6a100a645d
@ -19,9 +19,13 @@ Contents:
|
|||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
1. References:
|
1. References:
|
||||||
|
|
||||||
|
Meanwhile this is specified in ECMA-119 4th Edition of 2019 by the description
|
||||||
|
of the Enhanced Volume Descriptor.
|
||||||
|
|
||||||
|
The old name "ISO 9660:1999" comes from:
|
||||||
ISO/IEC DIS 9660:1999(E) "Information processing. Volume and file structure of
|
ISO/IEC DIS 9660:1999(E) "Information processing. Volume and file structure of
|
||||||
CD-ROM for Information Interchange"
|
CD-ROM for Information Interchange"
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
2. General
|
2. General
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Vreixo Formoso
|
* Copyright (c) 2007 Vreixo Formoso
|
||||||
* Copyright (c) 2011-2014 Thomas Schmitt
|
* Copyright (c) 2011-2024 Thomas Schmitt
|
||||||
*
|
*
|
||||||
* This file is part of the libisofs project; you can redistribute it and/or
|
* This file is part of the libisofs project; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License version 2
|
* modify it under the terms of the GNU General Public License version 2
|
||||||
@ -59,7 +59,7 @@ int get_iso1999_name(Ecma119Image *t, const char *str, char **fname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ISO 9660:1999 7.5.1 */
|
/* ISO 9660:1999 7.5.1 and ECMA-119 4th Edition 7.5.1 */
|
||||||
if (strlen(name) > 207) {
|
if (strlen(name) > 207) {
|
||||||
name[207] = '\0';
|
name[207] = '\0';
|
||||||
}
|
}
|
||||||
@ -90,7 +90,8 @@ void iso1999_node_free(Iso1999Node *node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a low level ISO 9660:1999 node
|
* Create a low level node of the tree of Enhanced Volume Descriptor
|
||||||
|
* (aka ISO 9660:1999) as of ECMA-119 4th Edition.
|
||||||
* @return
|
* @return
|
||||||
* 1 success, 0 ignored, < 0 error
|
* 1 success, 0 ignored, < 0 error
|
||||||
*/
|
*/
|
||||||
@ -172,7 +173,8 @@ int create_node(Ecma119Image *t, IsoNode *iso, Iso1999Node **node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the low level ISO 9660:1999 tree from the high level ISO tree.
|
* Create the low level tree of an Enhanced Volume Descriptor
|
||||||
|
* (aka ISO 9660:1999) as of ECMA-119 4th Edition from the high level ISO tree.
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
* 1 success, 0 file ignored, < 0 error
|
* 1 success, 0 file ignored, < 0 error
|
||||||
@ -300,8 +302,8 @@ cmp_node(const void *f1, const void *f2)
|
|||||||
Iso1999Node *g = *((Iso1999Node**)f2);
|
Iso1999Node *g = *((Iso1999Node**)f2);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO #00027 Follow ISO 9660:1999 specs when sorting files
|
* TODO #00027 Follow ECMA-119 4th Edition specs when sorting files
|
||||||
* strcmp do not does exactly what ISO 9660:1999, 9.3, as characters
|
* strcmp do not does exactly what paragraph 9.3 prescribe, as characters
|
||||||
* < 0x20 " " are allowed, so name len must be taken into account
|
* < 0x20 " " are allowed, so name len must be taken into account
|
||||||
*/
|
*/
|
||||||
return strcmp(f->name, g->name);
|
return strcmp(f->name, g->name);
|
||||||
@ -309,7 +311,7 @@ cmp_node(const void *f1, const void *f2)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the entries inside an ISO 9660:1999 directory, according to
|
* Sort the entries inside an ISO 9660:1999 directory, according to
|
||||||
* ISO 9660:1999, 9.3
|
* ISO 9660:1999 / ECMA-119 4th Edition, 9.3
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
void sort_tree(Iso1999Node *root)
|
void sort_tree(Iso1999Node *root)
|
||||||
@ -585,7 +587,7 @@ size_t calc_dirent_len(Ecma119Image *t, Iso1999Node *n)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Computes the total size of all directory entries of a single dir, as
|
* Computes the total size of all directory entries of a single dir, as
|
||||||
* stated in ISO 9660:1999, 6.8.1.3
|
* stated in ISO 9660:1999 / ECMA-119 4th Edition, 6.8.1.3
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
size_t calc_dir_size(Ecma119Image *t, Iso1999Node *dir)
|
size_t calc_dir_size(Ecma119Image *t, Iso1999Node *dir)
|
||||||
@ -616,7 +618,7 @@ size_t calc_dir_size(Ecma119Image *t, Iso1999Node *dir)
|
|||||||
/*
|
/*
|
||||||
* The size of a dir is always a multiple of block size, as we must add
|
* The size of a dir is always a multiple of block size, as we must add
|
||||||
* the size of the unused space after the last directory record
|
* the size of the unused space after the last directory record
|
||||||
* (ISO 9660:1999, 6.8.1.3)
|
* (ISO 9660:1999 / ECMA-119 4th Edition, 6.8.1.3)
|
||||||
*/
|
*/
|
||||||
len = ROUND_UP(len, BLOCK_SIZE);
|
len = ROUND_UP(len, BLOCK_SIZE);
|
||||||
|
|
||||||
@ -643,7 +645,8 @@ void calc_dir_pos(Ecma119Image *t, Iso1999Node *dir)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute the length of the path table (ISO 9660:1999, 6.9), in bytes.
|
* Compute the length of the path table (ISO 9660:1999 / ECMA-119 4th Edition,
|
||||||
|
* 6.9), in bytes.
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
uint32_t calc_path_table_size(Iso1999Node *dir)
|
uint32_t calc_path_table_size(Iso1999Node *dir)
|
||||||
@ -699,7 +702,7 @@ int iso1999_writer_compute_data_blocks(IsoImageWriter *writer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write a single directory record (ISO 9660:1999, 9.1).
|
* Write a single directory record (ISO 9660:1999 / ECMA-119 4th Edition, 9.1).
|
||||||
*
|
*
|
||||||
* @param file_id
|
* @param file_id
|
||||||
* if >= 0, we use it instead of the filename (for "." and ".." entries).
|
* if >= 0, we use it instead of the filename (for "." and ".." entries).
|
||||||
@ -765,7 +768,8 @@ void write_one_dir_record(Ecma119Image *t, Iso1999Node *node, int file_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write the enhanced volume descriptor (ISO/IEC 9660:1999, 8.5)
|
* Write the enhanced volume descriptor
|
||||||
|
* (ISO/IEC 9660:1999 / ECMA-119 4th Edition, 8.5)
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
int iso1999_writer_write_vol_desc(IsoImageWriter *writer)
|
int iso1999_writer_write_vol_desc(IsoImageWriter *writer)
|
||||||
@ -806,7 +810,9 @@ int iso1999_writer_write_vol_desc(IsoImageWriter *writer)
|
|||||||
vol.vol_desc_type[0] = 2;
|
vol.vol_desc_type[0] = 2;
|
||||||
memcpy(vol.std_identifier, "CD001", 5);
|
memcpy(vol.std_identifier, "CD001", 5);
|
||||||
|
|
||||||
/* descriptor version is 2 (ISO/IEC 9660:1999, 8.5.2) */
|
/* descriptor version is 2
|
||||||
|
* (ISO/IEC 9660:1999 / ECMA-119 4th Edition, 8.5.2)
|
||||||
|
*/
|
||||||
vol.vol_desc_version[0] = 2;
|
vol.vol_desc_version[0] = 2;
|
||||||
strncpy_pad((char*)vol.volume_id, vol_id, 32);
|
strncpy_pad((char*)vol.volume_id, vol_id, 32);
|
||||||
|
|
||||||
@ -1052,7 +1058,9 @@ int iso1999_writer_write_data(IsoImageWriter *writer)
|
|||||||
static
|
static
|
||||||
int iso1999_writer_free_data(IsoImageWriter *writer)
|
int iso1999_writer_free_data(IsoImageWriter *writer)
|
||||||
{
|
{
|
||||||
/* free the ISO 9660:1999 tree */
|
/* free the ISO 9660:1999 / ECMA-119 4th Edition Enhanced Volume Descriptor
|
||||||
|
* tree
|
||||||
|
*/
|
||||||
Ecma119Image *t = writer->target;
|
Ecma119Image *t = writer->target;
|
||||||
iso1999_node_free(t->iso1999_root);
|
iso1999_node_free(t->iso1999_root);
|
||||||
return ISO_SUCCESS;
|
return ISO_SUCCESS;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Vreixo Formoso
|
* Copyright (c) 2007 Vreixo Formoso
|
||||||
|
* Copyright (c) 2024 Thomas Schmitt
|
||||||
*
|
*
|
||||||
* This file is part of the libisofs project; you can redistribute it and/or
|
* This file is part of the libisofs project; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License version 2
|
* modify it under the terms of the GNU General Public License version 2
|
||||||
@ -8,11 +9,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Structures related to ISO/IEC 9660:1999, that is version 2 of ISO-9660
|
* Structures related to the Enhanced Volume Descriptor as of ECMA-119 4th
|
||||||
* "See doc/devel/cookbook/ISO 9660-1999" and
|
* Edition. See there and in "doc/devel/cookbook/ISO 9660-1999" for further
|
||||||
* ISO/IEC DIS 9660:1999(E) "Information processing. Volume and file structure
|
* details.
|
||||||
* of CD-ROM for Information Interchange"
|
* This optional tree is also known as ISO/IEC DIS 9660:1999, a once proposed
|
||||||
* for further details.
|
* version 2 of ISO-9660.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LIBISO_ISO1999_H
|
#ifndef LIBISO_ISO1999_H
|
||||||
@ -49,7 +50,7 @@ struct iso1999_node
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a IsoWriter to deal with ISO 9660:1999 estructures, and add it to
|
* Create a IsoWriter to deal with ISO 9660:1999 structures, and add it to
|
||||||
* the given target.
|
* the given target.
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
|
@ -304,7 +304,10 @@ enum IsoHideNodeFlag {
|
|||||||
LIBISO_HIDE_ON_RR = 1 << 0,
|
LIBISO_HIDE_ON_RR = 1 << 0,
|
||||||
/** Hide the node in the Joliet tree, if Joliet extension are enabled */
|
/** Hide the node in the Joliet tree, if Joliet extension are enabled */
|
||||||
LIBISO_HIDE_ON_JOLIET = 1 << 1,
|
LIBISO_HIDE_ON_JOLIET = 1 << 1,
|
||||||
/** Hide the node in the ISO-9660:1999 tree, if that format is enabled */
|
/** Hide the node in the tree of an Enhanced Volume Descriptor
|
||||||
|
(aka ISO 9660:1999) as of ECMA-119 4th Edition, if that format is
|
||||||
|
enabled
|
||||||
|
*/
|
||||||
LIBISO_HIDE_ON_1999 = 1 << 2,
|
LIBISO_HIDE_ON_1999 = 1 << 2,
|
||||||
|
|
||||||
/** Hide the node in the HFS+ tree, if that format is enabled.
|
/** Hide the node in the HFS+ tree, if that format is enabled.
|
||||||
@ -1557,11 +1560,12 @@ int iso_write_opts_set_hfsp_block_size(IsoWriteOpts *opts,
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether to use newer ISO-9660:1999 version.
|
* Whether to create an additional tree starting at Enhanced Volume Descriptor
|
||||||
|
* (aka ISO 9660:1999) as of ECMA-119 4th Edition.
|
||||||
*
|
*
|
||||||
* This is the second version of ISO-9660. It allows longer filenames and has
|
* This allows longer filenames and has less restrictions than ECMA-119 2nd
|
||||||
* less restrictions than old ISO-9660. However, nobody is using it so there
|
* Edition aka ISO-9660:1988. However, nobody is using it. So there are
|
||||||
* are no much reasons to enable this.
|
* not many reasons to enable this.
|
||||||
*
|
*
|
||||||
* @since 0.6.2
|
* @since 0.6.2
|
||||||
*/
|
*/
|
||||||
@ -1889,8 +1893,9 @@ int iso_write_opts_set_aaip_susp_1_10(IsoWriteOpts *opts, int oldvers);
|
|||||||
* iso_write_opts_set_replace_timestamps() apply. (replace==1 will revoke,
|
* iso_write_opts_set_replace_timestamps() apply. (replace==1 will revoke,
|
||||||
* replace==2 will override mtime by iso_write_opts_set_default_timestamp().
|
* replace==2 will override mtime by iso_write_opts_set_default_timestamp().
|
||||||
*
|
*
|
||||||
* Since version 1.2.0 this may apply also to Joliet and ISO 9660:1999. To
|
* Since version 1.2.0 this may apply also to Joliet and an Enhanced Volume
|
||||||
* reduce the probability of unwanted behavior changes between pre-1.2.0 and
|
* Descriptor tree (aka ISO 9660:1999) as of ECMA-119 4th Edition.
|
||||||
|
* To reduce the probability of unwanted behavior changes between pre-1.2.0 and
|
||||||
* post-1.2.0, the bits for Joliet and ISO 9660:1999 also enable ECMA-119.
|
* post-1.2.0, the bits for Joliet and ISO 9660:1999 also enable ECMA-119.
|
||||||
* The hopefully unlikely bit14 may then be used to disable mtime for ECMA-119.
|
* The hopefully unlikely bit14 may then be used to disable mtime for ECMA-119.
|
||||||
*
|
*
|
||||||
@ -2342,8 +2347,9 @@ int iso_write_opts_set_disc_label(IsoWriteOpts *opts, char *label);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Explicitly set the four timestamps of the emerging Primary Volume
|
* Explicitly set the four timestamps of the emerging Primary Volume
|
||||||
* Descriptor and in the volume descriptors of Joliet and ISO 9660:1999,
|
* Descriptor, in the volume descriptor of Joliet, and in the Enhanced Volume
|
||||||
* if those are to be generated.
|
* Descriptor (aka ISO 9660:1999) as of ECMA-119 4th Edition, if those are
|
||||||
|
* to be generated.
|
||||||
* Default with all parameters is 0.
|
* Default with all parameters is 0.
|
||||||
*
|
*
|
||||||
* ECMA-119 defines them as:
|
* ECMA-119 defines them as:
|
||||||
@ -3052,7 +3058,8 @@ int iso_read_opts_set_no_rockridge(IsoReadOpts *opts, int norr);
|
|||||||
int iso_read_opts_set_no_joliet(IsoReadOpts *opts, int nojoliet);
|
int iso_read_opts_set_no_joliet(IsoReadOpts *opts, int nojoliet);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Do not read ISO 9660:1999 enhanced tree
|
* Do not read the tree of an Enhanced Volume Descriptor (aka ISO 9660:1999)
|
||||||
|
* as of ECMA-119 4th Edition.
|
||||||
*
|
*
|
||||||
* @since 0.6.2
|
* @since 0.6.2
|
||||||
*/
|
*/
|
||||||
@ -3360,8 +3367,8 @@ int iso_read_image_features_has_rockridge(IsoReadImageFeatures *f);
|
|||||||
int iso_read_image_features_has_joliet(IsoReadImageFeatures *f);
|
int iso_read_image_features_has_joliet(IsoReadImageFeatures *f);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the image is recorded according to ISO 9660:1999, i.e. it has
|
* Whether the image is recorded with an Enhanced Volume Descriptor
|
||||||
* a version 2 Enhanced Volume Descriptor.
|
* (aka ISO 9660:1999) as of ECMA-119 4th Edition.
|
||||||
*
|
*
|
||||||
* @since 0.6.2
|
* @since 0.6.2
|
||||||
*/
|
*/
|
||||||
@ -3376,7 +3383,9 @@ int iso_read_image_features_has_eltorito(IsoReadImageFeatures *f);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells what directory tree was loaded:
|
* Tells what directory tree was loaded:
|
||||||
* 0= ISO 9660 , 1 = Joliet , 2 = ISO 9660:1999
|
* 0 = ISO 9660 , 1 = Joliet ,
|
||||||
|
* 2 = Enhanced Volume Descriptor tree as of ECMA-119 4th Edition
|
||||||
|
* (aka ISO 9660:1999)
|
||||||
*
|
*
|
||||||
* @since 1.5.4
|
* @since 1.5.4
|
||||||
*/
|
*/
|
||||||
@ -5367,7 +5376,8 @@ time_t iso_node_get_ctime(const IsoNode *node);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Set whether the node will be hidden in the directory trees of RR/ISO 9660,
|
* Set whether the node will be hidden in the directory trees of RR/ISO 9660,
|
||||||
* or of Joliet (if enabled at all), or of ISO-9660:1999 (if enabled at all).
|
* or of Joliet (if enabled at all), or of an Enhanced Volume Descriptor
|
||||||
|
* (aka ISO 9660:1999) as of ECMA-119 4th Edition (if enabled at all).
|
||||||
*
|
*
|
||||||
* A hidden file does not show up by name in the affected directory tree.
|
* A hidden file does not show up by name in the affected directory tree.
|
||||||
* For example, if a file is hidden only in Joliet, it will normally
|
* For example, if a file is hidden only in Joliet, it will normally
|
||||||
|
Loading…
Reference in New Issue
Block a user