New API call iso_write_opts_set_allow_dir_id_ext()
This commit is contained in:
parent
362b15f4d5
commit
f923a79929
@ -1576,6 +1576,7 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *opts, Ecma119Image **img)
|
|||||||
target->aaip = opts->aaip;
|
target->aaip = opts->aaip;
|
||||||
target->always_gmt = opts->always_gmt;
|
target->always_gmt = opts->always_gmt;
|
||||||
target->untranslated_name_len = opts->untranslated_name_len;
|
target->untranslated_name_len = opts->untranslated_name_len;
|
||||||
|
target->allow_dir_id_ext = opts->allow_dir_id_ext;
|
||||||
target->omit_version_numbers = opts->omit_version_numbers
|
target->omit_version_numbers = opts->omit_version_numbers
|
||||||
| opts->max_37_char_filenames;
|
| opts->max_37_char_filenames;
|
||||||
target->allow_deep_paths = opts->allow_deep_paths;
|
target->allow_deep_paths = opts->allow_deep_paths;
|
||||||
@ -2364,6 +2365,7 @@ int iso_write_opts_new(IsoWriteOpts **opts, int profile)
|
|||||||
wopts->appended_partitions[i] = NULL;
|
wopts->appended_partitions[i] = NULL;
|
||||||
wopts->ascii_disc_label[0] = 0;
|
wopts->ascii_disc_label[0] = 0;
|
||||||
wopts->will_cancel = 0;
|
wopts->will_cancel = 0;
|
||||||
|
wopts->allow_dir_id_ext = 0;
|
||||||
wopts->untranslated_name_len = 0;
|
wopts->untranslated_name_len = 0;
|
||||||
|
|
||||||
*opts = wopts;
|
*opts = wopts;
|
||||||
@ -2469,6 +2471,15 @@ int iso_write_opts_set_untranslated_name_len(IsoWriteOpts *opts, int len)
|
|||||||
return opts->untranslated_name_len;
|
return opts->untranslated_name_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int iso_write_opts_set_allow_dir_id_ext(IsoWriteOpts *opts, int allow)
|
||||||
|
{
|
||||||
|
if (opts == NULL) {
|
||||||
|
return ISO_NULL_POINTER;
|
||||||
|
}
|
||||||
|
opts->allow_dir_id_ext = allow ? 1 : 0;
|
||||||
|
return ISO_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
int iso_write_opts_set_omit_version_numbers(IsoWriteOpts *opts, int omit)
|
int iso_write_opts_set_omit_version_numbers(IsoWriteOpts *opts, int omit)
|
||||||
{
|
{
|
||||||
if (opts == NULL) {
|
if (opts == NULL) {
|
||||||
|
@ -87,6 +87,14 @@ struct iso_write_opts {
|
|||||||
* but it is supposed to work on most moderns systems. Use with caution.
|
* but it is supposed to work on most moderns systems. Use with caution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert directory names for ECMA-119 the same way as other file names
|
||||||
|
* but do not force dots or add version numbers.
|
||||||
|
* This violates ECMA-119 by allowing one "." and especially ISO level 1
|
||||||
|
* by allowing DOS style 8.3 names rather than only 8 characters.
|
||||||
|
*/
|
||||||
|
unsigned int allow_dir_id_ext :1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Omit the version number (";1") at the end of the ISO-9660 identifiers.
|
* Omit the version number (";1") at the end of the ISO-9660 identifiers.
|
||||||
* Version numbers are usually not used.
|
* Version numbers are usually not used.
|
||||||
@ -425,6 +433,7 @@ struct ecma119_image
|
|||||||
unsigned int always_gmt :1;
|
unsigned int always_gmt :1;
|
||||||
|
|
||||||
/* relaxed constraints */
|
/* relaxed constraints */
|
||||||
|
unsigned int allow_dir_id_ext :1;
|
||||||
unsigned int omit_version_numbers :2;
|
unsigned int omit_version_numbers :2;
|
||||||
unsigned int allow_deep_paths :1;
|
unsigned int allow_deep_paths :1;
|
||||||
unsigned int allow_longer_paths :1;
|
unsigned int allow_longer_paths :1;
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
static
|
static
|
||||||
int get_iso_name(Ecma119Image *img, IsoNode *iso, char **name)
|
int get_iso_name(Ecma119Image *img, IsoNode *iso, char **name)
|
||||||
{
|
{
|
||||||
int ret, relaxed, free_ascii_name= 0;
|
int ret, relaxed, free_ascii_name= 0, force_dots = 0, max_len;
|
||||||
char *ascii_name;
|
char *ascii_name;
|
||||||
char *isoname= NULL;
|
char *isoname= NULL;
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ int get_iso_name(Ecma119Image *img, IsoNode *iso, char **name)
|
|||||||
} else {
|
} else {
|
||||||
relaxed = (int)img->allow_lowercase;
|
relaxed = (int)img->allow_lowercase;
|
||||||
}
|
}
|
||||||
if (iso->type == LIBISO_DIR) {
|
if (iso->type == LIBISO_DIR && !(img->allow_dir_id_ext)) {
|
||||||
if (img->untranslated_name_len > 0) {
|
if (img->untranslated_name_len > 0) {
|
||||||
if (strlen(ascii_name) > img->untranslated_name_len) {
|
if (strlen(ascii_name) > img->untranslated_name_len) {
|
||||||
needs_transl:;
|
needs_transl:;
|
||||||
@ -85,24 +85,27 @@ needs_transl:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
force_dots = !((img->no_force_dots & 1) || iso->type == LIBISO_DIR);
|
||||||
if (img->untranslated_name_len > 0) {
|
if (img->untranslated_name_len > 0) {
|
||||||
if (strlen(ascii_name) > img->untranslated_name_len)
|
if (strlen(ascii_name) > img->untranslated_name_len)
|
||||||
goto needs_transl;
|
goto needs_transl;
|
||||||
isoname = strdup(ascii_name);
|
isoname = strdup(ascii_name);
|
||||||
} else if (img->max_37_char_filenames) {
|
} else if (img->max_37_char_filenames) {
|
||||||
isoname = iso_r_fileid(ascii_name, 36, relaxed,
|
isoname = iso_r_fileid(ascii_name, 36, relaxed, force_dots);
|
||||||
(img->no_force_dots & 1) ? 0 : 1);
|
|
||||||
} else if (img->iso_level == 1) {
|
} else if (img->iso_level == 1) {
|
||||||
if (relaxed) {
|
if (relaxed || !force_dots) {
|
||||||
isoname = iso_r_fileid(ascii_name, 11, relaxed,
|
if (strchr(ascii_name, '.') == NULL)
|
||||||
(img->no_force_dots & 1) ? 0 : 1);
|
max_len = 8;
|
||||||
|
else
|
||||||
|
max_len = 11;
|
||||||
|
isoname = iso_r_fileid(ascii_name, max_len, relaxed,
|
||||||
|
force_dots);
|
||||||
} else {
|
} else {
|
||||||
isoname = iso_1_fileid(ascii_name);
|
isoname = iso_1_fileid(ascii_name);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (relaxed) {
|
if (relaxed || !force_dots) {
|
||||||
isoname = iso_r_fileid(ascii_name, 30, relaxed,
|
isoname = iso_r_fileid(ascii_name, 30, relaxed, force_dots);
|
||||||
(img->no_force_dots & 1) ? 0 : 1);
|
|
||||||
} else {
|
} else {
|
||||||
isoname = iso_2_fileid(ascii_name);
|
isoname = iso_2_fileid(ascii_name);
|
||||||
}
|
}
|
||||||
@ -587,10 +590,11 @@ int mangle_single_dir(Ecma119Image *img, Ecma119Node *dir, int max_file_len,
|
|||||||
|
|
||||||
/* compute name and extension */
|
/* compute name and extension */
|
||||||
dot = strrchr(full_name, '.');
|
dot = strrchr(full_name, '.');
|
||||||
if (dot != NULL && children[i]->type != ECMA119_DIR) {
|
if (dot != NULL &&
|
||||||
|
(children[i]->type != ECMA119_DIR || img->allow_dir_id_ext)) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* File (not dir) with extension
|
* File (normally not dir) with extension
|
||||||
* Note that we don't need to check for placeholders, as
|
* Note that we don't need to check for placeholders, as
|
||||||
* tree reparent happens later, so no placeholders can be
|
* tree reparent happens later, so no placeholders can be
|
||||||
* here at this time.
|
* here at this time.
|
||||||
@ -630,10 +634,10 @@ int mangle_single_dir(Ecma119Image *img, Ecma119Node *dir, int max_file_len,
|
|||||||
name[max] = '\0';
|
name[max] = '\0';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Directory, or file without extension */
|
/* Directory (normally), or file without extension */
|
||||||
if (children[i]->type == ECMA119_DIR) {
|
if (children[i]->type == ECMA119_DIR) {
|
||||||
max = max_dir_len - digits;
|
max = max_dir_len - digits;
|
||||||
dot = NULL; /* dots have no meaning in dirs */
|
dot = NULL; /* dots (normally) have no meaning in dirs */
|
||||||
} else {
|
} else {
|
||||||
max = max_file_len - digits;
|
max = max_file_len - digits;
|
||||||
}
|
}
|
||||||
|
@ -1372,6 +1372,22 @@ int iso_write_opts_set_aaip(IsoWriteOpts *opts, int enable);
|
|||||||
*/
|
*/
|
||||||
int iso_write_opts_set_untranslated_name_len(IsoWriteOpts *opts, int len);
|
int iso_write_opts_set_untranslated_name_len(IsoWriteOpts *opts, int len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert directory names for ECMA-119 similar to other file names, but do
|
||||||
|
* not force a dot or add a version number.
|
||||||
|
* This violates ECMA-119 by allowing one "." and especially ISO level 1
|
||||||
|
* by allowing DOS style 8.3 names rather than only 8 characters.
|
||||||
|
* (mkisofs and its clones seem to do this violation.)
|
||||||
|
* @param opts
|
||||||
|
* The option set to be manipulated.
|
||||||
|
* @param allow
|
||||||
|
* 1= allow dots , 0= disallow dots and convert them
|
||||||
|
* @return
|
||||||
|
* 1 success, < 0 error
|
||||||
|
* @since 0.6.42
|
||||||
|
*/
|
||||||
|
int iso_write_opts_set_allow_dir_id_ext(IsoWriteOpts *opts, int allow);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Omit the version number (";1") at the end of the ISO-9660 identifiers.
|
* Omit the version number (";1") at the end of the ISO-9660 identifiers.
|
||||||
* This breaks ECMA-119 specification, but version numbers are usually not
|
* This breaks ECMA-119 specification, but version numbers are usually not
|
||||||
|
@ -255,6 +255,7 @@ iso_write_opts_new;
|
|||||||
iso_write_opts_set_aaip;
|
iso_write_opts_set_aaip;
|
||||||
iso_write_opts_set_aaip_susp_1_10;
|
iso_write_opts_set_aaip_susp_1_10;
|
||||||
iso_write_opts_set_allow_deep_paths;
|
iso_write_opts_set_allow_deep_paths;
|
||||||
|
iso_write_opts_set_allow_dir_id_ext;
|
||||||
iso_write_opts_set_allow_full_ascii;
|
iso_write_opts_set_allow_full_ascii;
|
||||||
iso_write_opts_set_allow_longer_paths;
|
iso_write_opts_set_allow_longer_paths;
|
||||||
iso_write_opts_set_allow_lowercase;
|
iso_write_opts_set_allow_lowercase;
|
||||||
|
Loading…
Reference in New Issue
Block a user