[elbe-devel] [PATCH 2/5] Add ISO files options for source cdroms
Kurt Kanzenbach
kurt.kanzenbach at linutronix.de
Wed Jul 17 09:38:09 CEST 2019
On Mon, Jul 15, 2019 at 11:21:59AM +0200, dion at linutronix.de wrote:
> From: Olivier Dion <dion at linutronix.de>
>
> See https://wiki.osdev.org/ISO_9660
>
> * get_iso_option
>
> Takes a valid XML tree and iterate over the tags under the path
> 'target/src-opts/*'. For each good tag, the tag's text is truncated
> with the corresponding limit for the option has described by
> ISO-9660. The function return a valid string for the command line.
>
> * iso_option_valid
>
> Take an option name and its text. If the option is uknown, return
> False. If a character in the option' text is invalid return the
> character. Otherwise return True.
>
> Signed-off-by: Olivier Dion <dion at linutronix.de>
Reviewed-by: Kurt Kanzenbach <kurt at linutronix.de>
Anyway, one comment below.
> ---
> elbepack/cdroms.py | 46 +++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 45 insertions(+), 1 deletion(-)
>
> diff --git a/elbepack/cdroms.py b/elbepack/cdroms.py
> index 3f2ecc21..ab5b6a23 100644
> --- a/elbepack/cdroms.py
> +++ b/elbepack/cdroms.py
> @@ -21,6 +21,45 @@ from elbepack.shellhelper import CommandError
> CDROM_SIZE = 640 * 1000 * 1000
>
>
> +# https://wiki.osdev.org/ISO_9660
> +iso_options = {
> + "sysid": ("-sysid", 32, "Specifies the system ID", "strA"),
> + "volid": ("-V", 32, "Specifies the volume ID", "strD"),
> + "volset": ("-volset", 128, "Specifies the volume set ID", "strD"),
> + "publisher": ("-publisher", 128, "Specifies the publisher ID", "strA"),
> + "preparer": ("-p", 128, "Specifies the preparer ID", "strA"),
> + "app": ("-A", 128, "Specifies the application ID", "strA"),
> + "copyright": ("-copyright", 38, "Specifies copyright filename on disc", "strD"),
> + "abstract": ("-abstract", 36, "Specifies the abstract filename", "strD"),
> + "biblio": ("-biblio", 37, "Specifies the bibliographic filename", "strD"),
> +}
> +
> +encoding = {
> + "strA":"""ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_!"%&'()*+,-./:;<=>? """,
> + "strD":"""ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"""
> +}
> +def iso_option_valid(opt_name, text):
> + if opt_name not in iso_options:
> + return False
> + str_type = encoding[iso_options[opt_name][3]]
Why not use hashes consistently? I'd prefer something like
str_type = encoding[iso_options[opt_name]["str_type"]]
> + if len(text) > iso_options[opt_name][1]:
if len(text) > iso_options[opt_name]["len"]:
and so on. It makes it easier to read.
> + return len(text) - iso_options[opt_name][1]
> + for c in text:
> + if c not in str_type:
> + return c
> + return True
> +
> +def get_iso_options(log, xml):
> + options = []
> + for node in xml.node("target/src-opts"):
> + if node.tag not in iso_options:
> + continue
> + option = iso_options[node.tag]
> + log.printo("Adding option %s\n%s" % (node.tag, option[2]))
> + text = node.et.text[:option[1]]
> + options.append('%s "%s"' % (option[0], text.replace('"', '\\"')))
> + return " ".join(options)
> +
> def mk_source_cdrom(
> rfs,
> arch,
> @@ -102,7 +141,12 @@ def mk_source_cdrom(
>
> repo.finalize()
>
> - return repo.buildiso(os.path.join(target, "src-cdrom.iso"))
> + if xml is not None:
> + options = get_iso_options(log, xml)
> + else:
> + options = ""
> +
> + return repo.buildiso(os.path.join(target, "src-cdrom.iso"), options=options)
>
> def mk_binary_cdrom(
> rfs,
> --
> 2.11.0
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.linutronix.de/pipermail/elbe-devel/attachments/20190717/03d37cc5/attachment.sig>
More information about the elbe-devel
mailing list