Allowed independent redirecton of result and info channel

This commit is contained in:
2008-08-15 10:29:47 +00:00
parent 7aa52d2cc9
commit ffb0dc8e54
4 changed files with 38 additions and 8 deletions

View File

@ -3259,6 +3259,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
for(i= 0; i < Xorriso_max_outlist_stacK; i++) {
m->result_msglists[i]= NULL;
m->info_msglists[i]= NULL;
m->msglist_flags[i]= 0;
}
m->msglist_stackfill= 0;
m->status_history_max= Xorriso_status_history_maX;
@ -3676,7 +3677,8 @@ int Xorriso_write_to_channel(struct XorrisO *xorriso,
bit15= with bit1 or bit2: close depicted log file
*/
{
char *rpt,*npt,ret= 1;
char *rpt,*npt;
int ret= 1, info_redirected= 0, result_redirected= 0;
char prefix[16];
FILE *logfile_fp, *pktlog_fp;
struct Xorriso_lsT *msglist;
@ -3728,6 +3730,12 @@ bit15= with bit1 or bit2: close depicted log file
/* Eventually perform messag redirection */
if(xorriso->msglist_stackfill > 0) {
if(xorriso->msglist_flags[xorriso->msglist_stackfill - 1] & 1)
result_redirected= 1;
if(xorriso->msglist_flags[xorriso->msglist_stackfill - 1] & 2)
info_redirected= 1;
}
if(result_redirected) {
if(channel_no==1 || channel_no==3) {
msglist= xorriso->result_msglists[xorriso->msglist_stackfill - 1];
ret= Xorriso_lst_append_binary(&msglist, text, strlen(text) + 1, 0);
@ -3736,6 +3744,8 @@ bit15= with bit1 or bit2: close depicted log file
if(xorriso->result_msglists[xorriso->msglist_stackfill - 1] == NULL)
xorriso->result_msglists[xorriso->msglist_stackfill - 1]= msglist;
}
}
if(info_redirected) {
if(channel_no==2 || channel_no==3) {
msglist= xorriso->info_msglists[xorriso->msglist_stackfill - 1];
ret= Xorriso_lst_append_binary(&msglist, text, strlen(text) + 1, 0);
@ -3744,8 +3754,11 @@ bit15= with bit1 or bit2: close depicted log file
if(xorriso->info_msglists[xorriso->msglist_stackfill - 1] == NULL)
xorriso->info_msglists[xorriso->msglist_stackfill - 1]= msglist;
}
return(1);
}
if((channel_no == 1 && result_redirected) ||
(channel_no == 2 && info_redirected) ||
(result_redirected && info_redirected))
return(1);
/* Non-redirected output */
if(!xorriso->packet_output) {
@ -3828,9 +3841,12 @@ int Xorriso_push_outlists(struct XorrisO *xorriso, int *stack_handle,
"Overflow of message output redirection stack", 0, "FATAL", 0);
return(-1);
}
if((flag & 3) == 0)
flag|= 3;
xorriso->msglist_stackfill++;
xorriso->result_msglists[xorriso->msglist_stackfill - 1]= NULL;
xorriso->info_msglists[xorriso->msglist_stackfill - 1]= NULL;
xorriso->msglist_flags[xorriso->msglist_stackfill - 1]= flag & 3;
*stack_handle= xorriso->msglist_stackfill - 1;
return(1);
}
@ -3864,13 +3880,16 @@ int Xorriso_result(struct XorrisO *xorriso, int flag)
bit0= no considerations or computations or dialog. Just put out.
*/
{
int ret;
int ret, redirected= 0;
if(flag&1)
goto put_it_out;
if(xorriso->request_to_abort)
return(1);
if(xorriso->result_page_length>0 && xorriso->msglist_stackfill <= 0) {
if(xorriso->msglist_stackfill > 0)
if(xorriso->msglist_flags[xorriso->msglist_stackfill - 1] & 1)
redirected= 1;
if(xorriso->result_page_length>0 && !redirected) {
ret= Xorriso_pager(xorriso,xorriso->result_line,2);
if(ret<=0)
return(ret);
@ -8844,17 +8863,22 @@ int Xorriso_toc_to_string(struct XorrisO *xorriso, char **toc_text, int flag)
struct Xorriso_lsT *results= NULL, *infos= NULL, *lpt;
*toc_text= NULL;
ret= Xorriso_push_outlists(xorriso, &stack_handle, 0);
ret= Xorriso_push_outlists(xorriso, &stack_handle, 1);
if(ret <= 0)
goto ex;
toc_ret= Xorriso_toc(xorriso, flag & 4);
ret= Xorriso_pull_outlists(xorriso, stack_handle, &results, &infos, 0);
if(ret <= 0)
goto ex;
#ifdef NIX
/* <<< info is no longer redirected */
for(lpt= infos; lpt != NULL; lpt= Xorriso_lst_get_next(lpt, 0)) {
strcpy(xorriso->info_text, Xorriso_lst_get_text(lpt, 0));
Xorriso_info(xorriso, 0);
}
#endif
if(toc_ret <= 0)
{ret= toc_ret; goto ex;}