diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/bootstrap b/tags/CdrskinZeroTwoFourPlZeroOne/bootstrap index 86709bfc..a0b64694 100755 --- a/tags/CdrskinZeroTwoFourPlZeroOne/bootstrap +++ b/tags/CdrskinZeroTwoFourPlZeroOne/bootstrap @@ -3,8 +3,5 @@ aclocal libtoolize --copy --force autoconf - -# ts A61101 : libburn is not prepared for config.h -# autoheader - +autoheader automake --foreign --add-missing --copy --include-deps diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/README b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/README index 853c0ff5..9b4e55ef 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/README +++ b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/README @@ -26,12 +26,12 @@ following possible. cdrskin. By Thomas Schmitt Integrated sub project of libburn.pykix.org but also published via: http://scdbackup.sourceforge.net/cdrskin_eng.html -http://scdbackup.sourceforge.net/cdrskin-0.2.5.tar.gz +http://scdbackup.sourceforge.net/cdrskin-0.2.4.tar.gz Copyright (C) 2006 Thomas Schmitt ------------------------------------------------------------------------------ -On top of libburn there is implemented cdrskin 0.2.5, a limited cdrecord +On top of libburn there is implemented cdrskin 0.2.4, a limited cdrecord compatibility wrapper which allows to use some libburn features from the command line. Interested users of cdrecord are invited to participate in the development @@ -59,16 +59,16 @@ systems, including 64 bit systems. (Further reports are welcome.) Compilation, First Glimpse, Installation -Obtain cdrskin-0.2.5.tar.gz , take it to a directory of your choice and do: +Obtain cdrskin-0.2.4.tar.gz , take it to a directory of your choice and do: - tar xzf cdrskin-0.2.5.tar.gz - cd cdrskin-0.2.5 + tar xzf cdrskin-0.2.4.tar.gz + cd cdrskin-0.2.4 Or obtain a libburn.pykix.org SVN snapshot, go into the toplevel directory of the snapshot (e.g. cd libburn_pykix ), and execute the autotools script ./bootstrap . Use autools version >= 1.7 . -Within that toplevel directory of either cdrskin-0.2.5 or libburn then execute: +Within that toplevel directory of either cdrskin-0.2.4 or libburn then execute: ./configure make @@ -86,7 +86,7 @@ In order to surely get a standalone binary, execute cdrskin/compile_cdrskin.sh -Version identification and help texts available afterwards: +Version identification an help texts available afterwards: cdrskin/cdrskin -version cdrskin/cdrskin --help cdrskin/cdrskin -help @@ -181,7 +181,7 @@ See below "Audio CD" for specifications. madplay -o raw:track04.cd /path/to/track4.mp3 mppdec --raw-le /path/to/track5.mpc track05.cd - cdrskin -v dev=0,1,0 blank=fast -eject speed=48 -sao \ + cdrskin dev=0,1,0 blank=fast -eject speed=48 -sao \ -audio -swab track0[1-5].cd /path/to/track6.wav @@ -207,15 +207,10 @@ Run a backup : Restrictions -The convenient burn mode TAO is becoming available with libburn right now. -First experiments have shown good results with a single track. Nevertheless -the possible pitfalls still have to be explored. -Therefore TAO is still defaulted to mode SAO which needs to know the track +The convenient burn mode TAO is not available with libburn yet. +Therefore it has to be defaulted to mode SAO which needs to know the track size in advance. non-cdrecord option tao_to_sao_tsize=650m causes each CD to get burned up to 650 MB regardless of the payload size. -Compile with - cdrskin/compile_cdrskin.sh -experimental -to enable explicit option -tao. (Note that -sao for now is default even then.) No multi session yet ... Please report your wishes. diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/add_ts_changes_to_libburn_0_2_5 b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/add_ts_changes_to_libburn_0_2_5 deleted file mode 100755 index 8e7b0b16..00000000 --- a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/add_ts_changes_to_libburn_0_2_5 +++ /dev/null @@ -1,203 +0,0 @@ -#!/bin/sh - -set -x - -# This script documents how this cdrskin version was derived from -# a vanilla libburn version. It is not intended nor needed for any -# use of cdrskin but included here only to show the technical -# relationship between both projects - which are close friends -# and issue roughly the same software. -# -# Package maintainers are advised to cover rather libburn than -# cdrskin unless they put only emphasis on the cdrecord emulation -# provided by cdrskin. libburn contains cdrskin - cdrskin is an -# oscillating, friendly and coordinated fork of libburn. -# -# Script results are a source tarball and two binaries -# one dynamic and one static in respect to system libs. -# Both binaries are static in respect to libburn. -# -# The script is to be run in the directory above the toplevel -# directory of libburn resp. cdrskin development. -# -# libburn version used: http://libburn.pykix.org -# Downloaded by: -# $ svn co http://libburn-svn.pykix.org/trunk libburn_pykix -# packed up in a tarball just to save it from inadverted changes by -# $ tar czf libburn_svn.tgz libburn_pykix -original="./libburn_svn.tgz" -# Historic moments: -# original="./libburn_svn_A60815.tgz" -# original="./libburn_cdrskin_A60819.tgz" - -# The top level directory in that snapshot is named -intermediate="./libburn_pykix" - -# My changes are in libburn-0.2.3.ts.develop , mainly in ./cdrskin - -changes="./libburn-0.2.3.ts.develop" -skin_rev="0.2.5" - -# The result directory and the name of the result tarballs -target="./cdrskin-${skin_rev}" -cdrskin_tarball="./cdrskin-${skin_rev}.tar.gz" -cdrskin_tarball_svn="./cdrskin-${skin_rev}.svn.tar.gz" - -# (This once earned me an embarrassingly blooping source tarball) -# compile_dir="$changes" - -compile_dir="$target" -compile_cmd="./cdrskin/compile_cdrskin.sh" -compile_static_opts="-static" -compile_result="cdrskin/cdrskin" - -bintarget_dynamic="cdrskin_${skin_rev}-x86-suse9_0" -bintarget_static="$bintarget_dynamic"-static - -if test -d "$changes" -then - dummy=dummy -else - echo "$0 : FATAL : no directory $changes" >&2 - exit 1 -fi - -for i in "$target" "$intermediate" -do - if test -e "$i" - then - echo "$0 : FATAL : already existing $i" >&2 - exit 2 - fi -done - -if test -f "$original" -then - dummy=dummy -else - echo "$0 : FATAL : no file $original" >&2 - exit 3 -fi - - -# Unpack SVN snapshot. -tar xzf "$original" - - -# Rename the directory to the cdrskin name -mv "$intermediate" "$target" - - -# Copy the changes from the development tree -# -cdrskin_dir="$changes"/cdrskin -libburn_dir="$changes"/libburn -cdrskin_target="$target"/cdrskin -libburn_target="$target"/libburn - -# Create version timestamp -timestamp="$(date -u '+%Y.%m.%d.%H%M%S')" -echo "$timestamp" -echo '#define Cdrskin_timestamP "'"$timestamp"'"' >"$cdrskin_dir"/cdrskin_timestamp.h - -# Add the cdrskin files -if test -e "$cdrskin_target" -then - rm -rf "$cdrskin_target" -fi -cp -a "$cdrskin_dir" "$cdrskin_target" - -# Remove copied binaries -rm "$cdrskin_target"/*.o -rm "$cdrskin_target"/cdrfifo -rm "$cdrskin_target"/cdrskin -rm "$cdrskin_target"/cleanup -for i in std new make old -do - if test -e "$cdrskin_target"/cdrskin_"$i" - then - rm "$cdrskin_target"/cdrskin_"$i" - fi -done -for i in .deps .dirstamp .libs -do - if test -e "$cdrskin_target"/"$i" - then - rm -rf "$cdrskin_target"/"$i" - fi -done - -# Remove unwanted SVN stuff (TODO: avoid downloading it) -for i in "$target"/.svn "$target"/*/.svn -do - if test "$i" = "$target"'/*/.svn' - then - dummy=dummy - else - if test -e "$i" - then - rm -rf "$i" - fi - fi -done - -## No more : Add own libburn-README in toplevel -# cp -a "$changes"/README "$target" - -## No more : Add modified Makefile.am -# cp -a "$changes"/Makefile.am "$target" - - -# Make SVN state tarball for the libburn team -tar czf "$cdrskin_tarball_svn" "$target" - - -# Get over dependecy on autotools. Rely only on cc, make et. al. -# This is not the same as "make dist" but i can do it without -# having to evaluate the quality of said "make dist" -# -( cd "$target" ; ./bootstrap ) - -# Remove unwanted stuff after bootstrap -for i in "$target"/autom4te.cache -do - if echo "$i" | grep '\*' >/dev/null - then - dummy=dummy - else - if test -e "$i" - then - rm -rf "$i" - fi - fi -done - - -# Pack it up to the new libburn+cdrskin-tarball -tar czf "$cdrskin_tarball" "$target" - -# Produce a static and a dynamic binary -( - cd "$compile_dir" || exit 1 - ./configure - make - $compile_cmd -do_strip - cp "$compile_result" "../$bintarget_dynamic" - if test -n "$compile_static_opts" - then - $compile_cmd $compile_static_opts -do_strip - cp "$compile_result" "../$bintarget_static" - fi -) - -# Remove the build area -# Disable this for debugging the merge process -rm -rf "$target" - -# Show the result -./"$bintarget_dynamic" -version -./"$bintarget_static" -version -ls -l "$cdrskin_tarball" -ls -l "$bintarget_dynamic" -ls -l "$bintarget_static" - diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/cdrskin.c b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/cdrskin.c index efb88b0e..495ef5cd 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/cdrskin.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/cdrskin.c @@ -123,7 +123,7 @@ or /** The official program version */ #ifndef Cdrskin_prog_versioN -#define Cdrskin_prog_versioN "0.2.5" +#define Cdrskin_prog_versioN "0.2.4" #endif /** The source code release timestamp */ @@ -169,7 +169,6 @@ or #define Cdrskin_libburn_has_convert_scsi_adR 1 #define Cdrskin_libburn_has_burn_msgS 1 #define Cdrskin_libburn_has_burn_aborT 1 -#define Cdrskin_libburn_has_cleanup_handleR 1 #define Cdrskin_libburn_has_audioxtR 1 #define Cdrskin_libburn_has_get_start_end_lbA 1 #define Cdrskin_libburn_has_burn_disc_unsuitablE 1 @@ -193,7 +192,7 @@ or #ifdef Cdrskin_new_api_tesT /* put macros under test caveat here */ -#define Cdrskin_allow_libburn_taO 1 +#define Cdrskin_libburn_has_cleanup_handleR 1 #endif @@ -206,6 +205,14 @@ or #endif /* Cdrskin_libburn_from_pykix_svN */ +#ifndef _LARGEFILE_SOURCE +#define _LARGEFILE_SOURCE 1 +#endif +#ifndef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 64 +#endif + + /* These macros activate cdrskin workarounds for deficiencies resp. problematic features of libburn which hopefully will change in future. */ @@ -271,6 +278,7 @@ or #include #include +/* #include */ #include "../libburn/libburn.h" #ifdef Cdrskin_libburn_has_audioxtR @@ -890,33 +898,11 @@ int Cdrtrack_set_track_type(struct CdrtracK *o, int track_type, int flag) } -/** - @param flag Bitfield for control purposes: - bit0= size returns number of actually processed source bytes - rather than the predicted fixed_size (if available). - padding returns the difference from number of written - bytes. -*/ int Cdrtrack_get_size(struct CdrtracK *track, double *size, double *padding, double *sector_size, int flag) { - *size= track->fixed_size; *padding= track->padding; -#ifdef Cdrskin_allow_libburn_taO - if((flag&1) && track->libburn_track!=NULL) { - off_t readcounter= 0,writecounter= 0; - - burn_track_get_counters(track->libburn_track,&readcounter,&writecounter); - *size= readcounter; - *padding= writecounter-readcounter; -/* - fprintf(stderr,"cdrskin_debug: sizeof(off_t)=%d\n", - sizeof(off_t)); -*/ - } - -#endif *sector_size= track->sector_size; return(1); } @@ -1008,7 +994,7 @@ ex: */ int Cdrtrack_open_source_path(struct CdrtracK *track, int *fd, int flag) { - int is_wav= 0, size_from_file= 0; + int is_wav= 0; off_t xtr_size= 0; if(track->source_path[0]=='-' && track->source_path[1]==0) @@ -1040,21 +1026,10 @@ int Cdrtrack_open_source_path(struct CdrtracK *track, int *fd, int flag) if(fstat(*fd,&stbuf)!=-1) track->fixed_size= stbuf.st_size; } - size_from_file= 1; } } -#ifdef Cdrskin_allow_libburn_taO - - if(track->fixed_size < Cdrtrack_minimum_sizE * track->sector_size - && (track->fixed_size>0 || size_from_file)) { - -#else - if(track->fixed_size < Cdrtrack_minimum_sizE * track->sector_size) { - -#endif - if(track->track_type == BURN_AUDIO) { /* >>> cdrecord: We differ in automatic padding with audio: Audio tracks must be at least 705600 bytes and a multiple of 2352. @@ -1068,7 +1043,7 @@ int Cdrtrack_open_source_path(struct CdrtracK *track, int *fd, int flag) "cdrskin: NOTE : Enforcing minimum track size of %.f bytes\n", Cdrtrack_minimum_sizE*track->sector_size); track->fixed_size= Cdrtrack_minimum_sizE*track->sector_size; - } + } } track->source_fd= *fd; return(*fd>=0); @@ -2315,8 +2290,7 @@ struct CdrskiN { /** Progress state info: wether libburn is actually processing payload data */ int is_writing; - /** Previously detected drive state */ - enum burn_drive_status previous_drive_status; + /** abort parameters */ int abort_max_wait; @@ -2399,7 +2373,6 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag) o->n_drives= 0; o->driveno= 0; o->is_writing= 0; - o->previous_drive_status = BURN_DRIVE_IDLE; o->abort_max_wait= 74*60; o->lib_is_initialized= (flag&1); o->control_pid= getpid(); @@ -2576,6 +2549,11 @@ int Cdrskin_reinit_lib_with_adr(struct CdrskiN *skin, int flag) { int ret; + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr, + "cdrskin_debug: Restarting libburn. flag= %d driveno= %d grabbed= %d \n", + flag,skin->driveno,skin->drive_is_grabbed)); + if(skin->drive_is_grabbed) Cdrskin_release_drive(skin,0); if(flag&1) @@ -2586,19 +2564,42 @@ int Cdrskin_reinit_lib_with_adr(struct CdrskiN *skin, int flag) "cdrskin: FATAL : unable to determine persistent drive address\n"); ret= 0; goto ex; } + +/* >>> A60827: this causes a SIGSEGV when releasing the re-initialized drive + skin->drives[skin->driveno].drive after burn (then as + skin->grabbed_drive, but already being 0xb0 in Cdrskin_grab) ) + +*/ burn_drive_info_free(skin->drives); + + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr,"cdrskin_debug: Finishing libburn.\n")); + burn_finish(); + + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr,"cdrskin_debug: Initializing libburn.\n")); + if(!burn_initialize()) { fflush(stdout); fprintf(stderr,"cdrskin : FATAL : Re-initialization of libburn failed\n"); {ret= -1; goto ex;} } + + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr,"cdrskin_debug: Grabbing drive.\n")); + ret= Cdrskin_grab_drive(skin,1|(flag&2));/* uses burn_drive_scan_and_grab() */ if(ret<=0) {ret=0; goto ex;} ret= 1; ex: + + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr,"cdrskin_debug: Restarting of libburn done. ret= %d\n", + ret)); + return(ret); } @@ -2651,15 +2652,28 @@ int Cdrskin_grab_drive(struct CdrskiN *skin, int flag) restore_handler= 1; } +#else + + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr, + "cdrskin_debug: Trusting in abortability of grabbing process\n")); + #endif /* ! Cdrskin_grab_abort_brokeN */ #ifndef Cdrskin_oldfashioned_api_usE if(flag&1) { + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr, + "cdrskin_debug: Cdrskin_grab_drive() from shutdown libburn\n")); + ret= burn_drive_scan_and_grab(&(skin->drives),skin->preskin->device_adr, !(flag&2)); if(ret<=0) { + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr, + "cdrskin_debug: burn_drive_scan_and_grab ret=%d\n",ret)); if(!(flag&4)) fprintf(stderr,"cdrskin: FATAL : unable to open drive '%s'\n", skin->preskin->device_adr); @@ -2669,6 +2683,9 @@ int Cdrskin_grab_drive(struct CdrskiN *skin, int flag) drive= skin->drives[skin->driveno].drive; skin->grabbed_drive= drive; } else { + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr, + "cdrskin_debug: Cdrskin_grab_drive() on active libburn\n")); if(strlen(skin->preskin->device_adr)<=0) { #define Cdrskin_drop_drives_by_forgeT 1 @@ -2731,6 +2748,10 @@ int Cdrskin_grab_drive(struct CdrskiN *skin, int flag) skin->driveno); goto ex; } +#else + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr, + "cdrskin_debug: Trusting in burn_disc_erasable() after first grab\n")); #endif /* ! Cdrskin_is_erasable_on_load_is_brokeN */ } @@ -3544,9 +3565,8 @@ int Cdrskin_wait_before_action(struct CdrskiN *skin, int flag) else sprintf(speed_text,"%.f",skin->x_speed); printf( - "Starting to write CD/DVD at speed %s in %s %s mode for single session.\n", - speed_text,(skin->dummy_mode?"dummy":"real"), - (flag&1?"BLANK":skin->write_mode_name)); + "Starting to write CD/DVD at speed %s in real %s mode for single session.\n", + speed_text,(flag&1?"BLANK":skin->write_mode_name)); printf("Last chance to quit, starting real write in %3d seconds.", skin->gracetime); fflush(stdout); @@ -3559,7 +3579,7 @@ int Cdrskin_wait_before_action(struct CdrskiN *skin, int flag) } } if(skin->verbosity>=Cdrskin_verbose_progresS) - {printf(" Operation starts.\n");fflush(stdout);} + printf(" Operation starts.\n"); return(1); } @@ -3629,25 +3649,19 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag) start_time= Sfile_microtime(0); while(burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) { if(loop_counter>0) - if(skin->verbosity>=Cdrskin_verbose_progresS) { - int percent= 50; - - if(p.sectors>0) /* i want a display of 1 to 99 percent */ - percent= 1.0+((double) p.sector+1.0)/((double) p.sectors)*98.0; + if(skin->verbosity>=Cdrskin_verbose_progresS) fprintf(stderr, - "\rcdrskin: blanking ( done %2d%% , %lu seconds elapsed ) ", - percent,(unsigned long) (Sfile_microtime(0)-start_time)); - } - sleep(1); + "\rcdrskin: blanking sector %d (%lu seconds elapsed) ", + p.sector,(unsigned long) (Sfile_microtime(0)-start_time)); + sleep(2); loop_counter++; } blanking_done:; skin->drive_is_busy= 0; if(skin->verbosity>=Cdrskin_verbose_progresS) { - fprintf(stderr, - "\rcdrskin: blanking done \n"); + fprintf(stderr,"\n"); printf("Blanking time: %.3fs\n",Sfile_microtime(0)-start_time); - fflush(stdout); + fprintf(stderr,"cdrskin: blanking done\n"); } Cdrskin_release_drive(skin,0); return(1); @@ -3694,50 +3708,30 @@ int Cdrskin_burn_pacifier(struct CdrskiN *skin, current_time= Sfile_microtime(0); elapsed_total_time= current_time-start_time; elapsed_time= current_time-*last_time; - time_to_tell= (elapsed_time>=1.0)&&(elapsed_total_time>=1.0); + time_to_tell= (elapsed_time>=1.0); if(drive_status==BURN_DRIVE_WRITING) { ; - } else if(drive_status==BURN_DRIVE_WRITING_LEADIN - -#ifdef Cdrskin_allow_libburn_taO - || drive_status==BURN_DRIVE_WRITING_PREGAP -#endif - - ) { + } else if(drive_status==BURN_DRIVE_WRITING_LEADIN) { if(time_to_tell || skin->is_writing) { if(skin->verbosity>=Cdrskin_verbose_progresS) { if(skin->is_writing) fprintf(stderr,"\n"); fprintf(stderr, - "\rcdrskin: working pre-track (burning since %.f seconds) ", + "\rcdrskin: writing lead-in since %.f seconds ", elapsed_total_time); } skin->is_writing= 0; advance_interval= 1; } {ret= 2; goto ex;} - } else if(drive_status==BURN_DRIVE_WRITING_LEADOUT - -#ifdef Cdrskin_allow_libburn_taO - || drive_status==BURN_DRIVE_CLOSING_TRACK - || drive_status==BURN_DRIVE_CLOSING_SESSION -#endif - - ) { - -#ifdef Cdrskin_allow_libburn_taO - if(drive_status==BURN_DRIVE_CLOSING_SESSION && - skin->previous_drive_status!=drive_status) - {printf("\nFixating...\n"); fflush(stdout);} -#endif - + } else if(drive_status==BURN_DRIVE_WRITING_LEADOUT) { if(time_to_tell || skin->is_writing) { if(skin->verbosity>=Cdrskin_verbose_progresS) { if(skin->is_writing) fprintf(stderr,"\n"); fprintf(stderr, - "\rcdrskin: working post-track (burning since %.f seconds) ", + "\rcdrskin: writing lead-out after %.f seconds ", elapsed_total_time); } skin->is_writing= 0; @@ -3763,12 +3757,12 @@ int Cdrskin_burn_pacifier(struct CdrskiN *skin, if(old_track_idx>=0 && old_track_idxsupposed_track_idx) { Cdrtrack_get_size(skin->tracklist[old_track_idx],&fixed_size,&padding, - §or_size,1); + §or_size,0); if(skin->verbosity>=Cdrskin_verbose_progresS) printf("\n"); printf("%sTrack %-2.2d: Total bytes read/written: %.f/%.f (%.f sectors).\n", - debug_mark,old_track_idx+1,fixed_size,fixed_size+padding, - (fixed_size+padding)/sector_size); + debug_mark,old_track_idx+1,fixed_size,fixed_size, + fixed_size/sector_size); } sector_size= 2048.0; @@ -3783,7 +3777,7 @@ int Cdrskin_burn_pacifier(struct CdrskiN *skin, if(written_total_bytes<1024*1024) { thank_you_for_patience:; - if(time_to_tell || (skin->is_writing && elapsed_total_time>=1.0)) { + if(time_to_tell || skin->is_writing) { if(skin->verbosity>=Cdrskin_verbose_progresS) { if(skin->is_writing) fprintf(stderr,"\n"); @@ -3791,9 +3785,9 @@ thank_you_for_patience:; "\rcdrskin: thank you for being patient since %.f seconds ", elapsed_total_time); } + skin->is_writing= 0; advance_interval= 1; } - skin->is_writing= 0; {ret= 2; goto ex;} } new_mb= written_total_bytes/(1024*1024); @@ -3948,7 +3942,6 @@ ex:; *total_count= *last_count; *last_time= current_time; } - skin->previous_drive_status= drive_status; return(ret); } @@ -3970,7 +3963,6 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag) double put_counter,get_counter,empty_counter,full_counter; double start_time,last_time; double total_count= 0.0,last_count= 0.0,size,padding,sector_size= 2048.0; - double sectors; printf("cdrskin: beginning to burn disk\n"); @@ -3993,8 +3985,7 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag) return(0); } Cdrtrack_get_size(skin->tracklist[i],&size,&padding,§or_size,0); - if(size>0) - skin->fixed_size+= size+padding; + skin->fixed_size+= size+padding; } ret= Cdrskin_grab_drive(skin,0); @@ -4050,11 +4041,8 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag) frac= (seconds-min*60-sec)*100; if(frac>99) frac= 99; - sectors= (int) (skin->fixed_size/sector_size); - if(sectors*sector_size != skin->fixed_size) - sectors++; printf("Total size: %5d MB (%-2.2d:%-2.2d.%-2.2d) = %d sectors\n", - mb,min,sec,frac,(int) sectors); + mb,min,sec,frac,(int) (skin->fixed_size/sector_size)); seconds+= 2; min= seconds/60.0; sec= seconds-min*60; @@ -4062,7 +4050,7 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag) if(frac>99) frac= 99; printf("Lout start: %5d MB (%-2.2d:%-2.2d/%-2.2d) = %d sectors\n", - mb,min,sec,frac,(int) sectors); + mb,min,sec,frac,(int) (skin->fixed_size/sector_size)); } } @@ -4173,14 +4161,14 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag) skin->drive_is_busy= 0; if(skin->verbosity>=Cdrskin_verbose_progresS) printf("\n"); - if(max_track<0) { + if(max_track<=0) { printf("Track 01: Total bytes read/written: %.f/%.f (%.f sectors).\n", total_count,total_count,total_count/sector_size); } else { - Cdrtrack_get_size(skin->tracklist[max_track],&size,&padding,§or_size,1); + Cdrtrack_get_size(skin->tracklist[max_track],&size,&padding,§or_size,0); printf( "Track %-2.2d: Total bytes read/written: %.f/%.f (%.f sectors).\n", - max_track+1,size,size+padding,(size+padding)/sector_size); + max_track+1,size,size,size/sector_size); } if(skin->verbosity>=Cdrskin_verbose_progresS) printf("Writing time: %.3fs\n",Sfile_microtime(0)-start_time); @@ -4294,7 +4282,11 @@ int Cdrskin_eject(struct CdrskiN *skin, int flag) } if(ret>0) { ret= Cdrskin_release_drive(skin,1); - if(ret<=0) + if(ret>0) { + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr, + "cdrskin_debug: supposing drive eject to have worked\n")); + } else goto sorry_failed_to_eject; } else { sorry_failed_to_eject:; @@ -4309,6 +4301,9 @@ sorry_failed_to_eject:; return(1); if(Cdrskin_grab_drive(skin,2)>0) { Cdrskin_release_drive(skin,1); + if(skin->verbosity>=Cdrskin_verbose_debuG) + ClN(fprintf(stderr, + "cdrskin_debug: supposing drive eject to have worked\n")); } else { fprintf(stderr,"cdrskin: SORRY : Failed to finally eject tray.\n"); return(0); @@ -4615,12 +4610,7 @@ set_driveropts:; } strcpy(skin->eject_device,argv[i]+13); if(skin->verbosity>=Cdrskin_verbose_cmD) -#ifdef Cdrskin_burn_drive_eject_brokeN printf("cdrskin: eject_device : %s\n",skin->eject_device); -#else - printf("cdrskin: ignoring obsolete eject_device=%s\n", - skin->eject_device); -#endif #ifndef Cdrskin_extra_leaN @@ -4738,11 +4728,7 @@ set_padsize:; printf("cdrskin: write type : RAW/RAW96R\n"); } else if(strcmp(argv[i],"-sao")==0 || strcmp(argv[i],"-dao")==0) { - -#ifndef Cdrskin_allow_libburn_taO set_sao:; -#endif - strcpy(skin->write_mode_name,"SAO"); skin->write_type= BURN_WRITE_SAO; skin->block_type= BURN_BLOCK_SAO; @@ -4779,17 +4765,6 @@ set_speed:; skin->swap_audio_bytes= 0; } else if(strcmp(argv[i],"-tao")==0) { - -#ifdef Cdrskin_allow_libburn_taO - - strcpy(skin->write_mode_name,"TAO"); - skin->write_type= BURN_WRITE_TAO; - skin->block_type= BURN_BLOCK_MODE1; - if(skin->verbosity>=Cdrskin_verbose_cmD) - printf("cdrskin: write type : TAO\n"); - -#else /* Cdrskin_allow_libburn_taO */ - if(skin->tao_to_sao_tsize<=0.0) { fprintf(stderr,"cdrskin: FATAL : libburn does not support -tao yet.\n"); fprintf(stderr,"cdrskin: HINT : Try option tao_to_sao_tsize=650m\n"); @@ -4798,18 +4773,12 @@ set_speed:; printf("cdrskin: NOTE : substituting mode -tao by mode -sao\n"); goto set_sao; -#endif /* ! Cdrskin_allow_libburn_taO */ - } else if(strncmp(argv[i],"tao_to_sao_tsize=",17)==0) { skin->tao_to_sao_tsize= Scanf_io_size(argv[i]+17,0); if(skin->tao_to_sao_tsize>Cdrskin_tracksize_maX) goto track_too_large; if(skin->verbosity>=Cdrskin_verbose_cmD) -#ifdef Cdrskin_allow_libburn_taO - printf("cdrskin: size default for non-tao write modes: %.f\n", -#else printf("cdrskin: replace -tao by -sao with fixed size : %.f\n", -#endif skin->tao_to_sao_tsize); } else if(strcmp(argv[i],"-toc")==0) { @@ -4853,19 +4822,16 @@ track_too_large:; return(0); } skin->stdin_source_used= 1; - if(skin->fixed_size<=0.0) { - if(skin->write_type==BURN_WRITE_TAO) { - /* with TAO it is ok to have an undefined track length */; - } else if(skin->tao_to_sao_tsize>0.0) { - skin->fixed_size= skin->tao_to_sao_tsize; - printf( + if(skin->write_type!=BURN_WRITE_TAO && + skin->fixed_size<=0.0 && skin->tao_to_sao_tsize>0.0) { + skin->fixed_size= skin->tao_to_sao_tsize; + printf( "cdrskin: NOTE : augmenting non-tao write mode by tao_to_sao_tsize\n"); - printf("cdrskin: NOTE : fixed size : %.f\n",skin->fixed_size); - } else { - fprintf(stderr, + printf("cdrskin: NOTE : fixed size : %.f\n",skin->fixed_size); + } else if(skin->fixed_size<=0) { + fprintf(stderr, "cdrskin: FATAL : \"-\" (stdin) needs a fixed tsize= or tao_to_sao_tsize=\n"); - return(0); - } + return(0); } } else if(skin->preskin->allow_fd_source==0 && argv[i][0]=='#' && (argv[i][1]>='0' && argv[i][1]<='9')) { diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/cdrskin_timestamp.h b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/cdrskin_timestamp.h index 95309515..b18dbaaf 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/cdrskin_timestamp.h +++ b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2006.11.04.092909" +#define Cdrskin_timestamP "2006.10.28.132532" diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/changelog.txt b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/changelog.txt index ca5ca0d4..822a760e 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/changelog.txt +++ b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/changelog.txt @@ -1178,7 +1178,7 @@ Announced full -audio compatibility with cdrecord ------------------------------------ cycled - cdrskin-0.2.3 - 2006.10.25.160540 -2006.10.27.114326 [319] + [] - cdrskin/add_ts_changes_to_libburn_0_2_3 + cdrskin/add_ts_changes_to_libburn_0_2_4 cdrskin/README @@ -1186,17 +1186,11 @@ cdrskin/cdrskin.c cdrskin/cdrskin_eng.html cdrskin/changelog.txt README -Performed cdrskin version leap to cdrskin-0.2.4 +Preparing cdrskin version leap to cdrskin-0.2.4 (To be committed to branch) -2006.10.28.093922 [320] -cdrskin/cdrskin_timestamp.h -Set final timestamp 2006.10.28.093922 - - ------------------------------------- cycled - cdrskin-0.2.4 - 2006.10.28.093922 - +------------------------------------ cycle - cdrskin-0.2.5 [] - cdrskin/add_ts_changes_to_libburn_0_2_3 @@ -1211,11 +1205,8 @@ Prepare cdrskin version leap to cdrskin-0.2.5 (To be committed to trunk) ------------------------------------- cycled - cdrskin-0.2.5 -2006 [] -(k3b_on_cdrskin.html) 2006 [] -reset: ioctl(fd,CDROMRESET) ioctl(fd,SG_SCSI_RESET,SG_SCSI_RESET_DEVICE) diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/compile_cdrskin.sh b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/compile_cdrskin.sh index e82e807a..adae1fba 100755 --- a/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/compile_cdrskin.sh +++ b/tags/CdrskinZeroTwoFourPlZeroOne/cdrskin/compile_cdrskin.sh @@ -6,7 +6,6 @@ debug_opts= def_opts= -largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1" libvers="-DCdrskin_libburn_0_2_3" cleanup_src_or_obj="libburn/cleanup.o" libdax_msgs_o="libburn/libdax_msgs.o" @@ -51,9 +50,6 @@ do elif test "$i" = "-oldfashioned" then def_opts="$def_opts -DCdrskin_oldfashioned_api_usE" - elif test "$i" = "-no_largefile" - then - largefile_opts= elif test "$i" = "-do_not_compile_cdrskin" then compile_cdrskin=0 @@ -80,7 +76,6 @@ do echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006." echo " -libburn_0_2_2 set macro to match libburn-0.2.2." echo " -libburn_0_2_3 set macro to match current libburn-SVN." - echo " -no_largefile do not use 64 bit off_t (must match libburn)." echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin." echo " -experimental use newly introduced libburn features." echo " -oldfashioned use pre-0.2.2 libburn features only." @@ -104,14 +99,7 @@ echo "Build timestamp : $timestamp" if test "$compile_cdrskin" then echo "compiling program cdrskin/cdrskin.c $static_opts $debug_opts $libvers $def_opts $cleanup_src_or_obj" - cc -I. \ - $warn_opts \ - $static_opts \ - $debug_opts \ - $libvers \ - $largefile_opts \ - $def_opts \ - \ + cc $warn_opts -I. $static_opts $debug_opts $libvers $def_opts \ -DCdrskin_build_timestamP='"'"$timestamp"'"' \ \ -o cdrskin/cdrskin \ diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/configure.ac b/tags/CdrskinZeroTwoFourPlZeroOne/configure.ac index 29113ddb..d7784f8f 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/configure.ac +++ b/tags/CdrskinZeroTwoFourPlZeroOne/configure.ac @@ -7,11 +7,7 @@ AC_CANONICAL_TARGET AM_INIT_AUTOMAKE([subdir-objects]) -dnl A61101 This breaks Linux build (makes 32 bit off_t) -dnl http://sourceware.org/autobook/autobook/autobook_96.html says -dnl one must include some config.h and this was a pitfall. -dnl So why dig the pit at all ? -dnl AM_CONFIG_HEADER(config.h) +AM_CONFIG_HEADER(config.h) dnl Making releases: dnl BURN_MICRO_VERSION += 1; diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/libburn.h b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/libburn.h index e90dfd57..981a8ee3 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/libburn.h +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/libburn.h @@ -7,7 +7,6 @@ expressing a file or stream size. XXX we should enforce 64-bitness for off_t - ts A61101 : this is usually done by the build system (if it is not broken) */ #include @@ -217,16 +216,7 @@ enum burn_drive_status /** The drive is erasing a disc */ BURN_DRIVE_ERASING, /** The drive is being grabbed */ - BURN_DRIVE_GRABBING, - - /* ts A61102 */ - /** The drive gets written zeroes before the track payload data */ - BURN_DRIVE_WRITING_PREGAP, - /** The drive is told to close a track (TAO only) */ - BURN_DRIVE_CLOSING_TRACK, - /** The drive is told to close a session (TAO only) */ - BURN_DRIVE_CLOSING_SESSION - + BURN_DRIVE_GRABBING }; /** Information about a track on a disc - this is from the q sub channel of the @@ -927,19 +917,10 @@ struct burn_source *burn_file_source_new(const char *path, */ struct burn_source *burn_fd_source_new(int datafd, int subfd, off_t size); -/** Tells how long a track will be on disc - >>> NOTE: Not reliable with tracks of undefined length -*/ +/** Tells how long a track will be on disc */ int burn_track_get_sectors(struct burn_track *); -/* ts A61101 */ -/** Tells how many source bytes have been read and how many data bytes have - been written by the track during burn */ -int burn_track_get_counters(struct burn_track *t, - off_t *read_bytes, off_t *written_bytes); - - /** Sets drive read and write speed @param d The drive to set speed for @param read Read speed in k/s (0 is max) diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/libdax_msgs.h b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/libdax_msgs.h index f17a97e6..1578ef50 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/libdax_msgs.h +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/libdax_msgs.h @@ -303,7 +303,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff 0x00020006 (FATAL,HIGH) = Too many scsi siblings 0x00020007 (NOTE,HIGH) = Closed O_EXCL scsi siblings - General library operations: + From the hunt on Assert: 0x00020101 (WARNING,HIGH) = Cannot find given worker item 0x00020102 (SORRY,HIGH) = A drive operation is still going on @@ -320,7 +320,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff 0x0002010c (FATAL,HIGH) = Failed to transfer command to drive 0x0002010d (DEBUG,HIGH) = Could not inquire TOC 0x0002010e (FATAL,HIGH) = Attempt to read ATIP from ungrabbed drive - 0x0002010f (DEBUG,HIGH) = SCSI error condition on command + 0x0002010f 0x00020110 (FATAL,HIGH) = Persistent drive address too long 0x00020111 (FATAL,HIGH) = Could not allocate new auxiliary object 0x00020112 (SORRY,HIGH) = Bad combination of write_type and block_type @@ -329,9 +329,6 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff 0x00020115 (SORRY,HIGH) = Attempt to set track mode to unusable value 0x00020116 (FATAL,HIGH) = Track mode has unusable value 0x00020117 (FATAL,HIGH) = toc_entry of drive is already in use - 0x00020118 (DEBUG,HIGH) = Closing track - 0x00020119 (DEBUG,HIGH) = Closing session - 0x0002011a (NOTE,HIGH) = Padding up track to minimum size libdax_audioxtr: 0x00020200 (SORRY,HIGH) = Cannot open audio source file diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/mmc.c b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/mmc.c index eec4f70d..d3bd5f26 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/mmc.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/mmc.c @@ -20,15 +20,6 @@ #include "structure.h" #include "options.h" - -#ifdef Libburn_log_in_and_out_streaM -/* <<< ts A61031 */ -#include -#include -#include -#endif /* Libburn_log_in_and_out_streaM */ - - /* ts A61005 */ #include "libdax_msgs.h" extern struct libdax_msgs *libdax_messenger; @@ -167,13 +158,14 @@ void mmc_close(struct burn_drive *d, int session, int track) mmc_function_spy("mmc_close"); + libdax_msgs_submit(libdax_messenger, -1, 0x00000002, + LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO, + "HOW THAT ? mmc_close() was called", 0, 0); + c.retry = 1; c.oplen = sizeof(MMC_CLOSE); memcpy(c.opcode, MMC_CLOSE, sizeof(MMC_CLOSE)); - - /* ts A61030 : shifted !!session rather than or-ing plain session */ - c.opcode[2] = ((!!session)<<1) | !!track; - + c.opcode[2] = session | !!track; c.opcode[4] = track >> 8; c.opcode[5] = track & 0xFF; c.page = NULL; @@ -238,14 +230,6 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf) struct command c; int len; -#ifdef Libburn_log_in_and_out_streaM - /* <<< ts A61031 */ - static int tee_fd= -1; - if(tee_fd==-1) - tee_fd= open("/tmp/libburn_sg_written", - O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR); -#endif /* Libburn_log_in_and_out_streaM */ - mmc_function_spy("mmc_write"); pthread_mutex_lock(&d->access_lock); cancelled = d->cancel; @@ -277,12 +261,7 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf) burn_print(12, "%d, %d, %d, %d\n", c->opcode[6], c->opcode[7], c->opcode[8], c->opcode[9]); */ -#ifdef Libburn_log_in_and_out_streaM - /* <<< ts A61031 */ - if(tee_fd!=-1) { - write(tee_fd,c.page->data,len*2048); - } -#endif /* Libburn_log_in_and_out_streaM */ +/* write(fileno(stderr), c.page->data, c.page->bytes);*/ d->issue_command(d, &c); return 0; @@ -845,7 +824,6 @@ int mmc_setup_drive(struct burn_drive *d) d->get_nwa = mmc_get_nwa; d->close_disc = mmc_close_disc; d->close_session = mmc_close_session; - d->close_track_session = mmc_close; d->read_buffer_capacity = mmc_read_buffer_capacity; /* ts A61020 */ diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sector.c b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sector.c index 4920c013..43d2415c 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sector.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sector.c @@ -19,15 +19,6 @@ #include "toc.h" #include "write.h" - -#ifdef Libburn_log_in_and_out_streaM -/* <<< ts A61031 */ -#include -#include -#include -#endif /* Libburn_log_in_and_out_streaM */ - - /*static unsigned char isrc[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";*/ #define sector_common(X) d->alba++; d->rlba X; @@ -53,8 +44,7 @@ static void uncook_subs(unsigned char *dest, unsigned char *source) int sector_get_outmode(enum burn_write_types write_type, enum burn_block_types block_type) { - /* ts A61103 : extended SAO condition to TAO */ - if (write_type == BURN_WRITE_SAO || write_type == BURN_WRITE_TAO) + if (write_type == BURN_WRITE_SAO) return 0; else switch (block_type) { @@ -91,15 +81,6 @@ static void get_bytes(struct burn_track *track, int count, unsigned char *data) { int valid, shortage, curr, i, tr; -#ifdef Libburn_log_in_and_out_streaM - /* <<< ts A61031 */ - static int tee_fd= -1; - if(tee_fd==-1) - tee_fd= open("/tmp/libburn_sg_readin", - O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR); -#endif /* Libburn_log_in_and_out_streaM */ - - /* no track pointer means we're just generating 0s */ if (!track) { memset(data, 0, count); @@ -126,18 +107,10 @@ static void get_bytes(struct burn_track *track, int count, unsigned char *data) valid = track->source->read(track->source, data + curr, count - curr); } else valid = 0; - if (valid <= 0) { /* ts A61031 : extended from (valid == -1) */ + if (valid == -1) { track->eos = 1; valid = 0; } - track->sourcecount += valid; - -#ifdef Libburn_log_in_and_out_streaM - /* <<< ts A61031 */ - if(tee_fd!=-1 && valid>0) { - write(tee_fd, data + curr, valid); - } -#endif /* Libburn_log_in_and_out_streaM */ curr += valid; shortage = count - curr; @@ -161,12 +134,6 @@ static void get_bytes(struct burn_track *track, int count, unsigned char *data) if (!shortage) goto ex; - /* ts A61031 */ - if (shortage >= count) - track->track_data_done = 1; - if (track->open_ended) - goto ex; - /* If we're still short, and there's a "next" pointer, we pull from that. if that depletes, we'll just fill with 0s. */ @@ -185,6 +152,15 @@ ex:; if(shortage) memset(data + curr, 0, shortage); /* this is old icculus.org */ if (track->swap_source_bytes == 1) { + +/* +{ static int swapping_count= 0; + fprintf(stderr,"\rlibburn_debug: swapping #%d \r", + swapping_count); + swapping_count++; +} +*/ + for (i = 1; i < count; i += 2) { tr = data[i]; data[i] = data[i-1]; @@ -195,9 +171,7 @@ ex:; /* ts A61009 : seems to hand out sector start pointer in opts->drive->buffer and to count hand outs as well as reserved bytes */ -/* ts A61101 : added parameter track for counting written bytes */ -static unsigned char *get_sector(struct burn_write_opts *opts, - struct burn_track *track, int inmode) +static unsigned char *get_sector(struct burn_write_opts *opts, int inmode) { struct burn_drive *d = opts->drive; struct buffer *out = d->buffer; @@ -222,13 +196,6 @@ static unsigned char *get_sector(struct burn_write_opts *opts, err = d->write(d, d->nwa, out); if (err == BE_CANCELLED) return NULL; - - /* ts A61101 */ - if(track != NULL) { - track->writecount += out->bytes; - track->written_sectors += out->sectors; - } - d->nwa += out->sectors; out->bytes = 0; out->sectors = 0; @@ -241,32 +208,6 @@ static unsigned char *get_sector(struct burn_write_opts *opts, return ret; } -/* ts A61031 */ -/* Revoke the counting of the most recent sector handed out by get_sector() */ -static void unget_sector(struct burn_write_opts *opts, int inmode) -{ - struct burn_drive *d = opts->drive; - struct buffer *out = d->buffer; - int outmode; - int seclen; - - outmode = get_outmode(opts); - if (outmode == 0) - outmode = inmode; - - /* ts A61009 : react on eventual failure of burn_sector_length() - (should not happen if API tested properly). - Ensures out->bytes >= out->sectors */ - seclen = burn_sector_length(outmode); - if (seclen <= 0) - return; - seclen += burn_subcode_length(outmode); - - out->bytes -= seclen; - out->sectors--; -} - - /* either inmode == outmode, or outmode == raw. anything else is bad news */ /* ts A61010 : changed type to int in order to propagate said bad news */ /** @return 1 is ok, <= 0 is failure */ @@ -394,7 +335,7 @@ int sector_toc(struct burn_write_opts *o, int mode) unsigned char *data; unsigned char subs[96]; - data = get_sector(o, NULL, mode); + data = get_sector(o, mode); if (data == NULL) return 0; /* ts A61010 */ @@ -414,7 +355,7 @@ int sector_pregap(struct burn_write_opts *o, unsigned char *data; unsigned char subs[96]; - data = get_sector(o, NULL, mode); + data = get_sector(o, mode); if (data == NULL) return 0; /* ts A61010 */ @@ -434,7 +375,7 @@ int sector_postgap(struct burn_write_opts *o, unsigned char subs[96]; unsigned char *data; - data = get_sector(o, NULL, mode); + data = get_sector(o, mode); if (data == NULL) return 0; /* ts A61010 */ @@ -606,7 +547,7 @@ int sector_lout(struct burn_write_opts *o, unsigned char control, int mode) unsigned char subs[96]; unsigned char *data; - data = get_sector(o, NULL, mode); + data = get_sector(o, mode); if (!data) return 0; /* ts A61010 */ @@ -625,19 +566,13 @@ int sector_data(struct burn_write_opts *o, struct burn_track *t, int psub) unsigned char subs[96]; unsigned char *data; - data = get_sector(o, t, t->mode); + data = get_sector(o, t->mode); if (!data) return 0; /* ts A61010 */ if (convert_data(o, t, t->mode, data) <= 0) return 0; - /* ts A61031 */ - if (t->open_ended && t->track_data_done) { - unget_sector(o, t->mode); - return 2; - } - if (!t->source->read_sub) subcode_user(o, subs, t->entry->point, t->entry->control, 1, &t->isrc, psub); @@ -687,11 +622,6 @@ int sector_headers_is_ok(struct burn_write_opts *o, int mode) return 1; if (o->write_type == BURN_WRITE_SAO) return 1; - - /* ts A61031 */ - if (o->write_type == BURN_WRITE_TAO) - return 1; - if (mode & BURN_MODE1) return 2; return 0; @@ -720,11 +650,6 @@ void sector_headers(struct burn_write_opts *o, unsigned char *out, return; if (o->write_type == BURN_WRITE_SAO) return; - - /* ts A61031 */ - if (o->write_type == BURN_WRITE_TAO) - return; - if (mode & BURN_MODE1) modebyte = 1; diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg-freebsd.c b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg-freebsd.c index c2d92efe..fcdf43f5 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg-freebsd.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg-freebsd.c @@ -481,7 +481,6 @@ static void enumerate_common(char *fname, int bus_no, int host_no, out.get_nwa = mmc_get_nwa; out.close_disc = mmc_close_disc; out.close_session = mmc_close_session; - out.close_track_session = mmc_close; out.read_buffer_capacity = mmc_read_buffer_capacity; out.idata = malloc(sizeof(struct burn_scsi_inquiry_data)); out.idata->valid = 0; diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg-linux.c b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg-linux.c index a49eb3e6..a5a760c7 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg-linux.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg-linux.c @@ -585,40 +585,19 @@ int sg_release(struct burn_drive *d) return 0; } - int sg_issue_command(struct burn_drive *d, struct command *c) { int done = 0, no_c_page = 0; int err; sg_io_hdr_t s; -#ifdef Libburn_log_sg_commandS - /* <<< ts A61030 */ - static FILE *fp= NULL; - static int fpcount= 0; - int i; -#endif /* Libburn_log_sg_commandS */ - - /* <<< ts A60821 - debug: for tracing calls which might use open drive fds */ +/* ts A60821 + <<< debug: for tracing calls which might use open drive fds */ char buf[161]; sprintf(buf,"sg_issue_command d->fd= %d d->released= %d\n", d->fd,d->released); mmc_function_spy(buf); -#ifdef Libburn_log_sg_commandS - /* <<< ts A61030 */ - if(fp==NULL) { - fp= fopen("/tmp/libburn_sg_command_log","a"); - fprintf(fp,"\n-----------------------------------------\n"); - } - for(i=0;i<10;i++) - fprintf(fp,"%2.2x ", c->opcode[i]); - fprintf(fp,"\n"); - fpcount++; -#endif /* Libburn_log_sg_commandS */ - - /* ts A61010 : with no fd there is no chance to send an ioctl */ if (d->fd < 0) { c->error = 1; @@ -691,11 +670,6 @@ int sg_issue_command(struct burn_drive *d, struct command *c) if (s.sb_len_wr) { if (!c->retry) { c->error = 1; - - /* ts A61030 */ - /* >>> to become d->notify_error() */ - scsi_notify_error(d, c, s.sbp, s.sb_len_wr, 0); - return 1; } switch (scsi_error(d, s.sbp, s.sb_len_wr)) { @@ -714,31 +688,6 @@ int sg_issue_command(struct burn_drive *d, struct command *c) return 1; } - -/* ts A61030 */ -/* @param flag bit0=do also report TEST UNIT READY failures */ -int scsi_notify_error(struct burn_drive *d, struct command *c, - unsigned char *sense, int senselen, int flag) -{ - int key, asc, ascq, ret; - char msg[160]; - - if (c->opcode[0] == 0) /* SPC : TEST UNIT READY command */ - if(!(flag & 1)) - return 1; - - key = sense[2]; - asc = sense[12]; - ascq = sense[13]; - - sprintf(msg,"SCSI error condition on command %2.2Xh : ", c->opcode[0]); - sprintf(msg+strlen(msg), "key= %x asc= %x ascq= %x\n", key,asc,ascq); - ret = libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002010f, - LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, msg,0,0); - return ret; -} - - enum response scsi_error(struct burn_drive *d, unsigned char *sense, int senselen) { diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg.h b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg.h index 1501d651..7563a344 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg.h +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/sg.h @@ -64,9 +64,5 @@ int sg_release(struct burn_drive *); int sg_issue_command(struct burn_drive *, struct command *); enum response scsi_error(struct burn_drive *, unsigned char *, int); -/* ts A61030 */ -/* @param flag bit0=do also report TEST UNIT READY failures */ -int scsi_notify_error(struct burn_drive *, struct command *c, - unsigned char *sense, int senselen, int flag); #endif /* __SG */ diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/source.c b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/source.c index a5ec1529..f77188cb 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/source.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/source.c @@ -22,10 +22,6 @@ enum burn_source_status burn_track_set_source(struct burn_track *t, return BURN_SOURCE_FAILED; s->refcount++; t->source = s; - - /* ts A61031 */ - t->open_ended = (s->get_size(s) <= 0); - return BURN_SOURCE_OK; } diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/spc.c b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/spc.c index e5ccbc7a..5142bac4 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/spc.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/spc.c @@ -274,11 +274,6 @@ void spc_sense_write_params(struct burn_drive *d) mmc_read_disc_info(d); } -/* remark ts A61104 : -Although command MODE SELECT is SPC, the content of the -Write Parameters Mode Page (05h) is MMC (Table 108 in MMC-1). -Thus the filling of the mode page should be done by a mmc_ function. -*/ void spc_select_write_params(struct burn_drive *d, const struct burn_write_opts *o) { @@ -289,13 +284,6 @@ void spc_select_write_params(struct burn_drive *d, /* ts A61007 : All current callers are safe. */ /* a ssert(o->drive == d); */ - /* <<< A61030 - fprintf(stderr,"libburn_debug: write_type=%d multi=%d control=%d\n", - o->write_type,o->multi,o->control); - fprintf(stderr,"libburn_debug: block_type=%d spc_block_type=%d\n", - o->block_type,spc_block_type(o->block_type)); - */ - memcpy(c.opcode, SPC_MODE_SELECT, sizeof(SPC_MODE_SELECT)); c.retry = 1; c.oplen = sizeof(SPC_MODE_SELECT); @@ -321,12 +309,6 @@ void spc_select_write_params(struct burn_drive *d, + o->write_type; c.page->data[11] = (o->multi << 6) | o->control; c.page->data[12] = spc_block_type(o->block_type); - - /* ts A61104 */ - if(!(o->control&4)) /* audio (MMC-1 table 61) */ - if(o->write_type == BURN_WRITE_TAO) /* ??? for others too ? */ - c.page->data[12] = 0; /* Data Block Type: Raw Data */ - c.page->data[22] = 0; c.page->data[23] = 150; /* audio pause length */ /*XXX need session format! */ diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/structure.c b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/structure.c index 181c6f86..8898969d 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/structure.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/structure.c @@ -115,17 +115,6 @@ struct burn_track *burn_track_create(void) t->pad = 1; t->entry = NULL; t->source = NULL; - t->eos = 0; - - /* ts A61101 */ - t->sourcecount = 0; - t->writecount = 0; - t->written_sectors = 0; - - /* ts A61031 */ - t->open_ended = 0; - t->track_data_done = 0; - t->postgap = 0; t->pregap1 = 0; t->pregap2 = 0; @@ -329,31 +318,6 @@ int burn_track_get_sectors(struct burn_track *t) return sectors; } -/* ts A61031 */ -int burn_track_is_open_ended(struct burn_track *t) -{ - return !!t->open_ended; -} - -/* ts A61101 : API function */ -int burn_track_get_counters(struct burn_track *t, - off_t *read_bytes, off_t *written_bytes) -{ -/* - fprintf(stderr, "libburn_experimental: sizeof(off_t)=%d\n", - sizeof(off_t)); -*/ - *read_bytes = t->sourcecount; - *written_bytes = t->writecount; - return 1; -} - -/* ts A61031 */ -int burn_track_is_data_done(struct burn_track *t) -{ - return !!t->track_data_done; -} - int burn_track_get_shortage(struct burn_track *t) { int size; diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/structure.h b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/structure.h index 0eb3b8c1..f9352847 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/structure.h +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/structure.h @@ -31,18 +31,6 @@ struct burn_track struct burn_source *source; /** End of Source flag */ int eos; - - /* ts A61101 */ - off_t sourcecount; - off_t writecount; - off_t written_sectors; - - /* ts A61031 */ - /** Source is of undefined length */ - int open_ended; - /** End of open ended track flag : offset+payload+tail are delivered */ - int track_data_done; - /** The audio/data mode for the entry. Derived from control and possibly from reading the track's first sector. */ int mode; @@ -83,10 +71,4 @@ struct burn_disc int burn_track_get_shortage(struct burn_track *t); - -/* ts A61031 : might go to libburn.h */ -int burn_track_is_open_ended(struct burn_track *t); -int burn_track_is_data_done(struct burn_track *t); - - #endif /* BURN__STRUCTURE_H */ diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/transport.h b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/transport.h index 7b9cb879..fa55030d 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/transport.h +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/transport.h @@ -189,10 +189,6 @@ struct burn_drive void (*close_disc) (struct burn_write_opts * o); void (*close_session) ( struct burn_write_opts * o); - /* ts A61029 */ - void (*close_track_session) ( struct burn_drive *d, - int session, int track); - int (*test_unit_ready) (struct burn_drive * d); void (*probe_write_modes) (struct burn_drive * d); struct params params; diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/write.c b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/write.c index 53f5679c..67937218 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/write.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/write.c @@ -99,7 +99,7 @@ void type_to_form(int mode, unsigned char *ctladr, int *form) *form |= 0x40; } -int burn_write_flush(struct burn_write_opts *o, struct burn_track *track) +int burn_write_flush(struct burn_write_opts *o) { struct burn_drive *d = o->drive; @@ -108,101 +108,13 @@ int burn_write_flush(struct burn_write_opts *o, struct burn_track *track) err = d->write(d, d->nwa, d->buffer); if (err == BE_CANCELLED) return 0; - /* A61101 */ - if(track != NULL) { - track->writecount += d->buffer->bytes; - track->written_sectors += d->buffer->sectors; - } - d->nwa += d->buffer->sectors; - d->buffer->bytes = 0; - d->buffer->sectors = 0; } d->sync_cache(d); return 1; } -/* ts A61030 */ -int burn_write_close_track(struct burn_write_opts *o, struct burn_session *s, - int tnum) -{ - char msg[81]; - struct burn_drive *d; - struct burn_track *t; - int todo, step, cancelled, seclen; - - d = o->drive; - t = s->track[tnum]; - - /* ts A61103 : pad up track to minimum size of 600 sectors */ - if (t->written_sectors < 300) { - todo = 300 - t->written_sectors; - sprintf(msg,"Padding up track to minimum size (+ %d sectors)", - todo); - libdax_msgs_submit(libdax_messenger, o->drive->global_index, - 0x0002011a, - LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH, msg,0,0); - step = BUFFER_SIZE / 4096; /* shall fit any sector size */ - if (step <= 0) - step = 1; - seclen = burn_sector_length(t->mode); - if (seclen <= 0) - seclen = 2048; - memset(d->buffer, 0, sizeof(struct buffer)); - cancelled = d->cancel; - for (; todo > 0; todo -= step) { - if (step > todo) - step = todo; - d->buffer->bytes = step*seclen; - d->buffer->sectors = step; - d->cancel = 0; - d->write(d, d->nwa, d->buffer); - d->nwa += d->buffer->sectors; - t->writecount += d->buffer->bytes; - t->written_sectors += d->buffer->sectors; - } - d->cancel = cancelled; - } - - /* ts A61102 */ - d->busy = BURN_DRIVE_CLOSING_TRACK; - - sprintf(msg, "Closing track %2.2d", tnum+1); - libdax_msgs_submit(libdax_messenger, o->drive->global_index,0x00020119, - LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, msg,0,0); - - /* MMC-1 mentions track number 0xFF for "the incomplete track", - MMC-3 does not. I tried both. 0xFF was in effect when other - bugs finally gave up and made way for readable tracks. */ - d->close_track_session(o->drive, 0, 0xff); /* tnum+1); */ - - /* ts A61102 */ - d->busy = BURN_DRIVE_WRITING; - - return 1; -} - - -/* ts A61030 */ -int burn_write_close_session(struct burn_write_opts *o, struct burn_session *s) -{ - libdax_msgs_submit(libdax_messenger, o->drive->global_index,0x00020119, - LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, - "Closing session", 0, 0); - - /* ts A61102 */ - o->drive->busy = BURN_DRIVE_CLOSING_SESSION; - - o->drive->close_track_session(o->drive, 1, 0); - - /* ts A61102 */ - o->drive->busy = BURN_DRIVE_WRITING; - - return 1; -} - - /* ts A60819: This is unused since about Feb 2006, icculus.org/burn CVS. The compiler complains. We shall please our compiler. @@ -390,17 +302,8 @@ XXX this is untested :) */ if (!tar[i]->pad) { rem += burn_track_get_shortage(tar[i]); - - /* ts A61101 : I doubt that linking would yield a - desireable effect. With TAO it is - counterproductive in any way. - */ - if (o->write_type == BURN_WRITE_TAO) - tar[i]->source->next = NULL; - else - - if (i +1 != ntr) - tar[i]->source->next = tar[i+1]->source; + if (i +1 != ntr) + tar[i]->source->next = tar[i+1]->source; } else if (rem) { rem = 0; runtime++; @@ -514,7 +417,7 @@ int burn_write_session(struct burn_write_opts *o, struct burn_session *s) { struct burn_drive *d = o->drive; struct burn_track *prev = NULL, *next = NULL; - int i, ret; + int i; d->rlba = 0; burn_print(1, " writing a session\n"); @@ -527,15 +430,9 @@ int burn_write_session(struct burn_write_opts *o, struct burn_session *s) next = NULL; if (!burn_write_track(o, s, i)) - { ret = 0; goto ex; } + return 0; } - - /* ts A61103 */ - ret = 1; -ex:; - if (o->write_type == BURN_WRITE_TAO) - burn_write_close_session(o, s); - return ret; + return 1; } int burn_write_track(struct burn_write_opts *o, struct burn_session *s, @@ -543,18 +440,13 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s, { struct burn_track *t = s->track[tnum]; struct burn_drive *d = o->drive; - int i, tmp = 0, open_ended = 0, ret, nwa; + int i, tmp = 0; int sectors; - char msg[80]; d->rlba = -150; /* XXX for tao, we don't want the pregaps but still want post? */ if (o->write_type != BURN_WRITE_TAO) { - - /* ts A61102 */ - d->busy = BURN_DRIVE_WRITING_PREGAP; - if (t->pregap1) d->rlba += 75; if (t->pregap2) @@ -570,35 +462,20 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s, for (i = 0; i < 75; i++) if (!sector_pregap(o, t->entry->point, pt->entry->control, pt->mode)) - { ret = 0; goto ex; } + return 0; } if (t->pregap2) for (i = 0; i < 150; i++) if (!sector_pregap(o, t->entry->point, t->entry->control, t->mode)) - { ret = 0; goto ex; } + return 0; } else { o->control = t->entry->control; d->send_write_parameters(d, o); - - /* ts A61103 */ - nwa = d->get_nwa(d); - sprintf(msg, "pre-track %2.2d : get_nwa()= %d , d->nwa= %d\n", - tnum+1, nwa, d->nwa); - libdax_msgs_submit(libdax_messenger, d->global_index, 0x000002, - LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO, - msg,0,0); - if (nwa > d->nwa) - d->nwa = nwa; } /* user data */ - - /* ts A61102 */ - d->busy = BURN_DRIVE_WRITING; - sectors = burn_track_get_sectors(t); - open_ended = burn_track_is_open_ended(t); /* Update progress */ d->progress.start_sector = d->nwa; @@ -611,11 +488,10 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s, burn_print(12, "track %d is %d sectors long\n", tnum, sectors); - /* ts A61030 : this cannot happen. tnum is alsways < s-tracks */ if (tnum == s->tracks) tmp = sectors > 150 ? 150 : sectors; - for (i = 0; open_ended || i < sectors - tmp; i++) { + for (i = 0; i < sectors - tmp; i++) { /* ts A61023 : http://libburn.pykix.org/ticket/14 From time to time inquire drive buffer */ @@ -623,24 +499,12 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s, d->read_buffer_capacity(d); if (!sector_data(o, t, 0)) - { ret = 0; goto ex; } - - /* ts A61031 */ - if (open_ended) { - d->progress.sectors = sectors = i; - if (burn_track_is_data_done(t)) - break; - } + return 0; /* update current progress */ d->progress.sector++; } for (; i < sectors; i++) { - - /* ts A61030: program execution never gets to this point */ - fprintf(stderr,"LIBBURN_DEBUG: TNUM=%d TRACKS=%d TMP=%d\n", - tnum, s->tracks, tmp); - burn_print(1, "last track, leadout prep\n"); /* ts A61023 */ @@ -648,7 +512,7 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s, d->read_buffer_capacity(d); if (!sector_data(o, t, 1)) - { ret = 0; goto ex; } + return 0; /* update progress */ d->progress.sector++; @@ -658,40 +522,23 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s, for (i = 0; i < 150; i++) if (!sector_postgap(o, t->entry->point, t->entry->control, t->mode)) - { ret = 0; goto ex; } + return 0; i = t->offset; if (o->write_type == BURN_WRITE_SAO) { if (d->buffer->bytes) { int err; err = d->write(d, d->nwa, d->buffer); if (err == BE_CANCELLED) - { ret = 0; goto ex; } - - /* A61101 : probably this is not payload data */ - /* t->writecount += d->buffer->bytes; */ - + return 0; d->nwa += d->buffer->sectors; d->buffer->bytes = 0; d->buffer->sectors = 0; } } - - /* ts A61103 */ - ret = 1; -ex:; - if (o->write_type == BURN_WRITE_TAO) { - - /* ts A61103 */ - /* >>> if cancelled: ensure that at least 600 kB get written */ - - if (!burn_write_flush(o, t)) - ret = 0; - - /* ts A61030 */ - if (burn_write_close_track(o, s, tnum) <= 0) - ret = 0; - } - return ret; + if (o->write_type == BURN_WRITE_TAO) + if (!burn_write_flush(o)) + return 0; + return 1; } /* ts A61009 */ @@ -722,8 +569,7 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc) struct buffer buf; struct burn_track *lt; int first = 1, i; - int nwa; - char msg[80]; + int res; /* ts A60924 : libburn/message.c gets obsoleted burn_message_clear_queue(); @@ -740,14 +586,8 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc) /* Apparently some drives require this command to be sent, and a few drives return crap. so we send the command, then ignore the result. */ - nwa = d->get_nwa(d); - /* >>> ts A61031 : one should not ignore the "crap" but find out - when and why it occurs. Multi-session will hardly - work on base of flat guessing. - */ - sprintf(msg, "Inquired nwa: %d", nwa); - libdax_msgs_submit(libdax_messenger, d->global_index, 0x00000002, - LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO, msg,0,0); + res = d->get_nwa(d); +/* printf("ignored nwa: %d\n", res);*/ d->alba = d->start_lba; d->nwa = d->alba; @@ -796,19 +636,8 @@ return crap. so we send the command, then ignore the result. goto fail; } else { if (first) { - - /* ts A61030 : 0 made the burner take data. */ - /* ts A61103 : Meanwhile d->nwa is updated in - burn_write_track() */ - if(o->write_type == BURN_WRITE_TAO) { - d->nwa= d->alba = 0; - } else { - - d->nwa = -150; - d->alba = -150; - - } - + d->nwa = -150; + d->alba = -150; } else { d->nwa += 4500; d->alba += 4500; @@ -823,13 +652,8 @@ return crap. so we send the command, then ignore the result. lt->mode)) goto fail; } else { - - /* ts A61030 */ - if (o->write_type != BURN_WRITE_TAO) - - if (!burn_write_flush(o, NULL)) - goto fail; - + if (!burn_write_flush(o)) + goto fail; d->nwa += first ? 6750 : 2250; d->alba += first ? 6750 : 2250; } @@ -841,18 +665,15 @@ return crap. so we send the command, then ignore the result. d->progress.start_sector = 0; d->progress.sectors = 0; } - - /* ts A61030: extended skipping of flush to TAO: session is closed */ - if (o->write_type != BURN_WRITE_SAO && o->write_type != BURN_WRITE_TAO) - if (!burn_write_flush(o, NULL)) + if (o->write_type != BURN_WRITE_SAO) + if (!burn_write_flush(o)) goto fail; - sleep(1); burn_print(1, "done\n"); d->busy = BURN_DRIVE_IDLE; - /* ts A61012 : This return was traditionally missing. I suspect this + /* ts A61012 : This return was traditionally missing, a suspect this to have caused Cdrskin_eject() failures */ return; diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/write.h b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/write.h index 8ef95624..737ffb80 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/libburn/write.h +++ b/tags/CdrskinZeroTwoFourPlZeroOne/libburn/write.h @@ -24,11 +24,6 @@ int burn_write_leadout(struct burn_write_opts *o, int burn_write_session(struct burn_write_opts *o, struct burn_session *s); int burn_write_track(struct burn_write_opts *o, struct burn_session *s, int tnum); -int burn_write_flush(struct burn_write_opts *o, struct burn_track *track); - -/* ts A61030 : necessary for TAO */ -int burn_write_close_track(struct burn_write_opts *o, struct burn_session *s, - int tnum); -int burn_write_close_session(struct burn_write_opts *o,struct burn_session *s); +int burn_write_flush(struct burn_write_opts *o); #endif /* BURN__WRITE_H */ diff --git a/tags/CdrskinZeroTwoFourPlZeroOne/test/libburner.c b/tags/CdrskinZeroTwoFourPlZeroOne/test/libburner.c index 0521712a..1f14190d 100644 --- a/tags/CdrskinZeroTwoFourPlZeroOne/test/libburner.c +++ b/tags/CdrskinZeroTwoFourPlZeroOne/test/libburner.c @@ -35,10 +35,17 @@ */ +/* We shall prepare for times when more than 2 GB of data are to be handled. + This gives POSIX-ly 64 bit off_t */ +#ifndef _LARGEFILE_SOURCE +#define _LARGEFILE_SOURCE 1 +#endif +#ifndef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 64 +#endif + /** See this for the decisive API specs . libburn.h is The Original */ -/* For using the installed header file : #include */ -/* This program insists in the own headerfile. */ -#include "../libburn/libburn.h" +#include /* libburn is intended for Linux systems with kernel 2.4 or 2.6 for now */ #include @@ -242,8 +249,7 @@ int libburner_aquire_by_driveno(int *driveno) int libburner_blank_disc(struct burn_drive *drive, int blank_fast) { enum burn_disc_status disc_state; - struct burn_progress p; - int percent = 1; + struct burn_progress progress; while (burn_drive_get_status(drive, NULL) != BURN_DRIVE_IDLE) usleep(1001); @@ -275,13 +281,11 @@ int libburner_blank_disc(struct burn_drive *drive, int blank_fast) } printf( "Beginning to %s-blank CD media.\n", (blank_fast?"fast":"full")); + printf( + "Expect some garbage sector numbers and some zeros at first.\n"); burn_disc_erase(drive, blank_fast); - sleep(1); - while (burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) { - if(p.sectors>0 && p.sector>=0) /* display 1 to 99 percent */ - percent = 1.0 + ((double) p.sector+1.0) - / ((double) p.sectors) * 98.0; - printf("Blanking ( %d%% done )\n", percent); + while (burn_drive_get_status(drive, &progress) != BURN_DRIVE_IDLE) { + printf("Blanking sector %d\n", progress.sector); sleep(1); } printf("Done\n");