New -find test -bad_outname, new -find action print_outname
This commit is contained in:
@ -34,6 +34,7 @@
|
||||
#include "iso_manip.h"
|
||||
#include "sort_cmp.h"
|
||||
#include "parse_exec.h"
|
||||
#include "write_run.h"
|
||||
|
||||
|
||||
|
||||
@ -2309,6 +2310,91 @@ int Xorriso_estimate_file_size(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= do not compare but print input and back converted name
|
||||
*/
|
||||
int Xorriso_test_outchar(struct XorrisO *xorriso, void *node_pt,
|
||||
int name_space, int flag)
|
||||
{
|
||||
IsoNode *node;
|
||||
char *result= NULL, *name, *back= NULL;
|
||||
int ret, relax_mem;
|
||||
size_t result_len, back_len, i;
|
||||
struct isoburn_imgen_opts *sopts= NULL;
|
||||
|
||||
relax_mem= xorriso->relax_compliance;
|
||||
|
||||
node= (IsoNode *) node_pt;
|
||||
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;
|
||||
}
|
||||
|
||||
if(iso_node_get_type(node) == LIBISO_DIR)
|
||||
name_space |= 256;
|
||||
name_space|= 512; /* no error messages */
|
||||
|
||||
name= (char *) iso_node_get_name(node);
|
||||
if(name == NULL) {
|
||||
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);
|
||||
if(flag & 1)
|
||||
goto print_outname;
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
|
||||
/* Convert back and compare with original */
|
||||
ret= isoburn_conv_name_chars(sopts, result, result_len, &back, &back_len,
|
||||
name_space | (1 << 15));
|
||||
if(ret <= 0) {
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
if(flag & 1)
|
||||
goto print_outname;
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
if(flag & 1) {
|
||||
print_outname:;
|
||||
Text_shellsafe(name, xorriso->result_line, 0);
|
||||
strcat(xorriso->result_line, "\n");
|
||||
Xorriso_result(xorriso, 0);
|
||||
if(back == NULL)
|
||||
strcpy(xorriso->result_line, "(file name conversion error)");
|
||||
else
|
||||
Text_shellsafe(back, xorriso->result_line, 0);
|
||||
strcat(xorriso->result_line, "\n");
|
||||
Xorriso_result(xorriso, 0);
|
||||
strcpy(xorriso->result_line, "--\n");
|
||||
Xorriso_result(xorriso, 0);
|
||||
} else {
|
||||
for(i= 0; i < back_len; i++)
|
||||
if(name[i] != back[i])
|
||||
{ret= 0; goto ex;}
|
||||
if(name[i] != 0)
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
|
||||
ret= 1;
|
||||
ex:;
|
||||
isoburn_igopt_destroy(&sopts, 0);
|
||||
if(result != NULL)
|
||||
free(result);
|
||||
if(back != NULL)
|
||||
free(back);
|
||||
xorriso->relax_compliance= relax_mem;
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_cannot_create_iter(struct XorrisO *xorriso, int iso_error,int flag)
|
||||
{
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
@ -2676,6 +2762,11 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
|
||||
}
|
||||
ret= 1;
|
||||
|
||||
} else if(action == 50) {
|
||||
ret= Xorriso_test_outchar(xorriso, (void *) node, type, 1);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
|
||||
} else { /* includes : 15 in_iso */
|
||||
Xorriso_esc_filepath(xorriso, show_path, xorriso->result_line, 0);
|
||||
strcat(xorriso->result_line, "\n");
|
||||
@ -2956,6 +3047,14 @@ return:
|
||||
break; case 20: /* -disk_path */
|
||||
value= !! Exprtest_match_disk_name(xorriso, ftest, node, 1);
|
||||
|
||||
break; case 21: /* -bad_outname */
|
||||
ret= Xorriso_test_outchar(xorriso, node, *((int *) arg1), 0);
|
||||
if(ret < 0) {
|
||||
value= -1;
|
||||
goto ex;
|
||||
}
|
||||
value= !ret; /* Xorriso_test_outchar() returns 1 for good and 0 for bad */
|
||||
|
||||
break; default:
|
||||
|
||||
/* >>> complain about unknown test type */;
|
||||
|
Reference in New Issue
Block a user