Issueing warnings when Joliet file names with non-UCS-2 characters get read
This commit is contained in:
parent
9b4e0b611a
commit
60eb7e883c
@ -1511,17 +1511,16 @@ ex:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
void issue_ucs2_warning_summary(size_t failures)
|
||||||
void issue_write_warning_summary(Ecma119Image *target)
|
|
||||||
{
|
{
|
||||||
if (target->joliet_ucs2_failures > ISO_JOLIET_UCS2_WARN_MAX) {
|
if (failures > ISO_JOLIET_UCS2_WARN_MAX) {
|
||||||
iso_msg_submit(-1, ISO_NAME_NOT_UCS2, 0,
|
iso_msg_submit(-1, ISO_NAME_NOT_UCS2, 0,
|
||||||
"More filenames found which were not suitable for Joliet character set UCS-2");
|
"More filenames found which were not suitable for Joliet character set UCS-2");
|
||||||
}
|
}
|
||||||
if (target->joliet_ucs2_failures > 0) {
|
if (failures > 0) {
|
||||||
iso_msg_submit(-1, ISO_NAME_NOT_UCS2, 0,
|
iso_msg_submit(-1, ISO_NAME_NOT_UCS2, 0,
|
||||||
"Sum of filenames not suitable for Joliet character set UCS-2: %.f",
|
"Sum of filenames not suitable for Joliet character set UCS-2: %.f",
|
||||||
(double) target->joliet_ucs2_failures);
|
(double) failures);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1583,7 +1582,7 @@ void *write_function(void *arg)
|
|||||||
if (res <= 0)
|
if (res <= 0)
|
||||||
goto write_error;
|
goto write_error;
|
||||||
|
|
||||||
issue_write_warning_summary(target);
|
issue_ucs2_warning_summary(target->joliet_ucs2_failures);
|
||||||
|
|
||||||
target->image->generator_is_running = 0;
|
target->image->generator_is_running = 0;
|
||||||
|
|
||||||
|
@ -965,4 +965,7 @@ void ecma119_set_voldescr_times(IsoImageWriter *writer,
|
|||||||
int iso_write_partition_file(Ecma119Image *target, char *path,
|
int iso_write_partition_file(Ecma119Image *target, char *path,
|
||||||
uint32_t prepad, uint32_t blocks, int flag);
|
uint32_t prepad, uint32_t blocks, int flag);
|
||||||
|
|
||||||
|
void issue_ucs2_warning_summary(size_t failures);
|
||||||
|
|
||||||
|
|
||||||
#endif /*LIBISO_ECMA119_H_*/
|
#endif /*LIBISO_ECMA119_H_*/
|
||||||
|
@ -354,6 +354,8 @@ typedef struct
|
|||||||
int rr_err_reported;
|
int rr_err_reported;
|
||||||
int rr_err_repeated;
|
int rr_err_repeated;
|
||||||
|
|
||||||
|
size_t joliet_ucs2_failures;
|
||||||
|
|
||||||
} _ImageFsData;
|
} _ImageFsData;
|
||||||
|
|
||||||
typedef struct image_fs_data ImageFileSourceData;
|
typedef struct image_fs_data ImageFileSourceData;
|
||||||
@ -1243,12 +1245,30 @@ static
|
|||||||
char *get_name(_ImageFsData *fsdata, const char *str, size_t len)
|
char *get_name(_ImageFsData *fsdata, const char *str, size_t len)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
char *name = NULL;
|
char *name = NULL, *from_ucs = NULL;
|
||||||
if (strcmp(fsdata->local_charset, fsdata->input_charset)) {
|
if (strcmp(fsdata->local_charset, fsdata->input_charset)) {
|
||||||
/* charset conversion needed */
|
/* charset conversion needed */
|
||||||
ret = strnconv(str, fsdata->input_charset, fsdata->local_charset, len,
|
ret = strnconv(str, fsdata->input_charset, fsdata->local_charset, len,
|
||||||
&name);
|
&name);
|
||||||
if (ret == 1) {
|
if (ret == 1) {
|
||||||
|
if (fsdata->iso_root_block == fsdata->svd_root_block) {
|
||||||
|
/* Reading from Joliet : Check whether UTF-16 was needed */
|
||||||
|
ret = strnconv(str, "UCS-2BE", fsdata->local_charset,
|
||||||
|
len, &from_ucs);
|
||||||
|
if (ret == 1)
|
||||||
|
ret = (strcmp(name, from_ucs) == 0);
|
||||||
|
if (ret != 1) {
|
||||||
|
fsdata->joliet_ucs2_failures++;
|
||||||
|
if (fsdata->joliet_ucs2_failures <=
|
||||||
|
ISO_JOLIET_UCS2_WARN_MAX)
|
||||||
|
iso_msg_submit(-1, ISO_NAME_NOT_UCS2, 0,
|
||||||
|
"Joliet filename valid only with character set UTF-16 : \"%s\"",
|
||||||
|
name);
|
||||||
|
|
||||||
|
}
|
||||||
|
if (from_ucs != NULL)
|
||||||
|
free(from_ucs);
|
||||||
|
}
|
||||||
return name;
|
return name;
|
||||||
} else {
|
} else {
|
||||||
ret = iso_msg_submit(fsdata->msgid, ISO_FILENAME_WRONG_CHARSET, ret,
|
ret = iso_msg_submit(fsdata->msgid, ISO_FILENAME_WRONG_CHARSET, ret,
|
||||||
@ -2759,6 +2779,7 @@ int iso_image_filesystem_new(IsoDataSource *src, struct iso_read_opts *opts,
|
|||||||
data->px_ino_status = 0;
|
data->px_ino_status = 0;
|
||||||
data->rr_err_reported = 0;
|
data->rr_err_reported = 0;
|
||||||
data->rr_err_repeated = 0;
|
data->rr_err_repeated = 0;
|
||||||
|
data->joliet_ucs2_failures = 0;
|
||||||
|
|
||||||
|
|
||||||
data->local_charset = strdup(iso_get_local_charset(0));
|
data->local_charset = strdup(iso_get_local_charset(0));
|
||||||
@ -3640,12 +3661,12 @@ int iso_image_import(IsoImage *image, IsoDataSource *src,
|
|||||||
|
|
||||||
/* recursively add image */
|
/* recursively add image */
|
||||||
ret = iso_add_dir_src_rec(image, image->root, newroot);
|
ret = iso_add_dir_src_rec(image, image->root, newroot);
|
||||||
|
|
||||||
/* error during recursive image addition? */
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
/* error during recursive image addition */
|
||||||
iso_node_builder_unref(image->builder);
|
iso_node_builder_unref(image->builder);
|
||||||
goto import_revert;
|
goto import_revert;
|
||||||
}
|
}
|
||||||
|
issue_ucs2_warning_summary(data->joliet_ucs2_failures);
|
||||||
|
|
||||||
/* Take over inode management from IsoImageFilesystem.
|
/* Take over inode management from IsoImageFilesystem.
|
||||||
data->inode_counter is supposed to hold the maximum PX inode number.
|
data->inode_counter is supposed to hold the maximum PX inode number.
|
||||||
|
Loading…
Reference in New Issue
Block a user