|
|
|
@ -56,10 +56,6 @@ scanning and implicit drive address 0. A tradition of 9 months shall not
|
|
|
|
|
be broken. So burns without dev= will stay possible - but harmless only |
|
|
|
|
on single drive systems. |
|
|
|
|
|
|
|
|
|
* |
|
|
|
|
Only if the new API compliance is enabled by macro Cdrskin_new_api_tesT . |
|
|
|
|
Not yet by default. In many aspects this is already superior, note well : |
|
|
|
|
|
|
|
|
|
Burns without dev= resp. with dev=number are harmless on multi-drive systems. |
|
|
|
|
|
|
|
|
|
This is because Cdrskin_grab_drive() either drops the unwanted drives or |
|
|
|
@ -78,7 +74,6 @@ parts which have been transplanted to libburn in order to create
|
|
|
|
|
achieved by most cdrskin runs. The remaining problem situations should now |
|
|
|
|
be defused by releasing any short time grabbed flocks of drives during the |
|
|
|
|
restart of libburn. |
|
|
|
|
* |
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------------ |
|
|
|
|
This program is currently copyright Thomas Schmitt only. |
|
|
|
@ -153,6 +148,9 @@ or
|
|
|
|
|
|
|
|
|
|
#define Cdrskin_libburn_versioN "0.2.tsA60220" |
|
|
|
|
#define Cdrskin_libburn_no_burn_preset_device_opeN 1 |
|
|
|
|
#ifndef Cdrskin_oldfashioned_api_usE |
|
|
|
|
#define Cdrskin_oldfashioned_api_usE 1 |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#endif /* Cdrskin_libburn_cvs_A60220_tS */ |
|
|
|
|
|
|
|
|
@ -182,9 +180,13 @@ or
|
|
|
|
|
|
|
|
|
|
#ifdef Cdrskin_new_api_tesT |
|
|
|
|
|
|
|
|
|
/* switches from old behavior with aquiring drives to new behavior */ |
|
|
|
|
/* put macros under test caveat here */ |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifdef Cdrskin_oldfashioned_api_usE |
|
|
|
|
|
|
|
|
|
/* (put parasite macros under test caveat here) */ |
|
|
|
|
/* switch back to pre-0.2.2 libburn usage */; |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
@ -264,7 +266,7 @@ or
|
|
|
|
|
#define Cdrskin_strleN 4096 |
|
|
|
|
|
|
|
|
|
/** The maximum length +1 of a drive address */ |
|
|
|
|
#ifdef Cdrskin_new_api_tesT |
|
|
|
|
#ifndef Cdrskin_oldfashioned_api_usE |
|
|
|
|
#define Cdrskin_adrleN BURN_DRIVE_ADR_LEN |
|
|
|
|
#else |
|
|
|
|
#define Cdrskin_adrleN 80 |
|
|
|
@ -2209,10 +2211,10 @@ ex:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Obtain access to a libburn drive for writing or information retrieval.
|
|
|
|
|
Extended behavior with Cdrskin_new_api_tesT: |
|
|
|
|
If libburn is not restricted to a single persistent address then it |
|
|
|
|
gets shutdown and restarted with the wanted drive only. Thus, after |
|
|
|
|
this call, libburn is supposed to have open only the grabbed drive. |
|
|
|
|
If libburn is not restricted to a single persistent address then the |
|
|
|
|
unused drives are dropped. This might be done by shutting down and |
|
|
|
|
restartiing libburn with the wanted drive only. Thus, after this call, |
|
|
|
|
libburn is supposed to have open only the reserved drive. |
|
|
|
|
All other drives should be free for other use. |
|
|
|
|
Warning: Do not store struct burn_drive pointer over this call. |
|
|
|
|
Any such pointer might be invalid afterwards. |
|
|
|
@ -2264,7 +2266,7 @@ int Cdrskin_grab_drive(struct CdrskiN *skin, int flag)
|
|
|
|
|
|
|
|
|
|
#endif /* ! Cdrskin_grab_abort_brokeN */ |
|
|
|
|
|
|
|
|
|
#ifdef Cdrskin_new_api_tesT |
|
|
|
|
#ifndef Cdrskin_oldfashioned_api_usE |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(flag&1) { |
|
|
|
@ -2327,7 +2329,7 @@ int Cdrskin_grab_drive(struct CdrskiN *skin, int flag)
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
#endif /* ! Cdrskin_new_api_tesT */ |
|
|
|
|
#endif /* Cdrskin_oldfashioned_api_usE */ |
|
|
|
|
|
|
|
|
|
ret= burn_drive_grab(drive,!(flag&2)); |
|
|
|
|
if(ret==0) { |
|
|
|
@ -2450,7 +2452,7 @@ int Cdrskin_abort_handler(struct CdrskiN *skin, int signum, int flag)
|
|
|
|
|
burn_drive_cancel(skin->grabbed_drive); |
|
|
|
|
} else if(drive_status==BURN_DRIVE_GRABBING) { |
|
|
|
|
|
|
|
|
|
#ifdef Cdrskin_new_api_tesT |
|
|
|
|
#ifndef Cdrskin_oldfashioned_api_usE |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
fprintf(stderr, |
|
|
|
@ -2471,7 +2473,7 @@ int Cdrskin_abort_handler(struct CdrskiN *skin, int signum, int flag)
|
|
|
|
|
|
|
|
|
|
#else |
|
|
|
|
/* >>> what to do in this state ? */; |
|
|
|
|
#endif /* Cdrskin_new_api_tesT */ |
|
|
|
|
#endif /* Cdrskin_oldfashioned_api_usE */ |
|
|
|
|
|
|
|
|
|
} else if(drive_status!=BURN_DRIVE_IDLE) { |
|
|
|
|
fprintf(stderr, |
|
|
|
@ -2510,7 +2512,7 @@ int Cdrskin_abort_handler(struct CdrskiN *skin, int signum, int flag)
|
|
|
|
|
Cdrskin_release_drive(skin,0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef Cdrskin_new_api_tesT |
|
|
|
|
#ifndef Cdrskin_oldfashioned_api_usE |
|
|
|
|
try_to_finish_lib:; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
@ -2855,11 +2857,7 @@ int Cdrskin_atip(struct CdrskiN *skin, int flag)
|
|
|
|
|
"cdrskin_debug: redoing startup for speed inquiry stabilization\n")); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef Cdrskin_new_api_tesT |
|
|
|
|
|
|
|
|
|
if(skin->verbosity>=Cdrskin_verbose_debuG)
|
|
|
|
|
ClN(fprintf(stderr, |
|
|
|
|
"cdrskin_debug: Cdrskin_atip() on Cdrskin_new_api_tesT\n")); |
|
|
|
|
#ifndef Cdrskin_oldfashioned_api_usE |
|
|
|
|
|
|
|
|
|
if(strlen(skin->preskin->device_adr)<=0) |
|
|
|
|
burn_drive_get_adr(&(skin->drives[skin->driveno]), |
|
|
|
@ -2877,7 +2875,7 @@ int Cdrskin_atip(struct CdrskiN *skin, int flag)
|
|
|
|
|
return(ret); |
|
|
|
|
drive= skin->drives[skin->driveno].drive; |
|
|
|
|
|
|
|
|
|
#else /* Cdrskin_new_api_tesT */ |
|
|
|
|
#else /* ! Cdrskin_oldfashioned_api_usE */ |
|
|
|
|
|
|
|
|
|
Cdrskin_release_drive(skin,0); |
|
|
|
|
burn_finish(); |
|
|
|
@ -2895,7 +2893,7 @@ int Cdrskin_atip(struct CdrskiN *skin, int flag)
|
|
|
|
|
return(ret); |
|
|
|
|
drive= skin->drives[skin->driveno].drive; |
|
|
|
|
|
|
|
|
|
#endif /* ! Cdrskin_new_api_tesT */ |
|
|
|
|
#endif /* Cdrskin_oldfashioned_api_usE */ |
|
|
|
|
|
|
|
|
|
#endif /* Cdrskin_atip_speed_brokeN */ |
|
|
|
|
|
|
|
|
@ -3612,7 +3610,7 @@ int Cdrskin_eject(struct CdrskiN *skin, int flag)
|
|
|
|
|
|
|
|
|
|
#ifndef Cdrskin_burn_drive_eject_brokeN |
|
|
|
|
|
|
|
|
|
#ifdef Cdrskin_new_api_tesT |
|
|
|
|
#ifndef Cdrskin_oldfashioned_api_usE |
|
|
|
|
int i,ret,max_try= 3; |
|
|
|
|
|
|
|
|
|
if(!skin->do_eject) |
|
|
|
@ -4430,7 +4428,6 @@ int main(int argc, char **argv)
|
|
|
|
|
{exit_value= 11; goto ex;} |
|
|
|
|
if(ret==2) |
|
|
|
|
{exit_value= 0; goto ex;} |
|
|
|
|
|
|
|
|
|
ret= Cdrskin_create(&skin,&preskin,&lib_initialized,&exit_value,0); |
|
|
|
|
if(ret<=0) |
|
|
|
|
{exit_value= 2; goto ex;} |
|
|
|
@ -4452,6 +4449,15 @@ int main(int argc, char **argv)
|
|
|
|
|
if(skin->verbosity>=Cdrskin_verbose_cmD) |
|
|
|
|
printf("cdrskin: called as : %s\n",argv[0]); |
|
|
|
|
|
|
|
|
|
if(skin->verbosity>=Cdrskin_verbose_debuG) { |
|
|
|
|
#ifdef Cdrskin_oldfashioned_api_usE |
|
|
|
|
ClN(fprintf(stderr,"cdrskin_debug: Compiled with option -oldfashioned\n")); |
|
|
|
|
#endif |
|
|
|
|
#ifdef Cdrskin_new_api_tesT |
|
|
|
|
ClN(fprintf(stderr,"cdrskin_debug: Compiled with option -experimental\n")); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Cdrskin_run(skin,&exit_value,0); |
|
|
|
|
|
|
|
|
|
ex:; |
|
|
|
|