New -find test -bad_outname, new -find action print_outname

This commit is contained in:
2013-12-29 12:02:10 +00:00
parent a924b5cec0
commit 5483ac27f6
10 changed files with 514 additions and 240 deletions

View File

@ -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 */;