Suffix rollback with -set_filter --remove-all-filters
This commit is contained in:
parent
9192380e90
commit
f99b7182f5
@ -2,7 +2,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH XORRISO 1 "Apr 05, 2009"
|
.TH XORRISO 1 "Apr 06, 2009"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -1094,6 +1094,8 @@ original content from stdin and writing to stdout whatever they want.
|
|||||||
They must deliver the same output on the same input in repeated runs.
|
They must deliver the same output on the same input in repeated runs.
|
||||||
.br
|
.br
|
||||||
Options are:
|
Options are:
|
||||||
|
.br
|
||||||
|
"default" means that no other option is intended.
|
||||||
.br
|
.br
|
||||||
"suffix=..." sets a file name suffix. If it is not empty then it will be
|
"suffix=..." sets a file name suffix. If it is not empty then it will be
|
||||||
appended to the file name or removed from it.
|
appended to the file name or removed from it.
|
||||||
@ -1134,12 +1136,14 @@ By default they are banned if xorriso runs under setuid permission.
|
|||||||
.TP
|
.TP
|
||||||
\fB\-set_filter\fR name iso_rr_path [***]
|
\fB\-set_filter\fR name iso_rr_path [***]
|
||||||
Apply an -external_filter to the given data files in the ISO image.
|
Apply an -external_filter to the given data files in the ISO image.
|
||||||
If the filter suffix is not empty , then it will be appended to the file name.
|
If the filter suffix is not empty , then it will be applied to the file name.
|
||||||
Renaming only happens if the filter really gets attached and is not revoked by
|
Renaming only happens if the filter really gets attached and is not revoked by
|
||||||
its options. Files which already bear the suffix will not get filtered.
|
its options.
|
||||||
|
By default files which already bear the suffix will not get filtered. The
|
||||||
|
others will get the suffix appended to their names.
|
||||||
If the filter has option "remove_suffix", then the filter will only be
|
If the filter has option "remove_suffix", then the filter will only be
|
||||||
applied if the suffix is present and can be removed.
|
applied if the suffix is present and can be removed.
|
||||||
Name collisons caused by suffix change will prevent filtering.
|
Name oversize or collision caused by suffix change will prevent filtering.
|
||||||
.br
|
.br
|
||||||
This command will immediately run the filter once for each file
|
This command will immediately run the filter once for each file
|
||||||
in order to determine the output size.
|
in order to determine the output size.
|
||||||
@ -1151,10 +1155,9 @@ output from the first run. Filtering for image generation does not happen
|
|||||||
with files from the loaded ISO image if the write method of growing is in
|
with files from the loaded ISO image if the write method of growing is in
|
||||||
effect (i.e -indev and -outdev are identical).
|
effect (i.e -indev and -outdev are identical).
|
||||||
.br
|
.br
|
||||||
The reserved filter name "--remove-all-filters" revokes filtering. A suffix
|
The reserved filter name "--remove-all-filters" revokes filtering. This will
|
||||||
may be appended after a "+" or "-". "-" will restrict the filter removal
|
revoke eventual suffix renamings as well. Use "--remove-all-filters+" to
|
||||||
to files with that suffix and remove it from the file name. "+" will only
|
prevent any suffix renaming.
|
||||||
process files without that suffix and add it to the name.
|
|
||||||
.TP
|
.TP
|
||||||
\fB\-set_filter_r\fR name isuffix iso_rr_path [***]
|
\fB\-set_filter_r\fR name isuffix iso_rr_path [***]
|
||||||
Like -set_filter but affecting all data files below eventual directories.
|
Like -set_filter but affecting all data files below eventual directories.
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2009.04.05.143043"
|
#define Xorriso_timestamP "2009.04.06.100802"
|
||||||
|
@ -9780,6 +9780,88 @@ int Xorriso_destroy_all_extf(struct XorrisO *xorriso, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
@param flag bit0= return 2 if renaming is not possible by libisofs
|
||||||
|
(always: if demanded strip suffix is missing
|
||||||
|
or if suffix makes name length > 255)
|
||||||
|
bit1= strip suffix rather than appending it
|
||||||
|
*/
|
||||||
|
int Xorriso_rename_suffix(struct XorrisO *xorriso, IsoNode *node, char *suffix,
|
||||||
|
char *show_path, int flag)
|
||||||
|
{
|
||||||
|
int ret, lo= 0, ls= 0, strip_suffix;
|
||||||
|
char *old_name= NULL, new_name[SfileadrL], *show_name;
|
||||||
|
|
||||||
|
strip_suffix= !!(flag & 2);
|
||||||
|
|
||||||
|
old_name= strdup((char *) iso_node_get_name(node));
|
||||||
|
show_name= old_name;
|
||||||
|
if(show_path != NULL)
|
||||||
|
if(show_path[0] != 0)
|
||||||
|
show_name= show_path;
|
||||||
|
lo= strlen(old_name);
|
||||||
|
ls= strlen(suffix);
|
||||||
|
if(strip_suffix) {
|
||||||
|
if(lo <= ls) {
|
||||||
|
/* refuse gracefully */
|
||||||
|
ret= 2; goto ex;
|
||||||
|
}
|
||||||
|
if(strcmp(old_name + lo - ls, suffix) != 0) {
|
||||||
|
ret= 2; goto ex;
|
||||||
|
}
|
||||||
|
if(lo > sizeof(new_name))
|
||||||
|
goto cannot_remove_suffix;
|
||||||
|
strcpy(new_name, old_name);
|
||||||
|
new_name[lo - ls]= 0;
|
||||||
|
ret = iso_node_set_name(node, new_name);
|
||||||
|
if (ret < 0) {
|
||||||
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
|
if (!(flag & 1))
|
||||||
|
Xorriso_report_iso_error(xorriso, "", ret,
|
||||||
|
"Error when renaming ISO node", 0, "FAILURE", 1);
|
||||||
|
cannot_remove_suffix:;
|
||||||
|
strcpy(xorriso->info_text, "-set_filter: Cannot remove suffix from ");
|
||||||
|
Text_shellsafe(show_name, xorriso->info_text, 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
|
||||||
|
(flag & 1) ? "WARNING" : "FAILURE", 0);
|
||||||
|
ret= 2 * (flag & 1); goto ex;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* check whether suffix already present */
|
||||||
|
if(lo >= ls)
|
||||||
|
if(strcmp(old_name + lo - ls, suffix) == 0) {
|
||||||
|
/* refuse gracefully */
|
||||||
|
ret= 2; goto ex;
|
||||||
|
}
|
||||||
|
if(lo + ls > 255) {
|
||||||
|
cannot_append_suffix:;
|
||||||
|
strcpy(xorriso->info_text, "-set_filter: Cannot append suffix to ");
|
||||||
|
Text_shellsafe(show_name, xorriso->info_text, 1);
|
||||||
|
strcat(xorriso->info_text, ". Left unfiltered.");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
|
||||||
|
(flag & 1) ? "WARNING" : "FAILURE", 0);
|
||||||
|
ret= 2 * (flag & 1); goto ex;
|
||||||
|
}
|
||||||
|
sprintf(new_name, "%s%s", old_name, suffix);
|
||||||
|
ret = iso_node_set_name(node, new_name);
|
||||||
|
if (ret < 0) {
|
||||||
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
|
if (!(flag & 1))
|
||||||
|
Xorriso_report_iso_error(xorriso, "", ret,
|
||||||
|
"Error when renaming ISO node", 0, "FAILURE", 1);
|
||||||
|
goto cannot_append_suffix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
if(old_name != NULL)
|
||||||
|
free(old_name);
|
||||||
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@param flag bit0= return 2 if renaming is not possible
|
@param flag bit0= return 2 if renaming is not possible
|
||||||
bit1= print pacifier messages
|
bit1= print pacifier messages
|
||||||
@ -9787,7 +9869,8 @@ int Xorriso_destroy_all_extf(struct XorrisO *xorriso, int flag)
|
|||||||
int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
||||||
char *path, char *filter_name, int flag)
|
char *path, char *filter_name, int flag)
|
||||||
{
|
{
|
||||||
int ret, lo= 0, ls= 0, strip_suffix= 0, strip_filter= 0, filter_ret;
|
int ret, strip_suffix= 0, strip_filter= 0, filter_ret;
|
||||||
|
int explicit_suffix= 0;
|
||||||
IsoNode *node;
|
IsoNode *node;
|
||||||
IsoFile *file;
|
IsoFile *file;
|
||||||
struct Xorriso_lsT *found_lst;
|
struct Xorriso_lsT *found_lst;
|
||||||
@ -9795,6 +9878,12 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
|||||||
IsoExternalFilterCommand *cmd = NULL;
|
IsoExternalFilterCommand *cmd = NULL;
|
||||||
char *old_name= NULL, new_name[SfileadrL], *suffix= "";
|
char *old_name= NULL, new_name[SfileadrL], *suffix= "";
|
||||||
|
|
||||||
|
#ifndef NIX
|
||||||
|
IsoStream *stream;
|
||||||
|
#else
|
||||||
|
int lo= 0, ls= 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
new_name[0]= 0;
|
new_name[0]= 0;
|
||||||
|
|
||||||
node= (IsoNode *) in_node;
|
node= (IsoNode *) in_node;
|
||||||
@ -9817,6 +9906,7 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
|||||||
if(strlen(filter_name) > 21) {
|
if(strlen(filter_name) > 21) {
|
||||||
strip_suffix= (filter_name[20] != '+');
|
strip_suffix= (filter_name[20] != '+');
|
||||||
suffix= filter_name + 21;
|
suffix= filter_name + 21;
|
||||||
|
explicit_suffix= 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ret= Xorriso_lookup_extf(xorriso, filter_name, &found_lst, 0);
|
ret= Xorriso_lookup_extf(xorriso, filter_name, &found_lst, 0);
|
||||||
@ -9835,6 +9925,18 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(suffix[0]) {
|
if(suffix[0]) {
|
||||||
|
|
||||||
|
#ifndef NIX
|
||||||
|
|
||||||
|
/* >>> would need full iso_rr_path of node for showing */;
|
||||||
|
|
||||||
|
ret= Xorriso_rename_suffix(xorriso, node, suffix, path,
|
||||||
|
(flag & 1) | (strip_suffix ? 2 : 0));
|
||||||
|
if(ret <= 0 || ret == 2)
|
||||||
|
goto ex;
|
||||||
|
|
||||||
|
#else /* ! NIX */
|
||||||
|
|
||||||
old_name= strdup((char *) iso_node_get_name(node));
|
old_name= strdup((char *) iso_node_get_name(node));
|
||||||
lo= strlen(old_name);
|
lo= strlen(old_name);
|
||||||
ls= strlen(suffix);
|
ls= strlen(suffix);
|
||||||
@ -9895,10 +9997,28 @@ cannot_append_suffix:;
|
|||||||
goto cannot_append_suffix;
|
goto cannot_append_suffix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* ! NIX */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strip_filter) {
|
if(strip_filter) {
|
||||||
while(1) {
|
while(1) {
|
||||||
|
if(!explicit_suffix) {
|
||||||
|
stream= iso_file_get_stream(file);
|
||||||
|
ret= iso_stream_get_external_filter(stream, &cmd, 0);
|
||||||
|
if(ret > 0) {
|
||||||
|
if(cmd->suffix[0]) {
|
||||||
|
|
||||||
|
/* >>> would need the current renaming state of path */;
|
||||||
|
|
||||||
|
ret= Xorriso_rename_suffix(xorriso, node, cmd->suffix, NULL,
|
||||||
|
(flag & 1) | (!(cmd->behavior & 8) << 1));
|
||||||
|
if(ret <= 0 || ret == 2)
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
ret= iso_file_remove_filter(file, 0);
|
ret= iso_file_remove_filter(file, 0);
|
||||||
if(ret != 1)
|
if(ret != 1)
|
||||||
break;
|
break;
|
||||||
@ -10004,6 +10124,13 @@ int Xorriso_external_filter(struct XorrisO *xorriso,
|
|||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
if((!(flag & 1)) && path[0] != '/') {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-external_filter : Given command path does not begin by '/' : ");
|
||||||
|
Text_shellsafe(path, xorriso->info_text, 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
delete= flag & 1;
|
delete= flag & 1;
|
||||||
@ -10048,7 +10175,10 @@ int Xorriso_external_filter(struct XorrisO *xorriso,
|
|||||||
*what_next= 0;
|
*what_next= 0;
|
||||||
what_next++;
|
what_next++;
|
||||||
}
|
}
|
||||||
if(strncmp(what, "suffix=", 7) == 0) {
|
if(strncmp(what, "default", 7) == 0) {
|
||||||
|
suffix= "";
|
||||||
|
behavior= 0;
|
||||||
|
} else if(strncmp(what, "suffix=", 7) == 0) {
|
||||||
suffix= what + 7;
|
suffix= what + 7;
|
||||||
} else if(strcmp(what, "remove_suffix") == 0) {
|
} else if(strcmp(what, "remove_suffix") == 0) {
|
||||||
behavior|= 8;
|
behavior|= 8;
|
||||||
|
Loading…
Reference in New Issue
Block a user