From 7dc45e331139da17eeb3e53960c746db30e64156 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sat, 28 Aug 2021 18:12:15 +0200 Subject: [PATCH] Warn of volid length for Joliet only if more than 16 characters (was: 16 bytes) --- xorriso/lib_mgt.c | 43 +++++++++++++++++++++++++++++++++++++ xorriso/opts_p_z.c | 19 +++++++++++++--- xorriso/xorriso_timestamp.h | 2 +- xorriso/xorrisoburn.h | 5 +++++ 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/xorriso/lib_mgt.c b/xorriso/lib_mgt.c index 335e3e26..f130c77f 100644 --- a/xorriso/lib_mgt.c +++ b/xorriso/lib_mgt.c @@ -57,6 +57,7 @@ #include "lib_mgt.h" #include "iso_manip.h" +#include "write_run.h" int Xorriso_abort(struct XorrisO *xorriso, int flag) @@ -1042,3 +1043,45 @@ int Xorriso_set_libisofs_now(struct XorrisO *xorriso, int flag) return(ret); } + +/* Frontend to isoburn_conv_name_chars() + @param flag bit0= File name. + Do not omit version number if it would appear. +*/ +int Xorriso_conv_name_chars(struct XorrisO *xorriso, char *name, + char **result, size_t *result_len, + int name_space, int flag) +{ + int ret, relax_mem; + struct isoburn_imgen_opts *sopts= NULL; + + *result= NULL; + *result_len= 0; + + relax_mem= xorriso->relax_compliance; + + ret= isoburn_igopt_new(&sopts, 0); + if(ret<=0) { + Xorriso_process_msg_queues(xorriso, 0); + ret= -1; goto ex; + } + if(!(flag & 1)) + xorriso->relax_compliance|= isoburn_igopt_omit_version_numbers; + ret= Xorriso_make_iso_write_opts(xorriso, NULL, sopts, 0); + if(ret <= 0) { + ret= -1; goto ex; + } + ret= isoburn_conv_name_chars(sopts, name, strlen(name), result, result_len, + name_space); + if(ret <= 0) { + Xorriso_process_msg_queues(xorriso, 0); + ret= 0; goto ex; + } + + ret= 1; +ex:; + isoburn_igopt_destroy(&sopts, 0); + xorriso->relax_compliance= relax_mem; + return(ret); +} + diff --git a/xorriso/opts_p_z.c b/xorriso/opts_p_z.c index 68d5dca2..b8e89dfa 100644 --- a/xorriso/opts_p_z.c +++ b/xorriso/opts_p_z.c @@ -2083,6 +2083,8 @@ int Xorriso_option_version(struct XorrisO *xorriso, int flag) int Xorriso_option_volid(struct XorrisO *xorriso, char *volid, int flag) { int warn_shell= 0, warn_ecma= 0, i, ret; + char *result= NULL; + size_t result_len= 0; static char shell_chars[]= { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-+=:.,~@"}; static char ecma_chars[]= {"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"}; @@ -2104,9 +2106,20 @@ int Xorriso_option_volid(struct XorrisO *xorriso, char *volid, int flag) Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); } if(xorriso->do_joliet && strlen(volid)>16 && !(flag & 1)) { - sprintf(xorriso->info_text, - "-volid text is too long for Joliet (%d > 16)",(int) strlen(volid)); - Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); + ret= Xorriso_conv_name_chars(xorriso, volid, &result, &result_len, 2, 0); + if(result != NULL) + free(result); /* just want the result_len */ + xorriso->info_text[0]= 0; + if(ret <= 0) { + sprintf(xorriso->info_text, + "Cannot determine length of -volid text in Joliet character set"); + } else if(result_len > 32) { + sprintf(xorriso->info_text, + "-volid text is too long for Joliet (%d > 16)", + (int) (result_len + 1) / 2); + } + if(xorriso->info_text[0]) + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); } if(warn_ecma && !(flag & 1)) { sprintf(xorriso->info_text, diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index fe917ab6..b63d7ece 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2021.06.04.155151" +#define Xorriso_timestamP "2021.08.28.161158" diff --git a/xorriso/xorrisoburn.h b/xorriso/xorrisoburn.h index e21a7c05..1b5151d7 100644 --- a/xorriso/xorrisoburn.h +++ b/xorriso/xorrisoburn.h @@ -676,5 +676,10 @@ int Xorriso_set_libisofs_now(struct XorrisO *xorriso, int flag); int Xorriso_obtain_indev_readsize(struct XorrisO *xorriso, uint32_t *blocks, int flag); +/* Frontend to isoburn_conv_name_chars() */ +int Xorriso_conv_name_chars(struct XorrisO *xorriso, char *name, + char **result, size_t *result_len, + int name_space, int flag); + #endif /* Xorrisoburn_includeD */