From 73a02c1a0734a6da630ff828ca51bb9d0ca1d311 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Fri, 4 Jul 2008 06:59:31 +0000 Subject: [PATCH] Supporting option -as cdrecord -waiti --- libisoburn/trunk/xorriso/xorriso.c | 56 ++++++++++++++++++-- libisoburn/trunk/xorriso/xorriso_timestamp.h | 2 +- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/libisoburn/trunk/xorriso/xorriso.c b/libisoburn/trunk/xorriso/xorriso.c index 75cb24ad..f4dff034 100644 --- a/libisoburn/trunk/xorriso/xorriso.c +++ b/libisoburn/trunk/xorriso/xorriso.c @@ -1388,6 +1388,30 @@ single_letters:; } +int Wait_for_input(int fd, int microsec, int flag) +{ + struct timeval wt; + fd_set rds,wts,exs; + int ready; + + FD_ZERO(&rds); + FD_ZERO(&wts); + FD_ZERO(&exs); + FD_SET(fd,&rds); + FD_SET(fd,&exs); + wt.tv_sec= microsec/1000000; + wt.tv_usec= microsec%1000000; + ready= select(fd+1,&rds,&wts,&exs,&wt); + if(ready<=0) + return(0); + if(FD_ISSET(fd,&exs)) + return(-1); + if(FD_ISSET(fd,&rds)) + return(1); + return(0); +} + + /* ------------------------------------------------------------------------ */ @@ -7030,7 +7054,7 @@ int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv, { int ret, i, k, mem_do_close, aq_ret, eject_ret; int do_atip= 0, do_checkdrive= 0, do_eject= 0, do_scanbus= 0; - int do_toc= 0, do_verbous= 0, do_version= 0, do_help= 0; + int do_toc= 0, do_verbous= 0, do_version= 0, do_help= 0, do_waiti= 0; char track_source[SfileadrL], sfe[5*SfileadrL], dev_adr[SfileadrL], *cpt; char mem_report_about_text[80], *report_about= "SORRY", blank_mode[80]; char speed[80]; @@ -7062,7 +7086,7 @@ int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv, "-scms", "-shorttrack", "-noshorttrack", "-packet", "-noclose", "-media-info", "-minfo", "-isosize", "-load", "-lock", "-raw96r", "-sao", "-dao", "-swab", - "-tao", "-waiti", "-force", "-format", + "-tao", "-force", "-format", "--adjust_speed_to_drive", "--allow_emulated_drives", "--allow_setuid", "--allow_untested_media", "--any_track", "--demand_a_drive", @@ -7091,6 +7115,7 @@ int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv, "\t-eject\t\teject the disk after doing the work", "\t-toc\t\tretrieve and print TOC/PMA data", "\t-atip\t\tretrieve media state, print \"Is *erasable\"", +"\t-waiti\t\twait until input is available before opening SCSI", "\tpadsize=#\tAmount of padding", "\t-data\t\tSubsequent tracks are CD-ROM data mode 1 (default)", "\t-pad\t\tpadsize=30k", @@ -7196,9 +7221,7 @@ no_volunteer:; } else if(strncmp(argv[i], "-dev=", 5)==0 || strncmp(argv[i], "dev=", 4)==0) { cpt= strchr(argv[i], '=')+1; - ret= Xorriso_option_dev(xorriso, cpt, 2|8); /* overwriteables as blank */ - if(ret<=0) - goto ex; + strcpy(dev_adr, cpt); } else if(strncmp(argv[i],"driveropts=", 11)==0 || strncmp(argv[i],"-driveropts=", 12)==0) { if(strcmp(argv[i]+11, "help")==0) { @@ -7265,6 +7288,8 @@ no_volunteer:; do_verbous+= 3; } else if(strcmp(argv[i], "-version")==0) { do_version= 1; + } else if(strcmp(argv[i], "-waiti")==0) { + do_waiti= 1; } else if(strcmp(argv[i], "-help")==0) { do_help= 1; } else if(argv[i][0]=='-' && argv[i][1]!=0) { @@ -7295,6 +7320,26 @@ no_volunteer:; Xorriso_option_version(xorriso, 0); ret= 1; goto ex; } + if(do_waiti) { + sprintf(xorriso->info_text, + "xorriso: Option -waiti pauses program until input appears at stdin\n"); + Xorriso_info(xorriso,0); + sprintf(xorriso->result_line, "Waiting for data on stdin...\n"); + Xorriso_result(xorriso, 1); + for(ret= 0; ret==0; ) + ret= Wait_for_input(0,1000000,0); + if(ret<0 || feof(stdin)) { + Xorriso_msgs_submit(xorriso, 0, + "stdin produces exception rather than data", 0, "NOTE", 0); + } + sprintf(xorriso->info_text, "xorriso: Option -waiti pausing is done.\n"); + } + if(dev_adr[0]) { + ret= Xorriso_option_dev(xorriso, dev_adr, 2|8); /* overwriteables as blank */ + if(ret<=0) + goto ex; + } + if(do_help) { for(i= 0; strcmp(helptext[i], "@End_of_helptexT@")!=0; i++) { sprintf(xorriso->info_text, "%s\n", helptext[i]); @@ -7326,6 +7371,7 @@ no_volunteer:; Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); ret= 0; goto ex; } + if(speed[0]) { ret= Xorriso_option_speed(xorriso, speed, 0); if(ret<=0) diff --git a/libisoburn/trunk/xorriso/xorriso_timestamp.h b/libisoburn/trunk/xorriso/xorriso_timestamp.h index 0f23bc99..51bab3bf 100644 --- a/libisoburn/trunk/xorriso/xorriso_timestamp.h +++ b/libisoburn/trunk/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.07.03.133023" +#define Xorriso_timestamP "2008.07.04.070001"