New command -concat
This commit is contained in:
parent
8d4867c9a4
commit
642ec7ca89
@ -177,6 +177,7 @@ Xorriso_option_commit;
|
|||||||
Xorriso_option_commit_eject;
|
Xorriso_option_commit_eject;
|
||||||
Xorriso_option_compare;
|
Xorriso_option_compare;
|
||||||
Xorriso_option_compliance;
|
Xorriso_option_compliance;
|
||||||
|
Xorriso_option_concat;
|
||||||
Xorriso_option_copyright_file;
|
Xorriso_option_copyright_file;
|
||||||
Xorriso_option_cp_clone;
|
Xorriso_option_cp_clone;
|
||||||
Xorriso_option_cpri;
|
Xorriso_option_cpri;
|
||||||
|
@ -1506,19 +1506,30 @@ ex:;
|
|||||||
|
|
||||||
/* @param flag bit0= path is a directory
|
/* @param flag bit0= path is a directory
|
||||||
bit2= recursion: do not reassure in mode 2 "tree"
|
bit2= recursion: do not reassure in mode 2 "tree"
|
||||||
bit3= this is for overwriting and not for plain removal
|
bit3-7= question text mode
|
||||||
|
0= plain removal
|
||||||
|
1= replacing file object
|
||||||
|
2= overwriting of content, keeping file object
|
||||||
|
3= appending of content, keeping file object
|
||||||
*/
|
*/
|
||||||
int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag)
|
int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret, mode;
|
||||||
|
|
||||||
|
mode= (flag >> 3) & 31;
|
||||||
while((xorriso->do_reassure==1 || (xorriso->do_reassure==2 && !(flag&4)))
|
while((xorriso->do_reassure==1 || (xorriso->do_reassure==2 && !(flag&4)))
|
||||||
&& !xorriso->request_not_to_ask) {
|
&& !xorriso->request_not_to_ask) {
|
||||||
/* ls -ld */
|
/* ls -ld */
|
||||||
Xorriso_lsx_filev(xorriso, xorriso->wdx, 1, &path, (off_t) 0, 1|2|8);
|
Xorriso_lsx_filev(xorriso, xorriso->wdx, 1, &path, (off_t) 0, 1|2|8);
|
||||||
if(flag&1) /* du -s */
|
if(flag&1) /* du -s */
|
||||||
Xorriso_lsx_filev(xorriso, xorriso->wdx, 1, &path, (off_t) 0, 2|4);
|
Xorriso_lsx_filev(xorriso, xorriso->wdx, 1, &path, (off_t) 0, 2|4);
|
||||||
if(flag&8)
|
if(mode == 3)
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"File exists. Append content ? n= no, y= yes, x= abort, @= stop asking\n");
|
||||||
|
else if(mode == 2)
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"File exists. Overwrite content ? n= no, y= yes, x= abort, @= stop asking\n");
|
||||||
|
else if(mode == 1)
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"File exists. Remove ? n= keep old, y= remove, x= abort, @= stop asking\n");
|
"File exists. Remove ? n= keep old, y= remove, x= abort, @= stop asking\n");
|
||||||
else
|
else
|
||||||
@ -1530,7 +1541,7 @@ int Xorriso_reassure_restore(struct XorrisO *xorriso, char *path, int flag)
|
|||||||
goto ex;
|
goto ex;
|
||||||
if(xorriso->request_to_abort) {
|
if(xorriso->request_to_abort) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"Removal operation aborted by user before file: ");
|
"File alteration operation aborted by user before file: ");
|
||||||
Text_shellsafe(path, xorriso->info_text, 1);
|
Text_shellsafe(path, xorriso->info_text, 1);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||||
ret= 3; goto ex;
|
ret= 3; goto ex;
|
||||||
@ -1960,3 +1971,187 @@ int Xorriso_append_scdbackup_record(struct XorrisO *xorriso, int flag)
|
|||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= for append rather than overwrite
|
||||||
|
*/
|
||||||
|
int Xorriso_is_concat_target(struct XorrisO *xorriso, char *target,
|
||||||
|
int *ftype, int *fd, int flag)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
char *why= "";
|
||||||
|
|
||||||
|
*ftype= 0;
|
||||||
|
*fd = -1;
|
||||||
|
|
||||||
|
if(strcmp(target, "-") == 0) {
|
||||||
|
*fd= 1;
|
||||||
|
*ftype= 8; /* character device */
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
*ftype= Sfile_type(target, 1 | 8 | 16);
|
||||||
|
if(*ftype == -1)
|
||||||
|
return(2); /* not yet existing regular */
|
||||||
|
|
||||||
|
if(*ftype & 1024) {
|
||||||
|
*fd= Sfile_get_dev_fd_no(target, 0);
|
||||||
|
*ftype &= ~1024;
|
||||||
|
}
|
||||||
|
if(*ftype & 2048) {
|
||||||
|
why= "fstat(2) returned -1 on file descriptor number.";
|
||||||
|
goto not_usable;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(*ftype == 3) {
|
||||||
|
|
||||||
|
/* >>>
|
||||||
|
if follow_links is enabled : obtain target type
|
||||||
|
*ftype= Sfile_type(target, 1 | 4 | 8);
|
||||||
|
else
|
||||||
|
*/
|
||||||
|
|
||||||
|
why= "May not follow symbolic link.";
|
||||||
|
goto not_usable;
|
||||||
|
}
|
||||||
|
if(*ftype == 2) {
|
||||||
|
why= "May not write data into a directory.";
|
||||||
|
goto not_usable;
|
||||||
|
}
|
||||||
|
if(*ftype == 0) {
|
||||||
|
why= "Cannot determine file type.";
|
||||||
|
goto not_usable;
|
||||||
|
}
|
||||||
|
if(*ftype == 7) {
|
||||||
|
|
||||||
|
/* >>> what to do with UNIX socket ? */;
|
||||||
|
|
||||||
|
why= "Cannot yet handle socket file as target.";
|
||||||
|
goto not_usable;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(xorriso->do_overwrite != 1 && xorriso->do_overwrite != 2) {
|
||||||
|
why= "May not alter existing file.";
|
||||||
|
goto not_usable;
|
||||||
|
}
|
||||||
|
ret= Xorriso_reassure_restore(xorriso, target, (2 + (flag & 1)) << 3);
|
||||||
|
if(ret <= 0 || ret == 0) {
|
||||||
|
why= "User revoked alteration of existing file.";
|
||||||
|
goto not_usable;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(*ftype == 1)
|
||||||
|
return(2); /* existing regular */
|
||||||
|
if(*ftype == 4 || *ftype == 6 || *ftype == 8)
|
||||||
|
return(1); /* named pipe, block device, character device */
|
||||||
|
|
||||||
|
not_usable:;
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"Unsuitable -concat target: ");
|
||||||
|
Text_shellsafe(target, xorriso->info_text, 1);
|
||||||
|
sprintf(xorriso->info_text + strlen(xorriso->info_text), ". %s", why);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_concat(struct XorrisO *xorriso, char *mode, char *target,
|
||||||
|
int progc, char **progv,
|
||||||
|
int filec, char **filev, int flag)
|
||||||
|
{
|
||||||
|
int ret, i, fd= -1, target_is_regular= 0, fd_opened= 0, ftype, prog_forked= 0;
|
||||||
|
int status;
|
||||||
|
int open_mode= O_WRONLY | O_CREAT;
|
||||||
|
struct stat stbuf;
|
||||||
|
pid_t forked_pid;
|
||||||
|
|
||||||
|
for(i= 0; i < filec; i++) {
|
||||||
|
ret= Xorriso_iso_lstat(xorriso, filev[i], &stbuf, 4);
|
||||||
|
if(ret == -1)
|
||||||
|
goto ex;
|
||||||
|
if(!S_ISREG(stbuf.st_mode)) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-concat: iso_rr_path is not a regular data file: ");
|
||||||
|
Text_shellsafe(filev[i], xorriso->info_text, 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(strcmp(mode, "overwrite") == 0) {
|
||||||
|
ret= Xorriso_is_concat_target(xorriso, target, &ftype, &fd, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
if(ret == 2) {
|
||||||
|
target_is_regular= 1;
|
||||||
|
open_mode |= O_TRUNC;
|
||||||
|
}
|
||||||
|
if(fd == -1) {
|
||||||
|
fd= open(target, O_WRONLY | O_TRUNC | O_CREAT, 0666);
|
||||||
|
fd_opened= 1;
|
||||||
|
}
|
||||||
|
} else if(strcmp(mode, "append") == 0) {
|
||||||
|
ret= Xorriso_is_concat_target(xorriso, target, &ftype, &fd, 1);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
target_is_regular= (ret == 2);
|
||||||
|
if(fd == -1) {
|
||||||
|
fd= open(target, O_WRONLY | O_CREAT, 0666);
|
||||||
|
fd_opened= 1;
|
||||||
|
if(fd != -1 && target_is_regular) {
|
||||||
|
ret= lseek(fd, (off_t) 0, SEEK_END);
|
||||||
|
if(ret == -1) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-concat append: Cannot lseek(2) to file end of ");
|
||||||
|
Text_shellsafe(target, xorriso->info_text, 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if(strcmp(mode, "pipe") == 0) {
|
||||||
|
ret= Xorriso_pipe_open(xorriso, "-concat pipe", progv[0], progc, progv,
|
||||||
|
"", &fd, &forked_pid, 2 | 8);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
fd_opened= 1;
|
||||||
|
prog_forked= 1;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
sprintf(xorriso->info_text, "-concat: Unknown mode ");
|
||||||
|
Text_shellsafe(mode, xorriso->info_text, 1);
|
||||||
|
strcat(xorriso->info_text, ". Known modes: overwrite, append, pipe");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
if(fd == -1) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-concat: Cannot open file handle to ");
|
||||||
|
Text_shellsafe(target, xorriso->info_text, 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i= 0; i < filec; i++) {
|
||||||
|
ret= Xorriso_iso_file_to_fd(xorriso, filev[i], fd, 0);
|
||||||
|
if(ret <= 0) {
|
||||||
|
if(i < filec - 1) {
|
||||||
|
ret= Xorriso_eval_problem_status(xorriso, ret, 1 | 2);
|
||||||
|
if(ret < 0) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-concat: Aborted although %d files stay unprocessed.",
|
||||||
|
filec - i + 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
if(fd_opened && fd != -1)
|
||||||
|
close(fd);
|
||||||
|
if(prog_forked)
|
||||||
|
Xorriso_wait_child_end(xorriso, forked_pid, &status, 0);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||||
|
|
||||||
Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007-2014 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
|
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
|
|
||||||
@ -436,22 +436,15 @@ ex:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= delete filter with the given name
|
int Xorriso_external_filter_banned(struct XorrisO *xorriso, char *purpose,
|
||||||
*/
|
int flag)
|
||||||
int Xorriso_external_filter(struct XorrisO *xorriso,
|
|
||||||
char *name, char *options, char *path,
|
|
||||||
int argc, char **argv, int flag)
|
|
||||||
{
|
{
|
||||||
int ret, delete= 0, behavior= 0, extf_flag= 0, is_banned= 0;
|
int is_banned= 0;
|
||||||
char *what, *what_next, *suffix= "";
|
|
||||||
struct Xorriso_lsT *lst;
|
|
||||||
struct Xorriso_extF *found_filter, *new_filter= NULL;
|
|
||||||
|
|
||||||
#ifndef Xorriso_allow_external_filterS
|
#ifndef Xorriso_allow_external_filterS
|
||||||
/* To be controlled by: configure --enable-external-filters */
|
/* To be controlled by: configure --enable-external-filters */
|
||||||
|
|
||||||
sprintf(xorriso->info_text, "%s : Banned at compile time.",
|
sprintf(xorriso->info_text, "%s : Banned at compile time.", purpose);
|
||||||
flag & 1 ? "-unregister_filter" : "-external_filter");
|
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"This may be changed at compile time by ./configure option --enable-external-filters");
|
"This may be changed at compile time by ./configure option --enable-external-filters");
|
||||||
@ -474,16 +467,31 @@ int Xorriso_external_filter(struct XorrisO *xorriso,
|
|||||||
}
|
}
|
||||||
#endif /* ! Xorriso_allow_extf_suiD */
|
#endif /* ! Xorriso_allow_extf_suiD */
|
||||||
|
|
||||||
if(is_banned)
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
if(xorriso->filter_list_closed) {
|
if(xorriso->filter_list_closed) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"%s : Banned by previous command -close_filter_list",
|
"%s : Banned by previous command -close_filter_list", purpose);
|
||||||
flag & 1 ? "-unregister_filter" : "-external_filter");
|
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
return(0);
|
is_banned= 1;
|
||||||
}
|
}
|
||||||
|
return(is_banned);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= delete filter with the given name
|
||||||
|
*/
|
||||||
|
int Xorriso_external_filter(struct XorrisO *xorriso,
|
||||||
|
char *name, char *options, char *path,
|
||||||
|
int argc, char **argv, int flag)
|
||||||
|
{
|
||||||
|
int ret, delete= 0, behavior= 0, extf_flag= 0, is_banned= 0;
|
||||||
|
char *what, *what_next, *suffix= "";
|
||||||
|
struct Xorriso_lsT *lst;
|
||||||
|
struct Xorriso_extF *found_filter, *new_filter= NULL;
|
||||||
|
|
||||||
|
is_banned= Xorriso_external_filter_banned( xorriso,
|
||||||
|
flag & 1 ? "-unregister_filter" : "-external_filter", 0);
|
||||||
|
if(is_banned)
|
||||||
|
return(0);
|
||||||
if((!(flag & 1)) && path[0] != '/') {
|
if((!(flag & 1)) && path[0] != '/') {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"-external_filter : Given command path does not begin by '/' : ");
|
"-external_filter : Given command path does not begin by '/' : ");
|
||||||
|
@ -1196,7 +1196,8 @@ int Xorriso_mount(struct XorrisO *xorriso, char *dev, int adr_mode,
|
|||||||
sprintf(xorriso->result_line, "%s\n", mount_command);
|
sprintf(xorriso->result_line, "%s\n", mount_command);
|
||||||
Xorriso_result(xorriso,0);
|
Xorriso_result(xorriso,0);
|
||||||
} else {
|
} else {
|
||||||
ret= Xorriso_execv(xorriso, mount_command, "/bin:/sbin", &status, 1);
|
ret= Xorriso_execv(xorriso, mount_command, 0, NULL, "/bin:/sbin",
|
||||||
|
NULL, NULL, NULL, &status, 1);
|
||||||
if(WIFEXITED(status) && WEXITSTATUS(status) != 0) {
|
if(WIFEXITED(status) && WEXITSTATUS(status) != 0) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"-mount : mount command failed with exit value %d",
|
"-mount : mount command failed with exit value %d",
|
||||||
|
@ -2177,6 +2177,80 @@ int Xorriso_option_compliance(struct XorrisO *xorriso, char *mode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Command -concat */
|
||||||
|
int Xorriso_option_concat(struct XorrisO *xorriso,
|
||||||
|
int argc, char **argv, int *idx, int flag)
|
||||||
|
{
|
||||||
|
int ret, end_idx, optc= 0, progc= 0, iso_rr_start, prog_end_idx= -1;
|
||||||
|
char **optv= NULL, **progv= NULL, *delimiter_mem= NULL;
|
||||||
|
|
||||||
|
/* Must be done before any goto ex; */
|
||||||
|
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx, 1);
|
||||||
|
iso_rr_start= *idx + 2;
|
||||||
|
|
||||||
|
if(xorriso->allow_restore <= 0) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-concat: image content copies are not enabled by option -osirrox");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
if(end_idx - *idx < 3) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-concat: Not enough arguments. Need mode, target, iso_rr_path.");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
if(strcmp(argv[*idx], "pipe") == 0) {
|
||||||
|
if(end_idx - *idx < 5) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-concat pipe: Not enough arguments. Need delimiter, program path, delimiter, iso_rr_path.");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
Xorriso_alloc_meM(delimiter_mem, char, strlen(xorriso->list_delimiter) + 1);
|
||||||
|
strcpy(delimiter_mem, xorriso->list_delimiter);
|
||||||
|
strcpy(xorriso->list_delimiter, argv[*idx + 1]);
|
||||||
|
ret= Xorriso_opt_args(xorriso, "-concat pipe", argc , argv, *idx + 2,
|
||||||
|
&prog_end_idx, &progc, &progv, 4 | 128);
|
||||||
|
strcpy(xorriso->list_delimiter, delimiter_mem);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
if(progc <= 0) {
|
||||||
|
sprintf(xorriso->info_text, "-concat pipe: No program path given.");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
iso_rr_start= prog_end_idx + 1;
|
||||||
|
}
|
||||||
|
ret= Xorriso_opt_args(xorriso, "-concat", argc , argv, iso_rr_start, &end_idx,
|
||||||
|
&optc, &optv, 128);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
if(optc <= 0) {
|
||||||
|
sprintf(xorriso->info_text, "-concat: No iso_rr_paths given.");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
ret= Xorriso_concat(xorriso, argv[*idx], argv[*idx + 1],
|
||||||
|
progc, progv, optc, optv, 0);
|
||||||
|
ex:;
|
||||||
|
if(progv != NULL) {
|
||||||
|
if(delimiter_mem != NULL)
|
||||||
|
strcpy(xorriso->list_delimiter, argv[*idx + 2]);
|
||||||
|
Xorriso_opt_args(xorriso, "-concat", argc, argv, *idx + 2, &prog_end_idx,
|
||||||
|
&progc, &progv, 256);
|
||||||
|
if(delimiter_mem != NULL)
|
||||||
|
strcpy(xorriso->list_delimiter, delimiter_mem);
|
||||||
|
}
|
||||||
|
Xorriso_opt_args(xorriso, "-concat", argc, argv, iso_rr_start, &end_idx,
|
||||||
|
&optc, &optv, 256);
|
||||||
|
Xorriso_free_meM(delimiter_mem);
|
||||||
|
*idx= end_idx;
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Option -copyright_file */
|
/* Option -copyright_file */
|
||||||
int Xorriso_option_copyright_file(struct XorrisO *xorriso, char *name, int flag)
|
int Xorriso_option_copyright_file(struct XorrisO *xorriso, char *name, int flag)
|
||||||
{
|
{
|
||||||
|
@ -2108,6 +2108,13 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
|||||||
" Like -cp_rx but trying to restore timestamps and ownership.",
|
" Like -cp_rx but trying to restore timestamps and ownership.",
|
||||||
" -paste_in iso_rr_path disk_path byte_offset byte_count",
|
" -paste_in iso_rr_path disk_path byte_offset byte_count",
|
||||||
" Copy ISO file content into a byte interval of a disk file.",
|
" Copy ISO file content into a byte interval of a disk file.",
|
||||||
|
" -concat \"append\"|\"overwrite\" target iso_rr_path [***]",
|
||||||
|
" Write content of iso_rr_paths into disk file target. Target",
|
||||||
|
" may be a disk_path or \"-\" for writing to standard output.",
|
||||||
|
" -concat \"pipe\" lim prog [args [...]] lim iso_rr_path [***]",
|
||||||
|
" Start prog with given args and write content of iso_rr_paths",
|
||||||
|
" into its standard input. prog must at least contain one '/'.",
|
||||||
|
" lim may be any word that is not among prog and args.",
|
||||||
" -mount drive entity id path",
|
" -mount drive entity id path",
|
||||||
" Like -mount_cmd but actually performing that command if",
|
" Like -mount_cmd but actually performing that command if",
|
||||||
" not setuid or setgid is active.",
|
" not setuid or setgid is active.",
|
||||||
|
@ -96,7 +96,7 @@ int Xorriso_opt_args(struct XorrisO *xorriso, char *cmd,
|
|||||||
else
|
else
|
||||||
do_expand= (xorriso->do_iso_rr_pattern==1 && !(flag&4)) || (flag & 512);
|
do_expand= (xorriso->do_iso_rr_pattern==1 && !(flag&4)) || (flag & 512);
|
||||||
if(flag&256) {
|
if(flag&256) {
|
||||||
if(*optv<argv || *optv>=argv+argc)
|
if(*optv < argv || (*optv >= argv + argc && argc > 0))
|
||||||
Sfile_destroy_argv(optc, optv, 0);
|
Sfile_destroy_argv(optc, optv, 0);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
@ -563,7 +563,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
"check_md5","check_md5_r","check_media","check_media_defaults",
|
"check_md5","check_md5_r","check_media","check_media_defaults",
|
||||||
"chgrp","chgrpi","chgrp_r","chgrp_ri","chmod","chmodi",
|
"chgrp","chgrpi","chgrp_r","chgrp_ri","chmod","chmodi",
|
||||||
"chmod_r","chmod_ri","chown","chowni","chown_r","chown_ri",
|
"chmod_r","chmod_ri","chown","chowni","chown_r","chown_ri",
|
||||||
"compare_l","cp_clone","cp_rax","cp_rx","cpr","cpri", "cpax","cpx",
|
"compare_l","concat","cp_clone","cp_rax","cp_rx","cpr","cpri","cpax","cpx",
|
||||||
"du","dui","dus","dusi","dux","dusx","external_filter","extract_l",
|
"du","dui","dus","dusi","dux","dusx","external_filter","extract_l",
|
||||||
"file_size_limit","find","findi","finds","findx",
|
"file_size_limit","find","findi","finds","findx",
|
||||||
"getfacl","getfacli","getfacl_r","getfacl_ri",
|
"getfacl","getfacli","getfacl_r","getfacl_ri",
|
||||||
@ -717,7 +717,7 @@ int Xorriso_cmd_sorting_rank(struct XorrisO *xorriso,
|
|||||||
|
|
||||||
"* osirrox ISO-to-disk restore options:",
|
"* osirrox ISO-to-disk restore options:",
|
||||||
"osirrox", "extract", "extract_single", "extract_l", "extract_cut",
|
"osirrox", "extract", "extract_single", "extract_l", "extract_cut",
|
||||||
"cpx", "cpax", "cp_rx", "cp_rax", "paste_in",
|
"cpx", "cpax", "cp_rx", "cp_rax", "paste_in", "concat",
|
||||||
"mount",
|
"mount",
|
||||||
|
|
||||||
"* Settings for result writing:",
|
"* Settings for result writing:",
|
||||||
@ -1164,6 +1164,9 @@ next_command:;
|
|||||||
(*idx)++;
|
(*idx)++;
|
||||||
Xorriso_option_compliance(xorriso, arg1, 0);
|
Xorriso_option_compliance(xorriso, arg1, 0);
|
||||||
|
|
||||||
|
} else if(strcmp(cmd,"concat") == 0) {
|
||||||
|
ret= Xorriso_option_concat(xorriso, argc, argv, idx, 0);
|
||||||
|
|
||||||
} else if(strcmp(cmd,"copyright_file")==0) {
|
} else if(strcmp(cmd,"copyright_file")==0) {
|
||||||
(*idx)++;
|
(*idx)++;
|
||||||
Xorriso_option_copyright_file(xorriso, arg1, 0);
|
Xorriso_option_copyright_file(xorriso, arg1, 0);
|
||||||
@ -2739,16 +2742,67 @@ int Xorriso_check_temp_mem_limit(struct XorrisO *xorriso, off_t mem, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_wait_child_end(struct XorrisO *xorriso, pid_t child_pid,
|
||||||
|
int *status, int flag)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
do {
|
||||||
|
/* try to read and print the reply */;
|
||||||
|
ret= waitpid(child_pid, status, WNOHANG);
|
||||||
|
if(ret == -1) {
|
||||||
|
if(errno != EINTR)
|
||||||
|
return(0);
|
||||||
|
} else if(ret == 0) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while(1);
|
||||||
|
|
||||||
|
/* >>> interpret *status */;
|
||||||
|
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_make_argv_with_null(struct XorrisO *xorriso,
|
||||||
|
int in_argc, char **in_argv,
|
||||||
|
int *argc, char ***argv, int flag)
|
||||||
|
{
|
||||||
|
int i, ret= 0;
|
||||||
|
|
||||||
|
*argv= NULL;
|
||||||
|
Xorriso_alloc_meM(*argv, char *, in_argc + 1);
|
||||||
|
for(i= 0; i < in_argc; i++) {
|
||||||
|
Xorriso_alloc_meM((*argv)[i], char, strlen(in_argv[i]) + 1);
|
||||||
|
strcpy((*argv)[i], in_argv[i]);
|
||||||
|
*argc= i + 1;
|
||||||
|
}
|
||||||
|
(*argv)[in_argc]= NULL;
|
||||||
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
if(ret <= 0)
|
||||||
|
Sfile_destroy_argv(argc, argv, 0);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@param flag bit0= use env_path to find the desired program
|
@param flag bit0= use env_path to find the desired program
|
||||||
|
bit1= use in_argv rather than parsing cmd to words
|
||||||
|
bit2= -reserved-
|
||||||
|
bit3= demand absolute cmd path
|
||||||
return:
|
return:
|
||||||
<=0 : error
|
<=0 : error
|
||||||
1 : done
|
1 : done
|
||||||
*/
|
*/
|
||||||
int Xorriso_execv(struct XorrisO *xorriso, char *cmd, char *env_path,
|
int Xorriso_execv(struct XorrisO *xorriso, char *cmd,
|
||||||
|
int in_argc, char **in_argv, char *env_path,
|
||||||
|
int *stdin_pipe, int *stdout_pipe, pid_t *forked_pid,
|
||||||
int *status, int flag)
|
int *status, int flag)
|
||||||
{
|
{
|
||||||
int ret, argc= 0;
|
int ret, argc= 0, has_slash;
|
||||||
char **argv= NULL, *pathlist= NULL, *cpt, *npt, *prog= NULL;
|
char **argv= NULL, *pathlist= NULL, *cpt, *npt, *prog= NULL;
|
||||||
pid_t child_pid;
|
pid_t child_pid;
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
@ -2757,14 +2811,26 @@ int Xorriso_execv(struct XorrisO *xorriso, char *cmd, char *env_path,
|
|||||||
|
|
||||||
wait3(NULL,WNOHANG,NULL); /* just to remove any old dead child */
|
wait3(NULL,WNOHANG,NULL); /* just to remove any old dead child */
|
||||||
|
|
||||||
ret= Sfile_make_argv("", cmd, &argc, &argv, 1|4|128);
|
if(flag & 2) {
|
||||||
|
ret= Xorriso_make_argv_with_null(xorriso, in_argc, in_argv,
|
||||||
|
&argc, &argv, 0);
|
||||||
|
} else {
|
||||||
|
ret= Sfile_make_argv("", cmd, &argc, &argv, 1|4|128);
|
||||||
|
}
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
goto ex;
|
goto ex;
|
||||||
if(argc < 1)
|
if(argc < 1)
|
||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
|
|
||||||
strcpy(prog, argv[0]);
|
strcpy(prog, argv[0]);
|
||||||
if((flag & 1) && strchr(argv[0], '/') == NULL) {
|
has_slash= (strchr(argv[0], '/') != NULL);
|
||||||
|
if((flag & 8) && !has_slash) {
|
||||||
|
sprintf(xorriso->info_text, "External program path contains no '/': ");
|
||||||
|
Text_shellsafe(argv[0], xorriso->info_text, 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
if((flag & 1) && has_slash) {
|
||||||
if(env_path == NULL)
|
if(env_path == NULL)
|
||||||
env_path= "/bin:/sbin";
|
env_path= "/bin:/sbin";
|
||||||
else if(env_path[0] == 0)
|
else if(env_path[0] == 0)
|
||||||
@ -2801,9 +2867,21 @@ int Xorriso_execv(struct XorrisO *xorriso, char *cmd, char *env_path,
|
|||||||
sprintf(xorriso->info_text, "Executing external program ");
|
sprintf(xorriso->info_text, "Executing external program ");
|
||||||
Text_shellsafe(prog, xorriso->info_text, 1);
|
Text_shellsafe(prog, xorriso->info_text, 1);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
|
||||||
|
|
||||||
Xorriso_destroy(&xorriso, 0); /* reduce memory foot print */
|
Xorriso_destroy(&xorriso, 0); /* reduce memory foot print */
|
||||||
|
|
||||||
|
if(stdin_pipe != NULL) {
|
||||||
|
close(0);
|
||||||
|
if(dup2(stdin_pipe[0], 0) == -1)
|
||||||
|
{ perror("dup2(,0)"); exit(1); }
|
||||||
|
close(stdin_pipe[1]); /* unused */
|
||||||
|
}
|
||||||
|
if(stdout_pipe != NULL) {
|
||||||
|
close(1);
|
||||||
|
if(dup2(stdout_pipe[1], 1) == -1)
|
||||||
|
{ perror("dup2(,1)"); exit(1); }
|
||||||
|
close(stdout_pipe[0]); /* unused */
|
||||||
|
}
|
||||||
|
|
||||||
execv(prog, argv); /* should never come back */
|
execv(prog, argv); /* should never come back */
|
||||||
fprintf(stderr,"--- execution of shell command failed:\n");
|
fprintf(stderr,"--- execution of shell command failed:\n");
|
||||||
fprintf(stderr," %s\n",cmd);
|
fprintf(stderr," %s\n",cmd);
|
||||||
@ -2812,33 +2890,22 @@ int Xorriso_execv(struct XorrisO *xorriso, char *cmd, char *env_path,
|
|||||||
|
|
||||||
|
|
||||||
/* this is the original process waiting for child to exit */
|
/* this is the original process waiting for child to exit */
|
||||||
do {
|
|
||||||
/* try to read and print the reply */;
|
|
||||||
ret= waitpid(child_pid,status,WNOHANG);
|
|
||||||
if(ret==-1) {
|
|
||||||
if(errno!=EINTR)
|
|
||||||
ret= 0; goto ex;
|
|
||||||
} else if(ret==0) {
|
|
||||||
|
|
||||||
#ifdef NIX
|
if(stdin_pipe != NULL)
|
||||||
|
close(stdin_pipe[0]); /* unused */
|
||||||
|
if(stdout_pipe != NULL)
|
||||||
|
close(stdout_pipe[1]); /* unused */
|
||||||
|
if(stdin_pipe != NULL || stdout_pipe != NULL) {
|
||||||
|
/* Pipes need to be fed by the caller who later calls Xorriso_wait_child_end
|
||||||
|
with *forked_pid as child_pid.
|
||||||
|
*/
|
||||||
|
*forked_pid= child_pid;
|
||||||
|
{ret= 1; goto ex;}
|
||||||
|
}
|
||||||
|
|
||||||
/* >>> An interrupt key would be nice. */
|
ret= Xorriso_wait_child_end(xorriso, child_pid, status, 0);
|
||||||
|
if(ret <= 0)
|
||||||
if((flag&4)) {
|
goto ex;
|
||||||
ret= Asqueue_event_is_pending(agent->queue,0,0);
|
|
||||||
if(ret>0) {
|
|
||||||
Asagent_stderr(agent,"--- shell command interrupted",1);
|
|
||||||
kill(child_pid,SIGTERM);
|
|
||||||
ret= 2; goto ex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* NIX */
|
|
||||||
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while(1);
|
|
||||||
ret= 1;
|
ret= 1;
|
||||||
ex:
|
ex:
|
||||||
Sfile_make_argv("", "", &argc, &argv, 2);
|
Sfile_make_argv("", "", &argc, &argv, 2);
|
||||||
@ -2848,6 +2915,43 @@ ex:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= use env_path to find the desired program
|
||||||
|
bit1= use in_argv rather than parsing cmd to words
|
||||||
|
bit2= "r" rather than "w"
|
||||||
|
bit3= demand absolute cmd path
|
||||||
|
bit4= override any restriction on external filters
|
||||||
|
*/
|
||||||
|
int Xorriso_pipe_open(struct XorrisO *xorriso, char *purpose, char *cmd,
|
||||||
|
int in_argc, char **in_argv, char *env_path,
|
||||||
|
int *fd, pid_t *forked_pid, int flag)
|
||||||
|
{
|
||||||
|
int fp_pipe[2], *stdin_pipe= NULL, *stdout_pipe= NULL, status, ret;
|
||||||
|
|
||||||
|
*fd= -1;
|
||||||
|
|
||||||
|
if(!(flag & 16)) {
|
||||||
|
ret= Xorriso_external_filter_banned(xorriso, purpose, 0);
|
||||||
|
if(ret)
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
if(pipe(fp_pipe) != 0) {
|
||||||
|
sprintf(xorriso->info_text, "Cannot create pipe(2) object");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FATAL", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
if(flag & 4) {
|
||||||
|
stdout_pipe= fp_pipe;
|
||||||
|
*fd= fp_pipe[0];
|
||||||
|
} else {
|
||||||
|
stdin_pipe= fp_pipe;
|
||||||
|
*fd= fp_pipe[1];
|
||||||
|
}
|
||||||
|
ret= Xorriso_execv(xorriso, cmd, in_argc, in_argv, env_path,
|
||||||
|
stdin_pipe, stdout_pipe, forked_pid, &status, flag & 11);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= path is a command parameter
|
/* @param flag bit0= path is a command parameter
|
||||||
*/
|
*/
|
||||||
int Xorriso_path_is_excluded(struct XorrisO *xorriso, char *path, int flag)
|
int Xorriso_path_is_excluded(struct XorrisO *xorriso, char *path, int flag)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||||
|
|
||||||
Copyright 2007-2010 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007-2014 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
|
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
|
|
||||||
@ -71,11 +71,19 @@ int Xorriso_convert_datestring(struct XorrisO *xorriso, char *cmd,
|
|||||||
|
|
||||||
int Xorriso_check_temp_mem_limit(struct XorrisO *xorriso, off_t mem, int flag);
|
int Xorriso_check_temp_mem_limit(struct XorrisO *xorriso, off_t mem, int flag);
|
||||||
|
|
||||||
/* @param flag bit0= use env_path to find the desired program
|
int Xorriso_execv(struct XorrisO *xorriso, char *cmd,
|
||||||
*/
|
int in_argc, char **in_argv, char *env_path,
|
||||||
int Xorriso_execv(struct XorrisO *xorriso, char *cmd, char *env_path,
|
int *stdin_pipe, int *stdout_pipe, pid_t *forked_pid,
|
||||||
int *status, int flag);
|
int *status, int flag);
|
||||||
|
|
||||||
|
int Xorriso_pipe_open(struct XorrisO *xorriso, char *purpose, char *cmd,
|
||||||
|
int in_argc, char **in_argv, char *env_path,
|
||||||
|
int *fd, pid_t *forked_pid, int flag);
|
||||||
|
|
||||||
|
int Xorriso_wait_child_end(struct XorrisO *xorriso, int child_pid,
|
||||||
|
int *status, int flag);
|
||||||
|
|
||||||
|
|
||||||
int Xorriso_path_is_excluded(struct XorrisO *xorriso, char *path, int flag);
|
int Xorriso_path_is_excluded(struct XorrisO *xorriso, char *path, int flag);
|
||||||
|
|
||||||
int Xorriso_path_is_hidden(struct XorrisO *xorriso, char *path, int flag);
|
int Xorriso_path_is_hidden(struct XorrisO *xorriso, char *path, int flag);
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||||
|
|
||||||
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007-2014 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
|
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
|
|
||||||
@ -55,6 +55,9 @@ int Xorriso__read_pacifier(IsoImage *image, IsoFileSource *filesource)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0= open IsoNode *node_pt rather than looking up pathname
|
||||||
|
bit1= dig out the most original stream for reading
|
||||||
|
*/
|
||||||
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
||||||
void *node_pt, void **stream, int flag)
|
void *node_pt, void **stream, int flag)
|
||||||
{
|
{
|
||||||
@ -242,6 +245,58 @@ int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_iso_file_to_fd(struct XorrisO *xorriso, char *path, int fd,
|
||||||
|
int flag)
|
||||||
|
{
|
||||||
|
int ret, rret, wret, to_write, wanted;
|
||||||
|
void *stream= NULL;
|
||||||
|
char *buffer= NULL, *wpt;
|
||||||
|
off_t todo;
|
||||||
|
static int buffer_size= 64 * 1024;
|
||||||
|
|
||||||
|
Xorriso_alloc_meM(buffer, char, buffer_size);
|
||||||
|
|
||||||
|
ret= Xorriso_iso_file_open(xorriso, path, NULL, &stream, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
|
||||||
|
todo= iso_stream_get_size((IsoStream *) stream);
|
||||||
|
while(todo > 0) {
|
||||||
|
if(todo < buffer_size)
|
||||||
|
wanted= todo;
|
||||||
|
else
|
||||||
|
wanted= buffer_size;
|
||||||
|
rret = Xorriso_iso_file_read(xorriso, stream, buffer, wanted, 0);
|
||||||
|
if(rret <= 0)
|
||||||
|
{ret= -1; goto ex;}
|
||||||
|
todo-= rret;
|
||||||
|
wpt= buffer;
|
||||||
|
for(to_write= rret; to_write > 0;) {
|
||||||
|
wret= write(fd, wpt, to_write);
|
||||||
|
if(wret <= 0) {
|
||||||
|
if(wret == 0)
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"Strange behavior of write(2): return == 0 with ");
|
||||||
|
else
|
||||||
|
sprintf(xorriso->info_text, "Write error with ");
|
||||||
|
Text_shellsafe(path, xorriso->info_text, 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text,
|
||||||
|
wret == 0 ? 0 : errno, "FAILURE",0);
|
||||||
|
ret= 0; goto ex;
|
||||||
|
}
|
||||||
|
to_write-= wret;
|
||||||
|
wpt+= wret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
if(stream != NULL)
|
||||||
|
Xorriso_iso_file_close(xorriso, &stream, 0);
|
||||||
|
Xorriso_free_meM(buffer);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= minimal transfer: access permissions only
|
/* @param flag bit0= minimal transfer: access permissions only
|
||||||
bit1= keep directory open: keep owner, allow rwx for owner
|
bit1= keep directory open: keep owner, allow rwx for owner
|
||||||
and push directory onto xorriso->perm_stack
|
and push directory onto xorriso->perm_stack
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||||
|
|
||||||
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007-2014 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
|
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
|
|
||||||
@ -227,12 +227,30 @@ int Sfile_being_group_member(struct stat *stbuf, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Sfile_get_dev_fd_no(char *filename, int flag)
|
||||||
|
{
|
||||||
|
int i, fd= -1;
|
||||||
|
|
||||||
|
if(strncmp(filename, "/dev/fd/", 8) != 0)
|
||||||
|
return(-1);
|
||||||
|
for(i = 8; filename[i]; i++)
|
||||||
|
if(filename[i] < '0' || filename[i] > '9')
|
||||||
|
break;
|
||||||
|
if(i > 8 && filename[i] == 0)
|
||||||
|
sscanf(filename + 8, "%d", &fd);
|
||||||
|
if(fd < 0)
|
||||||
|
fd = -1;
|
||||||
|
return(fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int Sfile_type(char *filename, int flag)
|
int Sfile_type(char *filename, int flag)
|
||||||
/*
|
/*
|
||||||
bit0= return -1 if file is missing
|
bit0= return -1 if file is missing
|
||||||
bit1= return a hardlink with siblings as type 5
|
bit1= return a hardlink with siblings as type 5
|
||||||
bit2= evaluate eventual link target rather than the link object itself
|
bit2= evaluate eventual link target rather than the link object itself
|
||||||
bit3= return a socket or a char device as types 7 or 8 rather than 0
|
bit3= return a socket or a char device as types 7 or 8 rather than 0
|
||||||
|
bit4= interpret /dev/fd/#fd# as open file descriptor fd
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
return:
|
return:
|
||||||
@ -245,10 +263,20 @@ int Sfile_type(char *filename, int flag)
|
|||||||
6=block device
|
6=block device
|
||||||
7=socket (with bit3)
|
7=socket (with bit3)
|
||||||
8=character device (with bit3)
|
8=character device (with bit3)
|
||||||
|
| 1024 if interpreted as /dev/fd/#fd#
|
||||||
|
| 2048 if interpreted as /dev/fd/#fd# and not fstatable
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
if(flag&4) {
|
int fd= -1, was_dev_fd= 0, ret;
|
||||||
|
|
||||||
|
if(flag & 16)
|
||||||
|
fd= Sfile_get_dev_fd_no(filename, 0);
|
||||||
|
if(fd != -1) {
|
||||||
|
was_dev_fd= 1;
|
||||||
|
if(fstat(fd, &stbuf) == -1)
|
||||||
|
return(1024 | 2048);
|
||||||
|
} else if(flag&4) {
|
||||||
if(stat(filename,&stbuf)==-1) {
|
if(stat(filename,&stbuf)==-1) {
|
||||||
if(flag&1) return(-1);
|
if(flag&1) return(-1);
|
||||||
else return(0);
|
else return(0);
|
||||||
@ -262,24 +290,26 @@ int Sfile_type(char *filename, int flag)
|
|||||||
if(S_ISREG(stbuf.st_mode)) {
|
if(S_ISREG(stbuf.st_mode)) {
|
||||||
if(flag&2)
|
if(flag&2)
|
||||||
if(stbuf.st_nlink>1)
|
if(stbuf.st_nlink>1)
|
||||||
return(5);
|
{ret= 5; goto ex;}
|
||||||
return(1);
|
{ret= 1; goto ex;}
|
||||||
}
|
}
|
||||||
if(S_ISDIR(stbuf.st_mode))
|
if(S_ISDIR(stbuf.st_mode))
|
||||||
return(2);
|
{ret= 2; goto ex;}
|
||||||
if((stbuf.st_mode&S_IFMT)==S_IFLNK)
|
if((stbuf.st_mode&S_IFMT)==S_IFLNK)
|
||||||
return(3);
|
{ret= 3; goto ex;}
|
||||||
if(S_ISFIFO(stbuf.st_mode))
|
if(S_ISFIFO(stbuf.st_mode))
|
||||||
return(4);
|
{ret= 4; goto ex;}
|
||||||
if(S_ISBLK(stbuf.st_mode))
|
if(S_ISBLK(stbuf.st_mode))
|
||||||
return(6);
|
{ret= 6; goto ex;}
|
||||||
if(flag&8)
|
if(flag&8)
|
||||||
if((stbuf.st_mode&S_IFMT)==S_IFSOCK)
|
if((stbuf.st_mode&S_IFMT)==S_IFSOCK)
|
||||||
return(7);
|
{ret= 7; goto ex;}
|
||||||
if(flag&8)
|
if(flag&8)
|
||||||
if(S_ISCHR(stbuf.st_mode))
|
if(S_ISCHR(stbuf.st_mode))
|
||||||
return(8);
|
{ret= 8; goto ex;}
|
||||||
return(0);
|
ret = 0;
|
||||||
|
ex:;
|
||||||
|
return(ret | (was_dev_fd << 10));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||||
|
|
||||||
Copyright 2007-2012 Thomas Schmitt, <scdbackup@gmx.net>
|
Copyright 2007-2014 Thomas Schmitt, <scdbackup@gmx.net>
|
||||||
|
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
|
|
||||||
@ -68,6 +68,8 @@ int Sfile_count_components(char *path, int flag);
|
|||||||
6=block device
|
6=block device
|
||||||
7=socket (with bit3)
|
7=socket (with bit3)
|
||||||
8=character device (with bit3)
|
8=character device (with bit3)
|
||||||
|
| 1024 if interpreted as /dev/fd/#fd#
|
||||||
|
| 2048 if interpreted as /dev/fd/#fd# and not fstatable
|
||||||
*/
|
*/
|
||||||
int Sfile_type(char *filename, int flag);
|
int Sfile_type(char *filename, int flag);
|
||||||
|
|
||||||
@ -135,6 +137,7 @@ int Sfile_prepend_path(char *prefix, char path[SfileadrL], int flag);
|
|||||||
|
|
||||||
int Sfile_home_adr_s(char *filename, char *fileadr, int fa_size, int flag);
|
int Sfile_home_adr_s(char *filename, char *fileadr, int fa_size, int flag);
|
||||||
|
|
||||||
|
int Sfile_get_dev_fd_no(char *filename, int flag);
|
||||||
|
|
||||||
#endif /* ! Xorriso_pvt_sfile_includeD */
|
#endif /* ! Xorriso_pvt_sfile_includeD */
|
||||||
|
|
||||||
|
@ -9,7 +9,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 "Version 1.3.7, Apr 19, 2014"
|
.TH XORRISO 1 "Version 1.3.7, Apr 21, 2014"
|
||||||
.\" 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:
|
||||||
@ -2177,9 +2177,10 @@ Remove an \-external_filter registration. This is only possible if the filter
|
|||||||
is not applied to any file in the ISO image.
|
is not applied to any file in the ISO image.
|
||||||
.TP
|
.TP
|
||||||
\fB\-close_filter_list\fR
|
\fB\-close_filter_list\fR
|
||||||
Irrevocably ban commands \-external_filter and \-unregister_filter,
|
Irrevocably ban commands \-concat "pipe", \-external_filter,
|
||||||
but not \-set_filter. Use this to prevent external filtering in general or
|
and \-unregister_filter, but not \-set_filter. Use this to prevent external
|
||||||
when all intended filters are registered.
|
filtering in general or when all intended filters are registered and \-concat
|
||||||
|
mode "pipe" shall be disallowed.
|
||||||
External filters may also be banned totally at compile time of
|
External filters may also be banned totally at compile time of
|
||||||
\fBxorriso\fR.
|
\fBxorriso\fR.
|
||||||
By default they are banned if \fBxorriso\fR runs under setuid permission.
|
By default they are banned if \fBxorriso\fR runs under setuid permission.
|
||||||
@ -4308,6 +4309,33 @@ Read the content of a ISO data file and write it into a data file on disk
|
|||||||
beginning at the byte_offset. Write at most byte_count bytes.
|
beginning at the byte_offset. Write at most byte_count bytes.
|
||||||
This is the inverse of command \-cut_out.
|
This is the inverse of command \-cut_out.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-concat\fR mode [target | lim prog [args [...]] lim] iso_rr_path [***]
|
||||||
|
Copy the data content of one or more data files of the ISO image into a
|
||||||
|
disk file object, into a file descriptor, or start a program and copy the
|
||||||
|
data into its standard input.
|
||||||
|
The latter is subject to the security restrictions for external filters.
|
||||||
|
.br
|
||||||
|
Modes \fBoverwrite\fR and \fBappend\fR write into the target which is
|
||||||
|
given by the second parameter. This may be the path to a disk file object,
|
||||||
|
or "\-" which means standard output, or a text of the form /dev/fd/number,
|
||||||
|
where number is an open file descriptor (e.g. standard error is /dev/fd/2).
|
||||||
|
An existing target file is not removed before writing begins. If it is not
|
||||||
|
able to take content data, then this command fails.
|
||||||
|
Mode overwrite truncates regular data files to 0 size before writing into them.
|
||||||
|
Example:
|
||||||
|
\-concat append /home/me/accumulated_text /my/iso/text \-\-
|
||||||
|
.br
|
||||||
|
Mode \fBpipe\fR expects as second parameter a delimiter word which shall
|
||||||
|
mark the end of the program argument list. The third argument is the disk_path
|
||||||
|
to the program. It must contain at least one '/'. $PATH is not applied.
|
||||||
|
Further parameters up to the announced delimiter
|
||||||
|
word are used as arguments with the program start. Example:
|
||||||
|
.br
|
||||||
|
\-concat pipe + /usr/bin/wc + /my/iso/files* \-\-
|
||||||
|
.br
|
||||||
|
The further parameters in all modes are the iso_rr_paths of data files.
|
||||||
|
Their content gets concatenated in the copy.
|
||||||
|
.TP
|
||||||
\fB\-mount\fR drive entity id path
|
\fB\-mount\fR drive entity id path
|
||||||
Produce the same line as \-mount_cmd and then execute it as external program run
|
Produce the same line as \-mount_cmd and then execute it as external program run
|
||||||
after giving up the depicted drive. See also \-mount_opts.
|
after giving up the depicted drive. See also \-mount_opts.
|
||||||
|
@ -1389,6 +1389,11 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
|
|||||||
/* Command -compliance */
|
/* Command -compliance */
|
||||||
int Xorriso_option_compliance(struct XorrisO *xorriso, char *mode, int flag);
|
int Xorriso_option_compliance(struct XorrisO *xorriso, char *mode, int flag);
|
||||||
|
|
||||||
|
/* Command -concat */
|
||||||
|
/* @since 1.3.8 */
|
||||||
|
int Xorriso_option_concat(struct XorrisO *xorriso,
|
||||||
|
int argc, char **argv, int *idx, int flag);
|
||||||
|
|
||||||
/* Command -copyright_file */
|
/* Command -copyright_file */
|
||||||
/* @since 0.6.0 */
|
/* @since 0.6.0 */
|
||||||
int Xorriso_option_copyright_file(struct XorrisO *xorriso, char *name,
|
int Xorriso_option_copyright_file(struct XorrisO *xorriso, char *name,
|
||||||
|
@ -1921,9 +1921,10 @@ there are many small files.
|
|||||||
the filter is not applied to any file in the ISO image.
|
the filter is not applied to any file in the ISO image.
|
||||||
|
|
||||||
-close_filter_list
|
-close_filter_list
|
||||||
Irrevocably ban commands -external_filter and -unregister_filter,
|
Irrevocably ban commands -concat "pipe", -external_filter, and
|
||||||
but not -set_filter. Use this to prevent external filtering in
|
-unregister_filter, but not -set_filter. Use this to prevent
|
||||||
general or when all intended filters are registered. External
|
external filtering in general or when all intended filters are
|
||||||
|
registered and -concat mode "pipe" shall be disallowed. External
|
||||||
filters may also be banned totally at compile time of `xorriso'.
|
filters may also be banned totally at compile time of `xorriso'.
|
||||||
By default they are banned if `xorriso' runs under setuid
|
By default they are banned if `xorriso' runs under setuid
|
||||||
permission.
|
permission.
|
||||||
@ -3790,6 +3791,30 @@ The directory permissions on disk have to allow rwx.
|
|||||||
on disk beginning at the byte_offset. Write at most byte_count
|
on disk beginning at the byte_offset. Write at most byte_count
|
||||||
bytes. This is the inverse of command -cut_out.
|
bytes. This is the inverse of command -cut_out.
|
||||||
|
|
||||||
|
-concat mode [target | lim prog [args [...]] lim] iso_rr_path [***]
|
||||||
|
Copy the data content of one or more data files of the ISO image
|
||||||
|
into a disk file object, into a file descriptor, or start a
|
||||||
|
program and copy the data into its standard input. The latter is
|
||||||
|
subject to the security restrictions for external filters.
|
||||||
|
Modes *overwrite* and *append* write into the target which is
|
||||||
|
given by the second parameter. This may be the path to a disk file
|
||||||
|
object, or "-" which means standard output, or a text of the form
|
||||||
|
/dev/fd/number, where number is an open file descriptor (e.g.
|
||||||
|
standard error is /dev/fd/2). An existing target file is not
|
||||||
|
removed before writing begins. If it is not able to take content
|
||||||
|
data, then this command fails. Mode overwrite truncates regular
|
||||||
|
data files to 0 size before writing into them. Example: -concat
|
||||||
|
append /home/me/accumulated_text /my/iso/text -
|
||||||
|
Mode *pipe* expects as second parameter a delimiter word which
|
||||||
|
shall mark the end of the program argument list. The third
|
||||||
|
argument is the disk_path to the program. It must contain at least
|
||||||
|
one '/'. $PATH is not applied. Further parameters up to the
|
||||||
|
announced delimiter word are used as arguments with the program
|
||||||
|
start. Example:
|
||||||
|
-concat pipe + /usr/bin/wc + /my/iso/files* -
|
||||||
|
The further parameters in all modes are the iso_rr_paths of data
|
||||||
|
files. Their content gets concatenated in the copy.
|
||||||
|
|
||||||
-mount drive entity id path
|
-mount drive entity id path
|
||||||
Produce the same line as -mount_cmd and then execute it as
|
Produce the same line as -mount_cmd and then execute it as
|
||||||
external program run after giving up the depicted drive. See also
|
external program run after giving up the depicted drive. See also
|
||||||
@ -4998,6 +5023,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
|
|||||||
* -compare_l reports ISO/disk differences: Navigate. (line 164)
|
* -compare_l reports ISO/disk differences: Navigate. (line 164)
|
||||||
* -compare_r reports ISO/disk differences: Navigate. (line 159)
|
* -compare_r reports ISO/disk differences: Navigate. (line 159)
|
||||||
* -compliance controls standard compliance: SetWrite. (line 58)
|
* -compliance controls standard compliance: SetWrite. (line 58)
|
||||||
|
* -concat copies ISO file content: Restore. (line 129)
|
||||||
* -copyright_file sets copyright file name: SetWrite. (line 231)
|
* -copyright_file sets copyright file name: SetWrite. (line 231)
|
||||||
* -cp_clone copies ISO directory tree: Insert. (line 193)
|
* -cp_clone copies ISO directory tree: Insert. (line 193)
|
||||||
* -cp_rx copies file trees to disk: Restore. (line 111)
|
* -cp_rx copies file trees to disk: Restore. (line 111)
|
||||||
@ -5082,7 +5108,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
|
|||||||
* -mark sets synchronizing message: Frontend. (line 25)
|
* -mark sets synchronizing message: Frontend. (line 25)
|
||||||
* -md5 controls handling of MD5 sums: Loading. (line 183)
|
* -md5 controls handling of MD5 sums: Loading. (line 183)
|
||||||
* -mkdir creates ISO directory: Insert. (line 171)
|
* -mkdir creates ISO directory: Insert. (line 171)
|
||||||
* -mount issues mount command for ISO session: Restore. (line 129)
|
* -mount issues mount command for ISO session: Restore. (line 153)
|
||||||
* -mount_cmd composes mount command line: Inquiry. (line 52)
|
* -mount_cmd composes mount command line: Inquiry. (line 52)
|
||||||
* -mount_cmd controls mount command: Inquiry. (line 68)
|
* -mount_cmd controls mount command: Inquiry. (line 68)
|
||||||
* -msg_op perform operations on program messages: Frontend. (line 30)
|
* -msg_op perform operations on program messages: Frontend. (line 30)
|
||||||
@ -5141,8 +5167,8 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
|
|||||||
* -scsi_log reports SCSI commands: Scripting. (line 158)
|
* -scsi_log reports SCSI commands: Scripting. (line 158)
|
||||||
* -session_log logs written sessions: Scripting. (line 149)
|
* -session_log logs written sessions: Scripting. (line 149)
|
||||||
* -session_string composes session info line: Inquiry. (line 78)
|
* -session_string composes session info line: Inquiry. (line 78)
|
||||||
* -set_filter applies filter to file: Filter. (line 60)
|
* -set_filter applies filter to file: Filter. (line 61)
|
||||||
* -set_filter_r applies filter to file tree: Filter. (line 89)
|
* -set_filter_r applies filter to file tree: Filter. (line 90)
|
||||||
* -setfacl sets ACL in ISO image: Manip. (line 80)
|
* -setfacl sets ACL in ISO image: Manip. (line 80)
|
||||||
* -setfacl_list sets ACL in ISO image: Manip. (line 108)
|
* -setfacl_list sets ACL in ISO image: Manip. (line 108)
|
||||||
* -setfacl_r sets ACL in ISO image: Manip. (line 105)
|
* -setfacl_r sets ACL in ISO image: Manip. (line 105)
|
||||||
@ -5265,9 +5291,10 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
|
|||||||
* Emulation, pacifier form, -pacifier: Emulation. (line 165)
|
* Emulation, pacifier form, -pacifier: Emulation. (line 165)
|
||||||
* Examples: Examples. (line 6)
|
* Examples: Examples. (line 6)
|
||||||
* extattr, _definition: Extras. (line 65)
|
* extattr, _definition: Extras. (line 65)
|
||||||
|
* File content, copy, -concat: Restore. (line 129)
|
||||||
* Filter, _definition: Filter. (line 6)
|
* Filter, _definition: Filter. (line 6)
|
||||||
* Filter, apply to file tree, -set_filter_r: Filter. (line 89)
|
* Filter, apply to file tree, -set_filter_r: Filter. (line 90)
|
||||||
* Filter, apply to file, -set_filter: Filter. (line 60)
|
* Filter, apply to file, -set_filter: Filter. (line 61)
|
||||||
* Filter, ban registration, -close_filter_list: Filter. (line 52)
|
* Filter, ban registration, -close_filter_list: Filter. (line 52)
|
||||||
* Filter, register, -external_filter: Filter. (line 20)
|
* Filter, register, -external_filter: Filter. (line 20)
|
||||||
* Filter, show chain, -show_stream: Navigate. (line 169)
|
* Filter, show chain, -show_stream: Navigate. (line 169)
|
||||||
@ -5430,7 +5457,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
|
|||||||
* Session, _definition: Model. (line 6)
|
* Session, _definition: Model. (line 6)
|
||||||
* Session, altered start address, -displacement: Loading. (line 60)
|
* Session, altered start address, -displacement: Loading. (line 60)
|
||||||
* Session, info string, -session_string: Inquiry. (line 78)
|
* Session, info string, -session_string: Inquiry. (line 78)
|
||||||
* Session, issue mount command, -mount: Restore. (line 129)
|
* Session, issue mount command, -mount: Restore. (line 153)
|
||||||
* Session, log when written, -session_log: Scripting. (line 149)
|
* Session, log when written, -session_log: Scripting. (line 149)
|
||||||
* Session, mount command line, -mount_cmd: Inquiry. (line 52)
|
* Session, mount command line, -mount_cmd: Inquiry. (line 52)
|
||||||
* Session, mount parameters, -mount_opts: Inquiry. (line 68)
|
* Session, mount parameters, -mount_opts: Inquiry. (line 68)
|
||||||
@ -5502,42 +5529,42 @@ Node: SetInsert58213
|
|||||||
Node: Manip66790
|
Node: Manip66790
|
||||||
Node: CmdFind76570
|
Node: CmdFind76570
|
||||||
Node: Filter93841
|
Node: Filter93841
|
||||||
Node: Writing98397
|
Node: Writing98463
|
||||||
Node: SetWrite108528
|
Node: SetWrite108594
|
||||||
Node: Bootable129234
|
Node: Bootable129300
|
||||||
Node: Jigdo146601
|
Node: Jigdo146667
|
||||||
Node: Charset150848
|
Node: Charset150914
|
||||||
Node: Exception154163
|
Node: Exception154229
|
||||||
Node: DialogCtl160283
|
Node: DialogCtl160349
|
||||||
Node: Inquiry162881
|
Node: Inquiry162947
|
||||||
Node: Navigate170016
|
Node: Navigate170082
|
||||||
Node: Verify178314
|
Node: Verify178380
|
||||||
Node: Restore188141
|
Node: Restore188207
|
||||||
Node: Emulation195228
|
Node: Emulation196780
|
||||||
Node: Scripting205616
|
Node: Scripting207168
|
||||||
Node: Frontend213387
|
Node: Frontend214939
|
||||||
Node: Examples222994
|
Node: Examples224546
|
||||||
Node: ExDevices224172
|
Node: ExDevices225724
|
||||||
Node: ExCreate224838
|
Node: ExCreate226390
|
||||||
Node: ExDialog226123
|
Node: ExDialog227675
|
||||||
Node: ExGrowing227388
|
Node: ExGrowing228940
|
||||||
Node: ExModifying228193
|
Node: ExModifying229745
|
||||||
Node: ExBootable228697
|
Node: ExBootable230249
|
||||||
Node: ExCharset229249
|
Node: ExCharset230801
|
||||||
Node: ExPseudo230141
|
Node: ExPseudo231693
|
||||||
Node: ExCdrecord231039
|
Node: ExCdrecord232591
|
||||||
Node: ExMkisofs231356
|
Node: ExMkisofs232908
|
||||||
Node: ExGrowisofs232696
|
Node: ExGrowisofs234248
|
||||||
Node: ExException233831
|
Node: ExException235383
|
||||||
Node: ExTime234285
|
Node: ExTime235837
|
||||||
Node: ExIncBackup234744
|
Node: ExIncBackup236296
|
||||||
Node: ExRestore238724
|
Node: ExRestore240276
|
||||||
Node: ExRecovery239657
|
Node: ExRecovery241209
|
||||||
Node: Files240227
|
Node: Files241779
|
||||||
Node: Seealso241526
|
Node: Seealso243078
|
||||||
Node: Bugreport242249
|
Node: Bugreport243801
|
||||||
Node: Legal242830
|
Node: Legal244382
|
||||||
Node: CommandIdx243841
|
Node: CommandIdx245393
|
||||||
Node: ConceptIdx260576
|
Node: ConceptIdx262201
|
||||||
|
|
||||||
End Tag Table
|
End Tag Table
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
@c man .\" First parameter, NAME, should be all caps
|
@c man .\" First parameter, NAME, should be all caps
|
||||||
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
@c man .\" other parameters are allowed: see man(7), man(1)
|
@c man .\" other parameters are allowed: see man(7), man(1)
|
||||||
@c man .TH XORRISO 1 "Version 1.3.7, Apr 19, 2014"
|
@c man .TH XORRISO 1 "Version 1.3.7, Apr 21, 2014"
|
||||||
@c man .\" Please adjust this date whenever revising the manpage.
|
@c man .\" Please adjust this date whenever revising the manpage.
|
||||||
@c man .\"
|
@c man .\"
|
||||||
@c man .\" Some roff macros, for reference:
|
@c man .\" Some roff macros, for reference:
|
||||||
@ -2590,9 +2590,10 @@ is not applied to any file in the ISO image.
|
|||||||
@item -close_filter_list
|
@item -close_filter_list
|
||||||
@kindex -close_filter_list bans filter registration
|
@kindex -close_filter_list bans filter registration
|
||||||
@cindex Filter, ban registration, -close_filter_list
|
@cindex Filter, ban registration, -close_filter_list
|
||||||
Irrevocably ban commands -external_filter and -unregister_filter,
|
Irrevocably ban commands -concat "pipe", -external_filter,
|
||||||
but not -set_filter. Use this to prevent external filtering in general or
|
and -unregister_filter, but not -set_filter. Use this to prevent external
|
||||||
when all intended filters are registered.
|
filtering in general or when all intended filters are registered and -concat
|
||||||
|
mode "pipe" shall be disallowed.
|
||||||
External filters may also be banned totally at compile time of
|
External filters may also be banned totally at compile time of
|
||||||
@command{xorriso}.
|
@command{xorriso}.
|
||||||
By default they are banned if @command{xorriso} runs under setuid permission.
|
By default they are banned if @command{xorriso} runs under setuid permission.
|
||||||
@ -5024,6 +5025,35 @@ Read the content of a ISO data file and write it into a data file on disk
|
|||||||
beginning at the byte_offset. Write at most byte_count bytes.
|
beginning at the byte_offset. Write at most byte_count bytes.
|
||||||
This is the inverse of command -cut_out.
|
This is the inverse of command -cut_out.
|
||||||
@c man .TP
|
@c man .TP
|
||||||
|
@item -concat mode [target | lim prog [args [...]] lim] iso_rr_path [***]
|
||||||
|
@kindex -concat copies ISO file content
|
||||||
|
@cindex File content, copy, -concat
|
||||||
|
Copy the data content of one or more data files of the ISO image into a
|
||||||
|
disk file object, into a file descriptor, or start a program and copy the
|
||||||
|
data into its standard input.
|
||||||
|
The latter is subject to the security restrictions for external filters.
|
||||||
|
@*
|
||||||
|
Modes @strong{overwrite} and @strong{append} write into the target which is
|
||||||
|
given by the second parameter. This may be the path to a disk file object,
|
||||||
|
or "-" which means standard output, or a text of the form /dev/fd/number,
|
||||||
|
where number is an open file descriptor (e.g. standard error is /dev/fd/2).
|
||||||
|
An existing target file is not removed before writing begins. If it is not
|
||||||
|
able to take content data, then this command fails.
|
||||||
|
Mode overwrite truncates regular data files to 0 size before writing into them.
|
||||||
|
Example:
|
||||||
|
-concat append /home/me/accumulated_text /my/iso/text --
|
||||||
|
@*
|
||||||
|
Mode @strong{pipe} expects as second parameter a delimiter word which shall
|
||||||
|
mark the end of the program argument list. The third argument is the disk_path
|
||||||
|
to the program. It must contain at least one '/'. $PATH is not applied.
|
||||||
|
Further parameters up to the announced delimiter
|
||||||
|
word are used as arguments with the program start. Example:
|
||||||
|
@*
|
||||||
|
-concat pipe + /usr/bin/wc + /my/iso/files* --
|
||||||
|
@*
|
||||||
|
The further parameters in all modes are the iso_rr_paths of data files.
|
||||||
|
Their content gets concatenated in the copy.
|
||||||
|
@c man .TP
|
||||||
@item -mount drive entity id path
|
@item -mount drive entity id path
|
||||||
@kindex -mount issues mount command for ISO session
|
@kindex -mount issues mount command for ISO session
|
||||||
@cindex Session, issue mount command, -mount
|
@cindex Session, issue mount command, -mount
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2014.04.19.115057"
|
#define Xorriso_timestamP "2014.04.21.131802"
|
||||||
|
@ -245,7 +245,7 @@ int Xorriso_retry_burn_track(struct XorrisO *xorriso,
|
|||||||
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
|
int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
|
||||||
char profile_name[80], int flag);
|
char profile_name[80], int flag);
|
||||||
|
|
||||||
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
|
/* @param flag bit0= open IsoNode *node_pt rather than looking up pathname
|
||||||
bit1= dig out the most original stream for reading
|
bit1= dig out the most original stream for reading
|
||||||
*/
|
*/
|
||||||
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
||||||
@ -256,6 +256,9 @@ int Xorriso_iso_file_read(struct XorrisO *xorriso, void *stream, char *buf,
|
|||||||
|
|
||||||
int Xorriso_iso_file_close(struct XorrisO *xorriso, void **stream, int flag);
|
int Xorriso_iso_file_close(struct XorrisO *xorriso, void **stream, int flag);
|
||||||
|
|
||||||
|
int Xorriso_iso_file_to_fd(struct XorrisO *xorriso, char *path, int fd,
|
||||||
|
int flag);
|
||||||
|
|
||||||
/* @param bit0= copy link target properties rather than link properties
|
/* @param bit0= copy link target properties rather than link properties
|
||||||
*/
|
*/
|
||||||
int Xorriso_copy_properties(struct XorrisO *xorriso,
|
int Xorriso_copy_properties(struct XorrisO *xorriso,
|
||||||
@ -622,5 +625,9 @@ int Xorriso_apply_sort_file(struct XorrisO *xorriso, char *path, int flag);
|
|||||||
|
|
||||||
int Xorriso_report_system_area(struct XorrisO *xorriso, char *form, int flag);
|
int Xorriso_report_system_area(struct XorrisO *xorriso, char *form, int flag);
|
||||||
|
|
||||||
|
int Xorriso_external_filter_banned(struct XorrisO *xorriso, char *purpose,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
#endif /* Xorrisoburn_includeD */
|
#endif /* Xorrisoburn_includeD */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user