diff --git a/libisoburn/trunk/libisoburn/burn_wrap.c b/libisoburn/trunk/libisoburn/burn_wrap.c index 7740e41d..600a78b6 100644 --- a/libisoburn/trunk/libisoburn/burn_wrap.c +++ b/libisoburn/trunk/libisoburn/burn_wrap.c @@ -475,12 +475,12 @@ int isoburn_get_fifo_status(struct burn_drive *d, int *size, int *free_bytes, ret= isoburn_find_emulator(&o, d, 0); if(ret<0) return(-1); - if(o==NULL) - return(0); #ifdef Libisoburn_no_fifO + if(o==NULL) + return(-1); if(o->iso_source==NULL) - return(0); + return(-1); ret= iso_ring_buffer_get_status(o->iso_source, &hsize, &hfree_bytes); if(hsize > 1024*1024*1024) *size= 1024*1024*1024; @@ -491,12 +491,16 @@ int isoburn_get_fifo_status(struct burn_drive *d, int *size, int *free_bytes, else *free_bytes= hfree_bytes; *status_text= ""; - if(ret==1) + if(ret==0) + *status_text= "standby"; + else if(ret==1) *status_text= "active"; else if(ret==2) *status_text= "ending"; else if(ret==3) *status_text= "failing"; + else if(ret==4) + *status_text= "unused"; else if(ret==5) *status_text= "abandoned"; else if(ret==6) @@ -504,6 +508,8 @@ int isoburn_get_fifo_status(struct burn_drive *d, int *size, int *free_bytes, else if(ret==7) *status_text= "aborted"; #else + if(o==NULL) + return(0); if(o->fifo==NULL) return(0); ret= burn_fifo_inquire_status(o->fifo, size, free_bytes, status_text); diff --git a/libisoburn/trunk/libisoburn/isoburn.c b/libisoburn/trunk/libisoburn/isoburn.c index 07b7b7b2..cde43354 100644 --- a/libisoburn/trunk/libisoburn/isoburn.c +++ b/libisoburn/trunk/libisoburn/isoburn.c @@ -379,9 +379,33 @@ int isoburn_prepare_disc(struct burn_drive *d, struct burn_disc **disc, } int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc, - struct isoburn_source_opts *opts) + struct isoburn_source_opts *opts, + struct burn_drive *out_drive) { - return isoburn_prepare_disc_aux(d, disc, opts, 1); + int ret; + struct isoburn *in_o, *out_o; + + ret= isoburn_prepare_disc_aux(d, disc, opts, 1); + if (ret<=0) + return ret; + +#ifdef Libisoburn_no_fifO + /* Hand over source reference for optional fifo status inquiry */ + if(out_drive==NULL) + return 1; + ret= isoburn_find_emulator(&out_o, out_drive, 0); + if(ret<0 || out_o==NULL) + return 1; + ret= isoburn_find_emulator(&in_o, d, 0); + if(ret<0 || in_o==NULL) + return 1; /* then without fifo status inquiry */ + if(out_o->iso_source!=NULL) + burn_source_free(out_o->iso_source); + out_o->iso_source= in_o->iso_source; + in_o->iso_source= NULL; +#endif /* Libisoburn_no_fifO */ + + return 1; } diff --git a/libisoburn/trunk/libisoburn/libisoburn.h b/libisoburn/trunk/libisoburn/libisoburn.h index 2bca6aef..2506debc 100644 --- a/libisoburn/trunk/libisoburn/libisoburn.h +++ b/libisoburn/trunk/libisoburn/libisoburn.h @@ -356,10 +356,16 @@ int isoburn_prepare_disc(struct burn_drive *d, struct burn_disc **disc, burn_disc_write(). @param d The source drive, grabbed with isoburn_drive_scan_and_grab(). @param disc Returns the newly created burn_disc object. + @param opts Options for image generation and data transport to media + @param out_drive The libburn drive which shall be write target. + Submit libisoburn drives to later get access to libisofs + source fifo via isoburn_get_fifo_status(). + If that is not desired, then out_drive may be NULL. @return <=0 error , 1 = success */ int isoburn_prepare_new_image(struct burn_drive *d, struct burn_disc **disc, - struct isoburn_source_opts *opts); + struct isoburn_source_opts *opts, + struct burn_drive *out_drive); /** Start writing of the new session. This call is asynchrounous. I.e. it returns quite soon and the progress has @@ -373,6 +379,9 @@ void isoburn_disc_write(struct burn_write_opts *o, struct burn_disc *disc); /** Inquire state and fill parameters of the fifo which is attached to the emerging track. This should be done in the pacifier loop while isoburn_disc_write() or burn_disc_write() are active. + This works only with drives obtained by isoburn_drive_scan_and_grab() + or isoburn_drive_grab(). If isoburn_prepare_new_image() was used, then + parameter out_drive must have announced the track output drive. Hint: If only burn_write_opts and not burn_drive is known, then the drive can be obtained by burn_write_opts_get_drive(). @parm d The drive to which the track with the fifo gets burned. diff --git a/libisoburn/trunk/xorriso/xorriso_timestamp.h b/libisoburn/trunk/xorriso/xorriso_timestamp.h index f92803b3..44925778 100644 --- a/libisoburn/trunk/xorriso/xorriso_timestamp.h +++ b/libisoburn/trunk/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.01.26.142130" +#define Xorriso_timestamP "2008.01.26.171156" diff --git a/libisoburn/trunk/xorriso/xorrisoburn.c b/libisoburn/trunk/xorriso/xorrisoburn.c index bfd301e2..c067c57e 100644 --- a/libisoburn/trunk/xorriso/xorrisoburn.c +++ b/libisoburn/trunk/xorriso/xorrisoburn.c @@ -581,7 +581,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) "on attempt to get source for write", 0); if(ret<=0) goto ex; - ret= isoburn_prepare_new_image(source_drive, &disc, &sopts); + ret= isoburn_prepare_new_image(source_drive, &disc, &sopts, drive); } if (ret <= 0) { Xorriso_process_msg_queues(xorriso,0);