Extended new command -named_pipe_loop by mode parameter
This commit is contained in:
parent
c4d11a3905
commit
5f7c0d0372
@ -107,7 +107,6 @@ int Xorriso_lst_new(struct Xorriso_lsT **lstring, char *text,
|
|||||||
bit0= Return new object address in *entry
|
bit0= Return new object address in *entry
|
||||||
bit1= do not copy data (e.g. because *data is invalid)
|
bit1= do not copy data (e.g. because *data is invalid)
|
||||||
bit2= attach data directly by pointer rather than by copying
|
bit2= attach data directly by pointer rather than by copying
|
||||||
bit2= attach data directly by pointer rather than by copying
|
|
||||||
@return <=0 error, 1 ok
|
@return <=0 error, 1 ok
|
||||||
*/
|
*/
|
||||||
int Xorriso_lst_append_binary(struct Xorriso_lsT **entry,
|
int Xorriso_lst_append_binary(struct Xorriso_lsT **entry,
|
||||||
|
@ -294,6 +294,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
m->do_restore_sort_lba= 0;
|
m->do_restore_sort_lba= 0;
|
||||||
m->do_strict_acl= 0;
|
m->do_strict_acl= 0;
|
||||||
m->dialog= 0;
|
m->dialog= 0;
|
||||||
|
m->buffered_dialog= NULL;
|
||||||
m->bsl_interpretation= 0;
|
m->bsl_interpretation= 0;
|
||||||
m->sh_style_result= 0;
|
m->sh_style_result= 0;
|
||||||
m->search_mode= 0;
|
m->search_mode= 0;
|
||||||
|
@ -2098,9 +2098,13 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
|||||||
" \"compare_sev\"|\"list_sev\" param_text",
|
" \"compare_sev\"|\"list_sev\" param_text",
|
||||||
" Enable, use, or disable message sieve. Or parse lines into",
|
" Enable, use, or disable message sieve. Or parse lines into",
|
||||||
" words. Or compare or list severity names.",
|
" words. Or compare or list severity names.",
|
||||||
" -named_pipes_loop disk_path_stdin disk_path_stdout disk_path_stderr",
|
" -named_pipes_loop mode[:mode]",
|
||||||
|
" disk_path_stdin disk_path_stdout disk_path_stderr",
|
||||||
" Enter an EOF resistant dialog loop at a named pipe as input",
|
" Enter an EOF resistant dialog loop at a named pipe as input",
|
||||||
" and zero, one or two named pipes as output. \"-\" = no pipe.",
|
" and zero, one or two named pipes as output. \"-\" = no pipe.",
|
||||||
|
" Mode \"cleanup\" removes pipes at loop end. \"keep\" does not.",
|
||||||
|
" Mode \"buffered\" reads all lines from input pipe before it",
|
||||||
|
" opens the output pipes. \"direct\" opens after first input.",
|
||||||
" -launch_frontend program [args ...] --",
|
" -launch_frontend program [args ...] --",
|
||||||
" Start a program, connect its stdin to xorriso stdout and",
|
" Start a program, connect its stdin to xorriso stdout and",
|
||||||
" stderr, connect its stdout to xorriso stdin.",
|
" stderr, connect its stdout to xorriso stdin.",
|
||||||
|
@ -1091,17 +1091,43 @@ ex:;
|
|||||||
|
|
||||||
|
|
||||||
/* Option -named_pipe_loop */
|
/* Option -named_pipe_loop */
|
||||||
int Xorriso_option_named_pipe_loop(struct XorrisO *xorriso, char *stdin_pipe,
|
int Xorriso_option_named_pipe_loop(struct XorrisO *xorriso, char *mode,
|
||||||
char *stdout_pipe, char *stderr_pipe,
|
char *stdin_pipe, char *stdout_pipe,
|
||||||
int flag)
|
char *stderr_pipe, int flag)
|
||||||
{
|
{
|
||||||
char *pipe_paths[3];
|
char *pipe_paths[3], *cpt, *npt;
|
||||||
int ret;
|
int ret, hflag= 0, l;
|
||||||
|
|
||||||
|
npt= mode;
|
||||||
|
for(cpt= mode; npt != NULL; cpt= npt + 1) {
|
||||||
|
npt= strchr(cpt, ':');
|
||||||
|
if(npt==NULL)
|
||||||
|
l= strlen(cpt);
|
||||||
|
else
|
||||||
|
l= npt-cpt;
|
||||||
|
if(l==0) {
|
||||||
|
;
|
||||||
|
} else if(strncmp(cpt, "-", l) == 0) {
|
||||||
|
;
|
||||||
|
} else if(strncmp(cpt, "cleanup", l) == 0) {
|
||||||
|
hflag|= 1;
|
||||||
|
} else if(strncmp(cpt, "keep", l) == 0) {
|
||||||
|
hflag&= ~1;
|
||||||
|
} else if(strncmp(cpt, "buffered", l) == 0) {
|
||||||
|
hflag|= 2;
|
||||||
|
} else if(strncmp(cpt, "direct", l) == 0) {
|
||||||
|
hflag&= ~2;
|
||||||
|
} else {
|
||||||
|
sprintf(xorriso->info_text, "-named_pipe_loop: unknown mode in '%s'",
|
||||||
|
mode);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
pipe_paths[0]= stdin_pipe;
|
pipe_paths[0]= stdin_pipe;
|
||||||
pipe_paths[1]= stdout_pipe;
|
pipe_paths[1]= stdout_pipe;
|
||||||
pipe_paths[2]= stderr_pipe;
|
pipe_paths[2]= stderr_pipe;
|
||||||
ret= Xorriso_named_pipe_loop(xorriso, pipe_paths, 0);
|
ret= Xorriso_named_pipe_loop(xorriso, pipe_paths, hflag);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -534,11 +534,12 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
""
|
""
|
||||||
};
|
};
|
||||||
static char arg3_commands[][40]= {
|
static char arg3_commands[][40]= {
|
||||||
"append_partition","named_pipe_loop",
|
"append_partition",
|
||||||
""
|
""
|
||||||
};
|
};
|
||||||
static char arg4_commands[][40]= {
|
static char arg4_commands[][40]= {
|
||||||
"cut_out","extract_cut","mount","mount_cmd","paste_in","session_string",
|
"cut_out","extract_cut","mount","mount_cmd","named_pipe_loop",
|
||||||
|
"paste_in","session_string",
|
||||||
""
|
""
|
||||||
};
|
};
|
||||||
static char argn_commands[][40]= {
|
static char argn_commands[][40]= {
|
||||||
@ -903,7 +904,7 @@ return:
|
|||||||
{
|
{
|
||||||
int ret, was_dashed, end_ret, num1, num2, cmd_data_size= 2 * SfileadrL;
|
int ret, was_dashed, end_ret, num1, num2, cmd_data_size= 2 * SfileadrL;
|
||||||
int mem_idx, arg_count, i;
|
int mem_idx, arg_count, i;
|
||||||
char *cmd, *original_cmd, *cmd_data= NULL, *arg1, *arg2, *arg3;
|
char *cmd, *original_cmd, *cmd_data= NULL, *arg1, *arg2, *arg3, *arg4;
|
||||||
|
|
||||||
Xorriso_alloc_meM(cmd_data, char, cmd_data_size);
|
Xorriso_alloc_meM(cmd_data, char, cmd_data_size);
|
||||||
|
|
||||||
@ -1462,8 +1463,12 @@ next_command:;
|
|||||||
ret= Xorriso_option_mkdiri(xorriso, argc, argv, idx, 0);
|
ret= Xorriso_option_mkdiri(xorriso, argc, argv, idx, 0);
|
||||||
|
|
||||||
} else if(strcmp(cmd,"named_pipe_loop")==0) {
|
} else if(strcmp(cmd,"named_pipe_loop")==0) {
|
||||||
(*idx)+= 3;
|
if((*idx) + 3 < argc)
|
||||||
ret= Xorriso_option_named_pipe_loop(xorriso, arg1, arg2, arg3, 0);
|
arg4= argv[(*idx) + 3];
|
||||||
|
else
|
||||||
|
arg4= "";
|
||||||
|
(*idx)+= 4;
|
||||||
|
ret= Xorriso_option_named_pipe_loop(xorriso, arg1, arg2, arg3, arg4, 0);
|
||||||
if(ret == 3)
|
if(ret == 3)
|
||||||
goto ex;
|
goto ex;
|
||||||
|
|
||||||
|
@ -67,6 +67,7 @@ int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
|
|||||||
bit1= do not read input (but eventually write to history)
|
bit1= do not read input (but eventually write to history)
|
||||||
bit2= do not write to history line which begin with "-history:" or "-history "
|
bit2= do not write to history line which begin with "-history:" or "-history "
|
||||||
bit3= enforce single line dialog mode
|
bit3= enforce single line dialog mode
|
||||||
|
bit4= do not read from xorriso->buffered_dialog
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
char *cpt= NULL, **argv= NULL, *linept, *why_append= "";
|
char *cpt= NULL, **argv= NULL, *linept, *why_append= "";
|
||||||
@ -77,6 +78,7 @@ int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
|
|||||||
double tdiff;
|
double tdiff;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
struct timezone tz;
|
struct timezone tz;
|
||||||
|
struct Xorriso_lsT *next_lst;
|
||||||
|
|
||||||
gettimeofday(&tv,&tz);
|
gettimeofday(&tv,&tz);
|
||||||
tdiff= tv.tv_sec+(1.e-6*(double) tv.tv_usec);
|
tdiff= tv.tv_sec+(1.e-6*(double) tv.tv_usec);
|
||||||
@ -85,6 +87,16 @@ int Xorriso_dialog_input(struct XorrisO *xorriso, char line[], int linesize,
|
|||||||
linept= line;
|
linept= line;
|
||||||
|
|
||||||
get_single:;
|
get_single:;
|
||||||
|
|
||||||
|
if(xorriso->buffered_dialog != NULL && !(flag & 16)) {
|
||||||
|
/* Consume next buffered line */
|
||||||
|
next_lst= Xorriso_lst_get_next(xorriso->buffered_dialog, 0);
|
||||||
|
strcpy(line, Xorriso_lst_get_text(xorriso->buffered_dialog, 0));
|
||||||
|
Xorriso_lst_destroy(&(xorriso->buffered_dialog), 0);
|
||||||
|
xorriso->buffered_dialog= next_lst;
|
||||||
|
goto process_single;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef Xorriso_with_readlinE
|
#ifdef Xorriso_with_readlinE
|
||||||
|
|
||||||
if(xorriso->use_stdin || xorriso->dev_fd_1>=0 ||
|
if(xorriso->use_stdin || xorriso->dev_fd_1>=0 ||
|
||||||
@ -121,8 +133,6 @@ get_single:;
|
|||||||
strcpy(linept, cpt);
|
strcpy(linept, cpt);
|
||||||
}
|
}
|
||||||
|
|
||||||
process_single:;
|
|
||||||
|
|
||||||
#else /* Xorriso_with_readlinE */
|
#else /* Xorriso_with_readlinE */
|
||||||
|
|
||||||
if(flag&2)
|
if(flag&2)
|
||||||
@ -138,6 +148,8 @@ process_single:;
|
|||||||
|
|
||||||
#endif /* ! Xorriso_with_readlinE */
|
#endif /* ! Xorriso_with_readlinE */
|
||||||
|
|
||||||
|
process_single:;
|
||||||
|
|
||||||
if(xorriso->dialog == 2 && !(flag & 8)) {
|
if(xorriso->dialog == 2 && !(flag & 8)) {
|
||||||
append_line= 0;
|
append_line= 0;
|
||||||
if(linept != line && strcmp(linept, "@@@") == 0) {
|
if(linept != line && strcmp(linept, "@@@") == 0) {
|
||||||
@ -3987,7 +3999,14 @@ int Xorriso_open_named_pipe(struct XorrisO *xorriso, char fd_names[3][20],
|
|||||||
|
|
||||||
|
|
||||||
/* Usage example via bash:
|
/* Usage example via bash:
|
||||||
|
in=/u/test/xorriso_stdin
|
||||||
|
out=/u/test/xorriso_stdout
|
||||||
|
mknod "$in" p
|
||||||
|
mknod "$out" p
|
||||||
|
xorriso -abort_on NEVER \
|
||||||
|
-named_pipe_loop cleanup:buffered "$in" "$out" - &
|
||||||
|
|
||||||
|
# Send command and receive result
|
||||||
xorriso_cmd() {
|
xorriso_cmd() {
|
||||||
echo "$@" >/u/test/xorriso_stdin
|
echo "$@" >/u/test/xorriso_stdin
|
||||||
cat </u/test/xorriso_stdout
|
cat </u/test/xorriso_stdout
|
||||||
@ -4002,14 +4021,21 @@ int Xorriso_open_named_pipe(struct XorrisO *xorriso, char fd_names[3][20],
|
|||||||
iso_path=...arbitrary.characters...
|
iso_path=...arbitrary.characters...
|
||||||
xorriso_cmd map $(xorriso_esc "$disk_path") $(xorriso_esc "$iso_path")
|
xorriso_cmd map $(xorriso_esc "$disk_path") $(xorriso_esc "$iso_path")
|
||||||
*/
|
*/
|
||||||
|
/* @param flag bit0= unlink pipes when the loop ends
|
||||||
|
bit1= read all lines from pipe until EOF before executing them
|
||||||
|
*/
|
||||||
int Xorriso_named_pipe_loop(struct XorrisO *xorriso,
|
int Xorriso_named_pipe_loop(struct XorrisO *xorriso,
|
||||||
char *pipe_paths[3], int flag)
|
char *pipe_paths[3], int flag)
|
||||||
{
|
{
|
||||||
char *line= NULL;
|
char *line= NULL;
|
||||||
int i, ret, mem_fds[3], pipe_fds[3], first_line, hret;
|
int i, ret, mem_fds[3], pipe_fds[3], first_line, hret, pipes_are_valid= 0;
|
||||||
|
int lst_ret, filling_buffer= 0;
|
||||||
|
off_t mem_used= 0, mem_needed;
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
|
struct Xorriso_lsT *prev_lst= NULL;
|
||||||
static char fd_names[3][20] = {
|
static char fd_names[3][20] = {
|
||||||
"standard input", "standard output", "standard error" };
|
"standard input", "standard output", "standard error" };
|
||||||
|
char mem_text[80], limit_text[80];
|
||||||
|
|
||||||
if(xorriso->tolerate_stdin_eof) {
|
if(xorriso->tolerate_stdin_eof) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
@ -4048,6 +4074,7 @@ int Xorriso_named_pipe_loop(struct XorrisO *xorriso,
|
|||||||
ret= 0; goto ex;
|
ret= 0; goto ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pipes_are_valid= 1;
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
/* Open input pipe */
|
/* Open input pipe */
|
||||||
@ -4059,10 +4086,52 @@ int Xorriso_named_pipe_loop(struct XorrisO *xorriso,
|
|||||||
/* As long as the input connection exists */
|
/* As long as the input connection exists */
|
||||||
xorriso->tolerate_stdin_eof= 1;
|
xorriso->tolerate_stdin_eof= 1;
|
||||||
first_line= 1;
|
first_line= 1;
|
||||||
|
if(flag & 2) {
|
||||||
|
filling_buffer= 8 | 16; /* single line, no reading from buffered_dialog */
|
||||||
|
prev_lst= NULL;
|
||||||
|
mem_used= 0;
|
||||||
|
}
|
||||||
while(1) {
|
while(1) {
|
||||||
|
|
||||||
/* Fetch input line */
|
/* Fetch input line */
|
||||||
ret= Xorriso_dialog_input(xorriso, line, SfileadrL, 1);
|
if((flag & 2) && xorriso->buffered_dialog == NULL && !filling_buffer) {
|
||||||
|
ret= -2; /* EOF */
|
||||||
|
} else {
|
||||||
|
ret= Xorriso_dialog_input(xorriso, line, SfileadrL, 1 | filling_buffer);
|
||||||
|
}
|
||||||
|
if((flag & 2) && filling_buffer) {
|
||||||
|
/* Fetch and buffer lines before opening output pipes */
|
||||||
|
|
||||||
|
if(ret > 0) {
|
||||||
|
|
||||||
|
/* Check for excessive memory consumption */;
|
||||||
|
mem_needed= strlen(line) + 8 + sizeof(struct Xorriso_lsT);
|
||||||
|
if(mem_used + mem_needed > xorriso->temp_mem_limit) {
|
||||||
|
Sfile_scale((double) (mem_used + mem_needed), mem_text, 5, 1e4, 0);
|
||||||
|
Sfile_scale((double) xorriso->temp_mem_limit,
|
||||||
|
limit_text, 5, 1e4, 0);
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"-named_pipe_loop: List of buffered input lines exceeds -temp_mem_limit (%s > %s)",
|
||||||
|
mem_text, limit_text);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0,
|
||||||
|
"FAILURE", 0);
|
||||||
|
ret= -1; goto ex;
|
||||||
|
}
|
||||||
|
mem_used+= mem_needed;
|
||||||
|
|
||||||
|
lst_ret= Xorriso_lst_new(&prev_lst, line, prev_lst, 0);
|
||||||
|
if(lst_ret <= 0) {
|
||||||
|
Xorriso_msgs_submit(xorriso, 0,
|
||||||
|
"-named_pipe_loop: Cannot buffer all input lines", 0, "FATAL", 0);
|
||||||
|
ret= -1;
|
||||||
|
} else {
|
||||||
|
if(xorriso->buffered_dialog == NULL)
|
||||||
|
xorriso->buffered_dialog= prev_lst;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
filling_buffer= 0; /* start consuming buffer */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* Open output pipes late to allow the sender to open them after
|
/* Open output pipes late to allow the sender to open them after
|
||||||
the first (and usually only) input line was transmitted:
|
the first (and usually only) input line was transmitted:
|
||||||
@ -4114,10 +4183,23 @@ int Xorriso_named_pipe_loop(struct XorrisO *xorriso,
|
|||||||
ret= 1;
|
ret= 1;
|
||||||
ex:;
|
ex:;
|
||||||
xorriso->tolerate_stdin_eof= 0;
|
xorriso->tolerate_stdin_eof= 0;
|
||||||
|
if(flag & 2)
|
||||||
|
Xorriso_lst_destroy_all(&(xorriso->buffered_dialog), 0);
|
||||||
/* Close any open pipes. Restore stdin, stdout and stderr. */
|
/* Close any open pipes. Restore stdin, stdout and stderr. */
|
||||||
for(i= 0; i < 3; i++) {
|
for(i= 0; i < 3; i++) {
|
||||||
if(pipe_fds[i] != -1)
|
if(pipe_fds[i] != -1) {
|
||||||
|
if((flag & 1) && pipes_are_valid) {
|
||||||
|
if(stat(pipe_paths[i], &stbuf) != -1) {
|
||||||
|
if(S_ISFIFO(stbuf.st_mode)) {
|
||||||
|
sprintf(xorriso->info_text, "Removing named pipe ");
|
||||||
|
Text_shellsafe(pipe_paths[i], xorriso->info_text, 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||||
|
unlink(pipe_paths[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
close(pipe_fds[i]);
|
close(pipe_fds[i]);
|
||||||
|
}
|
||||||
if(mem_fds[i] != -1) {
|
if(mem_fds[i] != -1) {
|
||||||
close(i);
|
close(i);
|
||||||
dup2(mem_fds[i], i);
|
dup2(mem_fds[i], i);
|
||||||
|
@ -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.1, Jul 02, 2013"
|
.TH XORRISO 1 "Version 1.3.1, Jul 03, 2013"
|
||||||
.\" 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:
|
||||||
@ -4700,19 +4700,30 @@ Above example "SORRY,UPDATE" will yield 1.
|
|||||||
Print to the result channel a blank separated list of all severity names.
|
Print to the result channel a blank separated list of all severity names.
|
||||||
Sorted from low to high severity.
|
Sorted from low to high severity.
|
||||||
.TP
|
.TP
|
||||||
\fB\-named_pipe_loop\fR disk_path_stdin disk_path_stdout disk_path_stderr
|
\fB\-named_pipe_loop\fR mode[:mode] disk_path_stdin disk_path_stdout disk_path_stderr
|
||||||
Temporarily replace standard input, standard output and standard error by
|
Temporarily replace standard input, standard output and standard error by
|
||||||
named pipes. Enter dialog mode without readline.
|
named pipes. Enter dialog mode without readline.
|
||||||
The three parameters must either be disk paths to existing named pipes,
|
.br
|
||||||
|
Defined modes are:
|
||||||
|
.br
|
||||||
|
"cleanup" removes the submitted pipe files when the loop ends.
|
||||||
|
.br
|
||||||
|
"keep" does not delete them. This is the default.
|
||||||
|
.br
|
||||||
|
"buffered" reads all lines from the input pipe until EOF before it opens
|
||||||
|
the output pipes and processes the input lines.
|
||||||
|
.br
|
||||||
|
"direct" opens the output pipes after the first input line was read.
|
||||||
|
Each line is executed directly after it is read. This is the default.
|
||||||
|
.br
|
||||||
|
The other three parameters must either be disk paths to existing named pipes,
|
||||||
or be "\-" to leave the according standard i/o channel unreplaced.
|
or be "\-" to leave the according standard i/o channel unreplaced.
|
||||||
.br
|
.br
|
||||||
xorriso will open the stdin pipe, read and execute dialog lines from it
|
xorriso will open the stdin pipe, read and execute dialog lines from it
|
||||||
until the sender closes the pipe. Then xorriso will close its side of
|
until the sender closes the pipe. The output pipes get opened depending on
|
||||||
the pipes and enter a new cycle of opening, reading and executing.
|
mode "buffered" resp. "direct". After all lines are executed, xorriso will
|
||||||
.br
|
close its side of the pipes and enter a new cycle of opening, reading and
|
||||||
The output pipes will get opened after the first input line was
|
executing.
|
||||||
read from a freshly opened pipe. This allows the sender to first send
|
|
||||||
a very long line and to only then open an output pipe for reading the reply.
|
|
||||||
.br
|
.br
|
||||||
If an input line consists only of the word "end_named_pipe_loop"
|
If an input line consists only of the word "end_named_pipe_loop"
|
||||||
then \-named_pipe_loop will end and further xorriso commands may be
|
then \-named_pipe_loop will end and further xorriso commands may be
|
||||||
|
@ -1665,9 +1665,9 @@ int Xorriso_option_mvi(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
|
|
||||||
/* Option -named_pipe_loop */
|
/* Option -named_pipe_loop */
|
||||||
/* @since 1.3.2 */
|
/* @since 1.3.2 */
|
||||||
int Xorriso_option_named_pipe_loop(struct XorrisO *xorriso, char *stdin_pipe,
|
int Xorriso_option_named_pipe_loop(struct XorrisO *xorriso, char *mode,
|
||||||
char *stdout_pipe, char *stderr_pipe,
|
char *stdin_pipe, char *stdout_pipe,
|
||||||
int flag);
|
char *stderr_pipe, int flag);
|
||||||
|
|
||||||
/* Command -no_rc */
|
/* Command -no_rc */
|
||||||
int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
|
int Xorriso_option_no_rc(struct XorrisO *xorriso, int flag);
|
||||||
|
@ -4110,19 +4110,25 @@ File: xorriso.info, Node: Frontend, Next: ExDevices, Prev: Scripting, Up: Co
|
|||||||
Print to the result channel a blank separated list of all severity
|
Print to the result channel a blank separated list of all severity
|
||||||
names. Sorted from low to high severity.
|
names. Sorted from low to high severity.
|
||||||
|
|
||||||
-named_pipe_loop disk_path_stdin disk_path_stdout disk_path_stderr
|
-named_pipe_loop mode[:mode] disk_path_stdin disk_path_stdout disk_path_stderr
|
||||||
Temporarily replace standard input, standard output and standard
|
Temporarily replace standard input, standard output and standard
|
||||||
error by named pipes. Enter dialog mode without readline. The
|
error by named pipes. Enter dialog mode without readline.
|
||||||
three parameters must either be disk paths to existing named pipes,
|
Defined modes are:
|
||||||
or be "-" to leave the according standard i/o channel unreplaced.
|
"cleanup" removes the submitted pipe files when the loop ends.
|
||||||
|
"keep" does not delete them. This is the default.
|
||||||
|
"buffered" reads all lines from the input pipe until EOF before it
|
||||||
|
opens the output pipes and processes the input lines.
|
||||||
|
"direct" opens the output pipes after the first input line was
|
||||||
|
read. Each line is executed directly after it is read. This is
|
||||||
|
the default.
|
||||||
|
The other three parameters must either be disk paths to existing
|
||||||
|
named pipes, or be "-" to leave the according standard i/o channel
|
||||||
|
unreplaced.
|
||||||
xorriso will open the stdin pipe, read and execute dialog lines
|
xorriso will open the stdin pipe, read and execute dialog lines
|
||||||
from it until the sender closes the pipe. Then xorriso will close
|
from it until the sender closes the pipe. The output pipes get
|
||||||
its side of the pipes and enter a new cycle of opening, reading
|
opened depending on mode "buffered" resp. "direct". After all
|
||||||
and executing.
|
lines are executed, xorriso will close its side of the pipes and
|
||||||
The output pipes will get opened after the first input line was
|
enter a new cycle of opening, reading and executing.
|
||||||
read from a freshly opened pipe. This allows the sender to first
|
|
||||||
send a very long line and to only then open an output pipe for
|
|
||||||
reading the reply.
|
|
||||||
If an input line consists only of the word "end_named_pipe_loop"
|
If an input line consists only of the word "end_named_pipe_loop"
|
||||||
then -named_pipe_loop will end and further xorriso commands may be
|
then -named_pipe_loop will end and further xorriso commands may be
|
||||||
executed from other sources.
|
executed from other sources.
|
||||||
@ -4872,7 +4878,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
|
|||||||
* -jigdo clears JTE or or adds parameter to JTE: Jigdo. (line 33)
|
* -jigdo clears JTE or or adds parameter to JTE: Jigdo. (line 33)
|
||||||
* -joliet enables production of Joliet tree: SetWrite. (line 10)
|
* -joliet enables production of Joliet tree: SetWrite. (line 10)
|
||||||
* -launch_frontend starts frontend program at pipes: Frontend.
|
* -launch_frontend starts frontend program at pipes: Frontend.
|
||||||
(line 140)
|
(line 146)
|
||||||
* -list_arg_sorting prints sorting order of -x: ArgSort. (line 27)
|
* -list_arg_sorting prints sorting order of -x: ArgSort. (line 27)
|
||||||
* -list_delimiter replaces '--': Scripting. (line 60)
|
* -list_delimiter replaces '--': Scripting. (line 60)
|
||||||
* -list_extras lists compile time extra features: Scripting.
|
* -list_extras lists compile time extra features: Scripting.
|
||||||
@ -4927,8 +4933,8 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
|
|||||||
* -print_info prints message text line: Scripting. (line 113)
|
* -print_info prints message text line: Scripting. (line 113)
|
||||||
* -print_mark prints synchronizing text line: Scripting. (line 116)
|
* -print_mark prints synchronizing text line: Scripting. (line 116)
|
||||||
* -print_size predicts image size: Inquiry. (line 91)
|
* -print_size predicts image size: Inquiry. (line 91)
|
||||||
* -prog sets program name: Frontend. (line 175)
|
* -prog sets program name: Frontend. (line 181)
|
||||||
* -prog_help prints help text: Frontend. (line 178)
|
* -prog_help prints help text: Frontend. (line 184)
|
||||||
* -prompt prompts for enter key: Scripting. (line 121)
|
* -prompt prompts for enter key: Scripting. (line 121)
|
||||||
* -publisher sets publisher id: SetWrite. (line 186)
|
* -publisher sets publisher id: SetWrite. (line 186)
|
||||||
* -pvd_info shows image id strings: Inquiry. (line 115)
|
* -pvd_info shows image id strings: Inquiry. (line 115)
|
||||||
@ -5089,7 +5095,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
|
|||||||
* Filter, unregister, -unregister_filter: Filter. (line 48)
|
* Filter, unregister, -unregister_filter: Filter. (line 48)
|
||||||
* Filter, zisofs parameters, -zisofs: SetWrite. (line 272)
|
* Filter, zisofs parameters, -zisofs: SetWrite. (line 272)
|
||||||
* Frontend program, start at pipes, -launch_frontend: Frontend.
|
* Frontend program, start at pipes, -launch_frontend: Frontend.
|
||||||
(line 140)
|
(line 146)
|
||||||
* GPT, _definition: Extras. (line 38)
|
* GPT, _definition: Extras. (line 38)
|
||||||
* Group, global in ISO image, -gid: SetWrite. (line 268)
|
* Group, global in ISO image, -gid: SetWrite. (line 268)
|
||||||
* Group, in ISO image, -chgrp: Manip. (line 57)
|
* Group, in ISO image, -chgrp: Manip. (line 57)
|
||||||
@ -5203,7 +5209,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
|
|||||||
* Program, end without writing, -rollback_end: Scripting. (line 170)
|
* Program, end without writing, -rollback_end: Scripting. (line 170)
|
||||||
* Program, list extra features, -list_extras: Scripting. (line 26)
|
* Program, list extra features, -list_extras: Scripting. (line 26)
|
||||||
* Program, print help text, -help: Scripting. (line 20)
|
* Program, print help text, -help: Scripting. (line 20)
|
||||||
* Program, print help text, -prog_help: Frontend. (line 178)
|
* Program, print help text, -prog_help: Frontend. (line 184)
|
||||||
* Program, print message text line, -print_info: Scripting. (line 113)
|
* Program, print message text line, -print_info: Scripting. (line 113)
|
||||||
* Program, print result text line, -print: Scripting. (line 110)
|
* Program, print result text line, -print: Scripting. (line 110)
|
||||||
* Program, print synchronizing text line, -print_mark: Scripting.
|
* Program, print synchronizing text line, -print_mark: Scripting.
|
||||||
@ -5211,7 +5217,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
|
|||||||
* Program, print version, -version: Scripting. (line 23)
|
* Program, print version, -version: Scripting. (line 23)
|
||||||
* Program, prompt for enter key, -prompt: Scripting. (line 121)
|
* Program, prompt for enter key, -prompt: Scripting. (line 121)
|
||||||
* Program, replace --, -list_delimiter: Scripting. (line 60)
|
* Program, replace --, -list_delimiter: Scripting. (line 60)
|
||||||
* Program, set name, -prog: Frontend. (line 175)
|
* Program, set name, -prog: Frontend. (line 181)
|
||||||
* Program, show current settings, -status: Scripting. (line 47)
|
* Program, show current settings, -status: Scripting. (line 47)
|
||||||
* Program, status history, -status_history_max: Scripting. (line 56)
|
* Program, status history, -status_history_max: Scripting. (line 56)
|
||||||
* Program, wait a time span, -sleep: Scripting. (line 125)
|
* Program, wait a time span, -sleep: Scripting. (line 125)
|
||||||
@ -5320,28 +5326,28 @@ Node: Restore178554
|
|||||||
Node: Emulation185641
|
Node: Emulation185641
|
||||||
Node: Scripting195943
|
Node: Scripting195943
|
||||||
Node: Frontend203714
|
Node: Frontend203714
|
||||||
Node: Examples212994
|
Node: Examples213321
|
||||||
Node: ExDevices214172
|
Node: ExDevices214499
|
||||||
Node: ExCreate214831
|
Node: ExCreate215158
|
||||||
Node: ExDialog216116
|
Node: ExDialog216443
|
||||||
Node: ExGrowing217381
|
Node: ExGrowing217708
|
||||||
Node: ExModifying218186
|
Node: ExModifying218513
|
||||||
Node: ExBootable218690
|
Node: ExBootable219017
|
||||||
Node: ExCharset219242
|
Node: ExCharset219569
|
||||||
Node: ExPseudo220063
|
Node: ExPseudo220390
|
||||||
Node: ExCdrecord220961
|
Node: ExCdrecord221288
|
||||||
Node: ExMkisofs221278
|
Node: ExMkisofs221605
|
||||||
Node: ExGrowisofs222618
|
Node: ExGrowisofs222945
|
||||||
Node: ExException223753
|
Node: ExException224080
|
||||||
Node: ExTime224207
|
Node: ExTime224534
|
||||||
Node: ExIncBackup224666
|
Node: ExIncBackup224993
|
||||||
Node: ExRestore228646
|
Node: ExRestore228973
|
||||||
Node: ExRecovery229579
|
Node: ExRecovery229906
|
||||||
Node: Files230149
|
Node: Files230476
|
||||||
Node: Seealso231448
|
Node: Seealso231775
|
||||||
Node: Bugreport232171
|
Node: Bugreport232498
|
||||||
Node: Legal232752
|
Node: Legal233079
|
||||||
Node: CommandIdx233763
|
Node: CommandIdx234090
|
||||||
Node: ConceptIdx250279
|
Node: ConceptIdx250606
|
||||||
|
|
||||||
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.1, Jul 02, 2013"
|
@c man .TH XORRISO 1 "Version 1.3.1, Jul 03, 2013"
|
||||||
@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:
|
||||||
@ -5491,21 +5491,32 @@ Above example "SORRY,UPDATE" will yield 1.
|
|||||||
Print to the result channel a blank separated list of all severity names.
|
Print to the result channel a blank separated list of all severity names.
|
||||||
Sorted from low to high severity.
|
Sorted from low to high severity.
|
||||||
@c man .TP
|
@c man .TP
|
||||||
@item -named_pipe_loop disk_path_stdin disk_path_stdout disk_path_stderr
|
@item -named_pipe_loop mode[:mode] disk_path_stdin disk_path_stdout disk_path_stderr
|
||||||
@kindex -named_pipe_loop enters EOF resistant dialog
|
@kindex -named_pipe_loop enters EOF resistant dialog
|
||||||
@cindex Dialog, EOF resistant, -named_pipe_loop
|
@cindex Dialog, EOF resistant, -named_pipe_loop
|
||||||
Temporarily replace standard input, standard output and standard error by
|
Temporarily replace standard input, standard output and standard error by
|
||||||
named pipes. Enter dialog mode without readline.
|
named pipes. Enter dialog mode without readline.
|
||||||
The three parameters must either be disk paths to existing named pipes,
|
@*
|
||||||
|
Defined modes are:
|
||||||
|
@*
|
||||||
|
"cleanup" removes the submitted pipe files when the loop ends.
|
||||||
|
@*
|
||||||
|
"keep" does not delete them. This is the default.
|
||||||
|
@*
|
||||||
|
"buffered" reads all lines from the input pipe until EOF before it opens
|
||||||
|
the output pipes and processes the input lines.
|
||||||
|
@*
|
||||||
|
"direct" opens the output pipes after the first input line was read.
|
||||||
|
Each line is executed directly after it is read. This is the default.
|
||||||
|
@*
|
||||||
|
The other three parameters must either be disk paths to existing named pipes,
|
||||||
or be "-" to leave the according standard i/o channel unreplaced.
|
or be "-" to leave the according standard i/o channel unreplaced.
|
||||||
@*
|
@*
|
||||||
xorriso will open the stdin pipe, read and execute dialog lines from it
|
xorriso will open the stdin pipe, read and execute dialog lines from it
|
||||||
until the sender closes the pipe. Then xorriso will close its side of
|
until the sender closes the pipe. The output pipes get opened depending on
|
||||||
the pipes and enter a new cycle of opening, reading and executing.
|
mode "buffered" resp. "direct". After all lines are executed, xorriso will
|
||||||
@*
|
close its side of the pipes and enter a new cycle of opening, reading and
|
||||||
The output pipes will get opened after the first input line was
|
executing.
|
||||||
read from a freshly opened pipe. This allows the sender to first send
|
|
||||||
a very long line and to only then open an output pipe for reading the reply.
|
|
||||||
@*
|
@*
|
||||||
If an input line consists only of the word "end_named_pipe_loop"
|
If an input line consists only of the word "end_named_pipe_loop"
|
||||||
then -named_pipe_loop will end and further xorriso commands may be
|
then -named_pipe_loop will end and further xorriso commands may be
|
||||||
|
@ -520,6 +520,8 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
|
|
||||||
int dialog; /* 0=off , 1=single-line , 2=multi-line */
|
int dialog; /* 0=off , 1=single-line , 2=multi-line */
|
||||||
|
|
||||||
|
struct Xorriso_lsT *buffered_dialog; /* If not NULL : read by dialog */
|
||||||
|
|
||||||
int bsl_interpretation;
|
int bsl_interpretation;
|
||||||
/* whether to run input through Sfile_bsl_interpreter():
|
/* whether to run input through Sfile_bsl_interpreter():
|
||||||
bit0-1= dialog and quoted file reading
|
bit0-1= dialog and quoted file reading
|
||||||
@ -533,6 +535,14 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
bit6= perform backslash encoding with info texts
|
bit6= perform backslash encoding with info texts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
int sh_style_result; /* Whether not to wrap into quotation marks the file
|
||||||
|
addresses reported by:
|
||||||
|
pwd pwdx ls lsd lsl lsdl lsx lsdx lslx lsdlx
|
||||||
|
du dus dux dusx findx find
|
||||||
|
and to make du* numbers left adjusted,
|
||||||
|
and not to append "/" to pwd*
|
||||||
|
*/
|
||||||
|
|
||||||
/* Pattern matching facility. It still carries legacy from scdbackup/askme.c
|
/* Pattern matching facility. It still carries legacy from scdbackup/askme.c
|
||||||
but is fully functional for xorriso.
|
but is fully functional for xorriso.
|
||||||
*/
|
*/
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2013.07.02.123642"
|
#define Xorriso_timestamP "2013.07.04.094640"
|
||||||
|
Loading…
Reference in New Issue
Block a user