From 6a100a645d1d0ba346d6e28c6344afb608af8a93 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 6 Oct 2024 11:08:47 +0200 Subject: [PATCH] Clarified meaning of "ISO 9660:1999" as Enhanced Volume Descriptor of ECMA-119 4th Edition --- doc/devel/cookbook/ISO 9660-1999 | 6 ++++- libisofs/iso1999.c | 36 ++++++++++++++++++------------ libisofs/iso1999.h | 13 ++++++----- libisofs/libisofs.h | 38 ++++++++++++++++++++------------ 4 files changed, 58 insertions(+), 35 deletions(-) diff --git a/doc/devel/cookbook/ISO 9660-1999 b/doc/devel/cookbook/ISO 9660-1999 index 4b813b7..4f07836 100644 --- a/doc/devel/cookbook/ISO 9660-1999 +++ b/doc/devel/cookbook/ISO 9660-1999 @@ -19,9 +19,13 @@ Contents: ------------------------------------------------------------------------------- 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 CD­-ROM for Information Interchange" - + ------------------------------------------------------------------------------- 2. General diff --git a/libisofs/iso1999.c b/libisofs/iso1999.c index 3ac324c..3decd42 100644 --- a/libisofs/iso1999.c +++ b/libisofs/iso1999.c @@ -1,6 +1,6 @@ /* * 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 * 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) { 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 * 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 * 1 success, 0 file ignored, < 0 error @@ -300,8 +302,8 @@ cmp_node(const void *f1, const void *f2) Iso1999Node *g = *((Iso1999Node**)f2); /** - * TODO #00027 Follow ISO 9660:1999 specs when sorting files - * strcmp do not does exactly what ISO 9660:1999, 9.3, as characters + * TODO #00027 Follow ECMA-119 4th Edition specs when sorting files + * strcmp do not does exactly what paragraph 9.3 prescribe, as characters * < 0x20 " " are allowed, so name len must be taken into account */ 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 - * ISO 9660:1999, 9.3 + * ISO 9660:1999 / ECMA-119 4th Edition, 9.3 */ static 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 - * stated in ISO 9660:1999, 6.8.1.3 + * stated in ISO 9660:1999 / ECMA-119 4th Edition, 6.8.1.3 */ static 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 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); @@ -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 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 * 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 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; 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; strncpy_pad((char*)vol.volume_id, vol_id, 32); @@ -1052,7 +1058,9 @@ int iso1999_writer_write_data(IsoImageWriter *writer) static 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; iso1999_node_free(t->iso1999_root); return ISO_SUCCESS; diff --git a/libisofs/iso1999.h b/libisofs/iso1999.h index 9e10b84..935c896 100644 --- a/libisofs/iso1999.h +++ b/libisofs/iso1999.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2007 Vreixo Formoso + * Copyright (c) 2024 Thomas Schmitt * * 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 @@ -8,11 +9,11 @@ */ /** - * Structures related to ISO/IEC 9660:1999, that is version 2 of ISO-9660 - * "See doc/devel/cookbook/ISO 9660-1999" and - * ISO/IEC DIS 9660:1999(E) "Information processing. Volume and file structure - * of CD­-ROM for Information Interchange" - * for further details. + * Structures related to the Enhanced Volume Descriptor as of ECMA-119 4th + * Edition. See there and in "doc/devel/cookbook/ISO 9660-1999" for further + * details. + * This optional tree is also known as ISO/IEC DIS 9660:1999, a once proposed + * version 2 of ISO-9660. */ #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. * * @return diff --git a/libisofs/libisofs.h b/libisofs/libisofs.h index 777f36a..b961c04 100644 --- a/libisofs/libisofs.h +++ b/libisofs/libisofs.h @@ -304,7 +304,10 @@ enum IsoHideNodeFlag { LIBISO_HIDE_ON_RR = 1 << 0, /** Hide the node in the Joliet tree, if Joliet extension are enabled */ 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, /** 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 - * less restrictions than old ISO-9660. However, nobody is using it so there - * are no much reasons to enable this. + * This allows longer filenames and has less restrictions than ECMA-119 2nd + * Edition aka ISO-9660:1988. However, nobody is using it. So there are + * not many reasons to enable this. * * @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, * 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 - * reduce the probability of unwanted behavior changes between pre-1.2.0 and + * Since version 1.2.0 this may apply also to Joliet and an Enhanced Volume + * 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. * 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 - * Descriptor and in the volume descriptors of Joliet and ISO 9660:1999, - * if those are to be generated. + * Descriptor, in the volume descriptor of Joliet, and in the Enhanced Volume + * Descriptor (aka ISO 9660:1999) as of ECMA-119 4th Edition, if those are + * to be generated. * Default with all parameters is 0. * * 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); /** - * 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 */ @@ -3360,8 +3367,8 @@ int iso_read_image_features_has_rockridge(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 - * a version 2 Enhanced Volume Descriptor. + * Whether the image is recorded with an Enhanced Volume Descriptor + * (aka ISO 9660:1999) as of ECMA-119 4th Edition. * * @since 0.6.2 */ @@ -3376,7 +3383,9 @@ int iso_read_image_features_has_eltorito(IsoReadImageFeatures *f); /** * 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 */ @@ -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, - * 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. * For example, if a file is hidden only in Joliet, it will normally