Re: Joliet extensions and files with no filename extension



Hi,

now it becomes tricky:

@Joerg Schilling:
Do you know Joliet specs, where the presence of SEPARATOR 1 and SEPARATOR 2
is declared optional ?

@everybody:
Does Microsoft in its own ISO 9660 + Joliet filesystems add ";1" to
Joliet names ?

Reading

  Joliet Specification
  CD-ROM Recording Spec ISO 9660:1988
  Extensions for Unicode Version 1; May 22, 1995
  Copyright 1995, Microsoft Corporation All Rights Reserved

i do not find any hint that the rule for file ISO 9660 name extensions
should not apply to Joliet. It talks explicitely of SEPARATOR 2, which
in the ECMA-119 (aka ISO 9660) specs is ';'.
Joliet does not override the prescription of ECMA-119, 7.5.1:

  "A File Identifier shall consist of the following sequence:
   − File Name: A sequence of zero or more d-characters or d1-characters;
   − SEPARATOR 1;
   − File Name Extension: A sequence of zero or more d-characters or d1-characters;
   − SEPARATOR 2;
   − File Version Number: Digits representing a number from 1 to 32 767.
 "

So the file name  "no_ext.;1"  would be standards compliant.
But mkisofs tradition is different.

This is unfortunate, because one cannot easily judge whether a trailing ";1"
is an artefact of the specs or a part of the original file name.
(In ECMA-119, the problem does not exist, because ';' is not allowed in
 File Name or File Name Extension.)

I will have to look into Linux kernel code to get an impression how
other programmers see the situation.

------------------------------------------------------------------------

In the xorriso runs the trailing dot is suppressed by a setting which
xorriso makes to libisofs.
One can override the setting by xorriso command
  -compliance strict

E.g.

  xorriso -compliance strict -as mkisofs -o test.iso -J -R -no-pad no_ext


The call of libisofs which disables the forced dot is

  /**
   * ISO-9660 forces filenames to have a ".", that separates file name from
   * extension. libisofs adds it if original filename doesn't has one. Set
   * this to 1 to prevent this behavior.
   * This breaks ECMA-119 specification. Use with caution.
   *
   * @param opts
   *      The option set to be manipulated.
   * @param no
   *      bit0= no forced dot with ECMA-119
   *      bit1= no forced dot with Joliet (@since 0.6.30)
   *
   * @since 0.6.2
   */
  int iso_write_opts_set_no_force_dots(IsoWriteOpts *opts, int no);

If brasero wants to omit the dot and ";1", then it would have to call
in its libisofs plugin

  iso_write_opts_set_no_force_dots(opts, 2);

E.g. in line 578 of:
  https://github.com/GNOME/brasero/blob/master/plugins/libburnia/burn-libisofs.c

        iso_write_opts_new (&opts, 2);
        iso_write_opts_set_relaxed_vol_atts(opts, 1);
+       iso_write_opts_set_no_force_dots(opts, 2);

        brasero_job_get_flags (BRASERO_JOB (self), &flags);

------------------------------------------------------------------------

Have a nice day :)

Thomas



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]