Compare commits

..

9 Commits

28 changed files with 158 additions and 1173 deletions

View File

@ -82,34 +82,32 @@ noinst_PROGRAMS = \
bin_PROGRAMS = \ bin_PROGRAMS = \
cdrskin/cdrskin cdrskin/cdrskin
LIBBURN_EXTRALIBS = $(LIBBURN_ARCH_LIBS) $(THREAD_LIBS)
test_libburner_CPPFLAGS = -Ilibburn test_libburner_CPPFLAGS = -Ilibburn
test_libburner_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) test_libburner_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
test_libburner_SOURCES = test/libburner.c test_libburner_SOURCES = test/libburner.c
test_telltoc_CPPFLAGS = -Ilibburn test_telltoc_CPPFLAGS = -Ilibburn
test_telltoc_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) test_telltoc_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
test_telltoc_SOURCES = test/telltoc.c test_telltoc_SOURCES = test/telltoc.c
test_dewav_CPPFLAGS = -Ilibburn test_dewav_CPPFLAGS = -Ilibburn
test_dewav_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) test_dewav_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
test_dewav_SOURCES = test/dewav.c test_dewav_SOURCES = test/dewav.c
test_fake_au_CPPFLAGS = test_fake_au_CPPFLAGS =
test_fake_au_LDADD = test_fake_au_LDADD =
test_fake_au_SOURCES = test/fake_au.c test_fake_au_SOURCES = test/fake_au.c
test_poll_CPPFLAGS = -Ilibburn test_poll_CPPFLAGS = -Ilibburn
test_poll_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) test_poll_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
test_poll_SOURCES = test/poll.c test_poll_SOURCES = test/poll.c
test_structest_CPPFLAGS = -Ilibburn test_structest_CPPFLAGS = -Ilibburn
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
test_structest_SOURCES = test/structest.c test_structest_SOURCES = test/structest.c
## cdrskin construction site - ts A60816 - A90313 ## cdrskin construction site - ts A60816 - A90102
cdrskin_cdrskin_CPPFLAGS = -Ilibburn cdrskin_cdrskin_CPPFLAGS = -Ilibburn
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_4 cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_0
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) # cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking # ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
cdrskin_cdrskin_LDADD = libburn/libburn.la $(LIBBURN_EXTRALIBS) cdrskin_cdrskin_LDADD = libburn/libburn.la $(THREAD_LIBS)
cdrskin_cdrskin_SOURCES = cdrskin/cdrskin.c cdrskin/cdrfifo.c cdrskin/cdrfifo.h cdrskin/cdrskin_timestamp.h cdrskin_cdrskin_SOURCES = cdrskin/cdrskin.c cdrskin/cdrfifo.c cdrskin/cdrfifo.h cdrskin/cdrskin_timestamp.h
## ##

51
README
View File

@ -11,7 +11,7 @@ Still containing parts of Libburn. By Derek Foreman <derek@signalmarketing.com>
and Ben Jansens <xor@orodu.net> and Ben Jansens <xor@orodu.net>
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
http://files.libburnia-project.org/releases/libburn-0.6.4.pl00.tar.gz http://files.libburnia-project.org/releases/libburn-0.6.0.pl01.tar.gz
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -19,10 +19,10 @@ Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
From tarball From tarball
Obtain libburn-0.6.4.pl00.tar.gz, take it to a directory of your choice and do: Obtain libburn-0.6.0.pl01.tar.gz, take it to a directory of your choice and do:
tar xzf libburn-0.6.4.pl00.tar.gz tar xzf libburn-0.6.0.pl01.tar.gz
cd libburn-0.6.4 cd libburn-0.6.0
./configure --prefix=/usr ./configure --prefix=/usr
make make
@ -35,11 +35,6 @@ and to install the cdrecord compatibility binary cdrskin, do
This procedure installs libburn.so.4 and cdrskin depending on it. This procedure installs libburn.so.4 and cdrskin depending on it.
For a standalone cdrskin binary, see cdrskin/README. For a standalone cdrskin binary, see cdrskin/README.
A behavioral conflict is known between any burn software and demons like hald
which probe CD drives. This can spoil burn runs for CD-R or CD-RW.
You may have to keep your hald away from the drive. See for example
http://www.freebsd.org/gnome/docs/halfaq.html
From SVN From SVN
@ -47,8 +42,8 @@ Our build system is based on autotools. For preparing the build of a SVN
snapshot you will need autotools of at least version 1.7. snapshot you will need autotools of at least version 1.7.
Do in a directory of your choice: Do in a directory of your choice:
svn co http://svn.libburnia-project.org/libburn/trunk libburn-0.6.3 svn co http://svn.libburnia-project.org/libburn/trunk libburn-0.5.9
cd libburn-0.6.3 cd libburn-0.5.9
./bootstrap ./bootstrap
./configure --prefix=/usr ./configure --prefix=/usr
make make
@ -83,10 +78,8 @@ These are libraries, language bindings, and middleware binaries which emulate
classical (and valuable) Linux tools. classical (and valuable) Linux tools.
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
with ATAPI/CAM support enabled in the kernel, see atapicam(4). with ATAPI/CAM support enabled in the kernel, see atapicam(4).
On other X/Open compliant systems there will only be pseudo drives, but no
direct MMC operation on real CD/DVD/BD drives.
For full ports to other systems we would need : login on a development machine For ports to other systems we would need : login on a development machine
resp. a live OS on CD or DVD, advise from a system person about the equivalent resp. a live OS on CD or DVD, advise from a system person about the equivalent
of Linux sg or FreeBSD CAM, volunteers for testing of realistic use cases. of Linux sg or FreeBSD CAM, volunteers for testing of realistic use cases.
@ -160,13 +153,6 @@ libburn.so.4 (since 0.3.4, March 2007),
libisofs.so.6 (since 0.6.2, February 2008), libisofs.so.6 (since 0.6.2, February 2008),
libisoburn.so.1 (since 0.1.0, February 2008). libisoburn.so.1 (since 0.1.0, February 2008).
Applications must use 64 bit off_t. E.g. by defining
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
or take special precautions to interface with the libraries by 64 bit integers
where the .h files prescribe off_t. Not to use 64 bit file i/o will keep the
application from producing and processing ISO images of more than 2 GB size.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
Project history as far as known to me: Project history as far as known to me:
@ -365,29 +351,6 @@ Project history as far as known to me:
- 2nd Jan 2009 libburn-0.6.0 allows to format BD-R and to write to either - 2nd Jan 2009 libburn-0.6.0 allows to format BD-R and to write to either
formatted or unformatted BD-R. formatted or unformatted BD-R.
- 6th Jan 2009 libisoburn-0.3.2. xorriso can produce and execute commands for
mounting older sessions from all kinds of media. Pseudo-drives outside the
/dev/ tree can be addressed without prefix "stdio:".
- 20th Feb 2009 libburn-0.6.2 source release now compiles out of the box
on FreeBSD.
- 28 Feb 2009 libisofs-0.6.14 can record ACLs and Extended Attributes xattr
in its ISO images.
- 01 Mar 2009 libisoburn-0.3.4. xorriso makes use of the ACL and xattr
capabilities provided by libisofs for xorriso backup features.
- 11 Mar 2009 libisofs-0.6.16 of libisofs fixes two bugs which on Solaris
prevented to navigate the ISO images by ".." and to recognize the Rock Ridge
extensions of ISO images. The ban to build libisofs on operating systems
other than Linux and FreeBSD has been lifted.
- 13 Mar 2009 libburn-0.6.4 got a dummy adapter for SCSI/MMC command transport.
It will show no drives and thus libburn will only be able to perform
operations on "stdio:" pseudo drives. Nevertheless this allowed to lift the
ban to build libburn on operating systems other than Linux and FreeBSD.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------

View File

@ -14,9 +14,7 @@ AC_DEFUN([TARGET_SHIZZLE],
LIBBURN_ARCH_LIBS=-lcam LIBBURN_ARCH_LIBS=-lcam
;; ;;
*) *)
ARCH= AC_ERROR([You are attempting to compile for an unsupported platform])
LIBBURN_ARCH_LIBS=
# AC_ERROR([You are attempting to compile for an unsupported platform])
;; ;;
esac esac

View File

@ -4,7 +4,7 @@
cdrskin. By Thomas Schmitt <scdbackup@gmx.net> cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via: Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/cdrskin_eng.html http://scdbackup.sourceforge.net/cdrskin_eng.html
http://scdbackup.sourceforge.net/cdrskin-0.6.4.pl00.tar.gz http://scdbackup.sourceforge.net/cdrskin-0.6.0.pl01.tar.gz
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2. Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -14,8 +14,6 @@ most of the libburn features from the command line.
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
with ATAPI/CAM support enabled in the kernel, see atapicam(4). with ATAPI/CAM support enabled in the kernel, see atapicam(4).
On other X/Open compliant systems there will only be pseudo drives, but no
direct MMC operation on real CD/DVD/BD drives.
By using this software you agree to the disclaimer at the end of this text By using this software you agree to the disclaimer at the end of this text
"This software is provided as is. There is no warranty implied and ..." "This software is provided as is. There is no warranty implied and ..."
@ -23,10 +21,10 @@ By using this software you agree to the disclaimer at the end of this text
Compilation, First Glimpse, Installation Compilation, First Glimpse, Installation
Obtain cdrskin-0.6.4.pl00.tar.gz, take it to a directory of your choice and do: Obtain cdrskin-0.6.0.pl01.tar.gz, take it to a directory of your choice and do:
tar xzf cdrskin-0.6.4.pl00.tar.gz tar xzf cdrskin-0.6.0.pl01.tar.gz
cd cdrskin-0.6.4 cd cdrskin-0.6.0
Within that directory execute: Within that directory execute:
@ -121,11 +119,6 @@ as listed device files. This addressing via e.g. /dev/sr0 or /dev/scd1 is
compatible with generic read programs like dd and with write program growisofs. compatible with generic read programs like dd and with write program growisofs.
For finding /dev/sg1 from /dev/sr0, the program needs rw-access to both files. For finding /dev/sg1 from /dev/sr0, the program needs rw-access to both files.
A behavioral conflict is known between any burn software and demons like hald
which probe CD drives. This can spoil burn runs for CD-R or CD-RW.
You may have to keep your hald away from the drive. See for example
http://www.freebsd.org/gnome/docs/halfaq.html
Usage examples Usage examples
@ -288,9 +281,6 @@ nominal speed by option "stream_recording=on".
In this case bad blocks are not detected during write and not even previously In this case bad blocks are not detected during write and not even previously
known bad blocks are avoided. So you have to make your own readability tests known bad blocks are avoided. So you have to make your own readability tests
and go back to half speed as soon as the first read errors show up. and go back to half speed as soon as the first read errors show up.
Instead of "on" one may also set a start address for stream recording.
Like "stream_recording=100m". This will write slowly to the first 100 MB of
the media and accelerate when writing to higher addresses.
Option --grow_overwriteable_iso allows -multi (although unneeded), enables Option --grow_overwriteable_iso allows -multi (although unneeded), enables
-msinfo and -toc, and makes blank=fast an invalidator for ISO filesystems -msinfo and -toc, and makes blank=fast an invalidator for ISO filesystems
@ -428,7 +418,7 @@ are the cause. Any mistake of the burn program is supposed to be caught
by the drive's firmware and to lead to mere misburns. by the drive's firmware and to lead to mere misburns.
The worst mishaps which hit the author imposed the need to reboot the The worst mishaps which hit the author imposed the need to reboot the
system because of drives gnawing endlessly on ill media. Permanent hardware system because of drives gnawing endlessly on ill media. Permanent hardware
damage did not occur in 3.5 years of development. But one never knows ... damage did not occur in 2.5 years of development. But one never knows ...
------------------------------------------------------------------------------ ------------------------------------------------------------------------------

View File

@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
# My changes are in $changes , mainly in $changes/cdrskin # My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-release" changes="./libburn-release"
skin_release="0.6.4" skin_release="0.6.0"
patch_level=".pl00" patch_level=".pl00"
skin_rev="$skin_release""$patch_level" skin_rev="$skin_release""$patch_level"

View File

@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
# My changes are in $changes , mainly in $changes/cdrskin # My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-develop" changes="./libburn-develop"
skin_release="0.6.5" skin_release="0.6.1"
patch_level="" patch_level=""
skin_rev="$skin_release""$patch_level" skin_rev="$skin_release""$patch_level"

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "Jan 07, 2009" .TH CDRSKIN 1 "Dec 10, 2008"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -167,10 +167,9 @@ needed.
.B Sequentially Recordable DVD or BD Media: .B Sequentially Recordable DVD or BD Media:
.br .br
Currently DVD-RW, DVD-R , DVD+R[/DL], and BD-R can be used for the Sequential Currently DVD-RW, DVD-R , DVD+R[/DL], and BD-R can be used for the Sequential
recording model. It resembles the model of CD media. Only DVD-RW can be recording model.
blanked and re-used from scratch.
.br .br
DVD-RW are sequential media if they are in state "Sequential Recording". This applies to DVD-RW only if they are in state "Sequential Recording".
The media must be either blank or appendable. The media must be either blank or appendable.
Newly purchased DVD-RW and DVD-R media are in this state. Newly purchased DVD-RW and DVD-R media are in this state.
Used DVD-RW get into blank sequential state by option Used DVD-RW get into blank sequential state by option
@ -1186,15 +1185,13 @@ Use and report literal Bus,Target,Lun addresses rather than real SCSI and
pseudo ATA addresses. This method is outdated and was never compatible with pseudo ATA addresses. This method is outdated and was never compatible with
original cdrecord. original cdrecord.
.TP .TP
.BI stream_recording="on"|"off"|number .BI stream_recording="on"|"off"
By setting "on" request that compliance to the desired speed setting is By setting "on" request that compliance to the desired speed setting is
preferred over management of write errors. With DVD-RAM and BD this can preferred over management of write errors. With DVD-RAM and BD this can
bring effective write speed near to the nominal write speed of the media. bring effective write speed near to the nominal write speed of the media.
But it will also disable the automatic use of replacement blocks But it will also disable the automatic use of replacement blocks
if write errors occur. It might as well be disliked or ignored by the drive. if write errors occur. It might as well be disliked or ignored by the drive.
.br .br
If a number is given, then error management stays enabled for all byte
addresses below that number. Any number below 16s is the same as "off".
.SH EXAMPLES .SH EXAMPLES
.SS .SS
.B Get an overview of drives and their addresses: .B Get an overview of drives and their addresses:

View File

@ -88,7 +88,7 @@ or
/** The official program version */ /** The official program version */
#ifndef Cdrskin_prog_versioN #ifndef Cdrskin_prog_versioN
#define Cdrskin_prog_versioN "0.6.4" #define Cdrskin_prog_versioN "0.6.0"
#endif #endif
/** The official libburn interface revision to use. /** The official libburn interface revision to use.
@ -101,7 +101,7 @@ or
#define Cdrskin_libburn_minoR 6 #define Cdrskin_libburn_minoR 6
#endif #endif
#ifndef Cdrskin_libburn_micrO #ifndef Cdrskin_libburn_micrO
#define Cdrskin_libburn_micrO 4 #define Cdrskin_libburn_micrO 0
#endif #endif
@ -135,44 +135,44 @@ or
#endif /* Cdrskin_libburn_cvs_A60220_tS */ #endif /* Cdrskin_libburn_cvs_A60220_tS */
#ifdef Cdrskin_libburn_0_6_4 #ifdef Cdrskin_libburn_0_6_0
#define Cdrskin_libburn_versioN "0.6.4" #define Cdrskin_libburn_versioN "0.6.0"
#define Cdrskin_libburn_from_pykix_svN 1 #define Cdrskin_libburn_from_pykix_svN 1
#endif /* Cdrskin_libburn_0_6_4 */ #endif /* Cdrskin_libburn_0_6_0 */
#ifdef Cdrskin_libburn_0_6_5 #ifdef Cdrskin_libburn_0_6_1
#define Cdrskin_libburn_versioN "0.6.5" #define Cdrskin_libburn_versioN "0.6.1"
#define Cdrskin_libburn_from_pykix_svN 1 #define Cdrskin_libburn_from_pykix_svN 1
/* Place novelty switch macros here. /* Place novelty switch macros here.
Move them down to Cdrskin_libburn_from_pykix_svN on version leap Move them down to Cdrskin_libburn_from_pykix_svN on version leap
*/ */
/* there are no libburn novelties in 0.6.5 yet */ /* there are no libburn novelties in 0.6.1 yet */
#endif /* Cdrskin_libburn_0_6_5 */ #endif /* Cdrskin_libburn_0_6_1 */
#ifndef Cdrskin_libburn_versioN #ifndef Cdrskin_libburn_versioN
#define Cdrskin_libburn_0_6_4 #define Cdrskin_libburn_0_6_0
#define Cdrskin_libburn_versioN "0.6.4" #define Cdrskin_libburn_versioN "0.6.0"
#define Cdrskin_libburn_from_pykix_svN 1 #define Cdrskin_libburn_from_pykix_svN 1
#endif #endif
#ifdef Cdrskin_libburn_0_6_4 #ifdef Cdrskin_libburn_0_6_0
#undef Cdrskin_libburn_majoR #undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR #undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO #undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0 #define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 6 #define Cdrskin_libburn_minoR 6
#define Cdrskin_libburn_micrO 4 #define Cdrskin_libburn_micrO 0
#endif #endif
#ifdef Cdrskin_libburn_0_6_5 #ifdef Cdrskin_libburn_0_6_1
#undef Cdrskin_libburn_majoR #undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR #undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO #undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0 #define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 6 #define Cdrskin_libburn_minoR 6
#define Cdrskin_libburn_micrO 5 #define Cdrskin_libburn_micrO 1
#endif #endif
@ -251,15 +251,9 @@ or
/* 0.4.8 */ /* 0.4.8 */
/* Bug fix release for write_start_address=... on DVD-RAM and BD-RE */ /* Bug fix release for write_start_address=... on DVD-RAM and BD-RE */
/* 0.5.0 , 0.5.2 , 0.5.4 , 0.5.6 , 0.5.8 , 0.6.0 , 0.6.2 */ /* 0.5.0 , 0.5.2 , 0.5.4 , 0.5.6 , 0.5.8 , 0.6.0 */
/* novel libburn features are transparent to cdrskin */ /* novel libburn features are transparent to cdrskin */
/* 0.6.4 */
/* Ended to mark novelties by macros.
libburnia libburn and cdrskin are fixely in sync now.
icculus libburn did not move for 30 months.
*/
#ifdef Cdrskin_new_api_tesT #ifdef Cdrskin_new_api_tesT
@ -2698,13 +2692,10 @@ set_dev:;
" --single_track accept only last argument as source_address\n"); " --single_track accept only last argument as source_address\n");
#ifdef Cdrskin_libburn_has_stream_recordinG #ifdef Cdrskin_libburn_has_stream_recordinG
printf(" stream_recording=\"on\"|\"off\"|number\n");
printf( printf(
" \"on\" requests to prefer speed over write\n"); " stream_recording=\"on\"|\"off\" \"on\" requests to prefer speed\n");
printf( printf(
" error management. A number prevents this with\n"); " over write error management.\n");
printf(
" byte addresses below that number.\n");
#endif #endif
#ifdef Cdrskin_allow_libburn_taO #ifdef Cdrskin_allow_libburn_taO
@ -3129,7 +3120,7 @@ struct CdrskiN {
int gracetime; int gracetime;
int dummy_mode; int dummy_mode;
int force_is_set; int force_is_set;
int stream_recording_is_set; /* see burn_write_opts_set_stream_recording() */ int stream_recording_is_set;
int single_track; int single_track;
int prodvd_cli_compatible; int prodvd_cli_compatible;
@ -6475,7 +6466,7 @@ burn_failed:;
burn_write_opts_set_force(o, !!skin->force_is_set); burn_write_opts_set_force(o, !!skin->force_is_set);
#endif #endif
#ifdef Cdrskin_libburn_has_stream_recordinG #ifdef Cdrskin_libburn_has_stream_recordinG
burn_write_opts_set_stream_recording(o, skin->stream_recording_is_set); burn_write_opts_set_stream_recording(o, !!skin->stream_recording_is_set);
#endif #endif
if(skin->dummy_mode) { if(skin->dummy_mode) {
@ -6997,7 +6988,7 @@ sorry_failed_to_eject:;
int Cdrskin_setup(struct CdrskiN *skin, int argc, char **argv, int flag) int Cdrskin_setup(struct CdrskiN *skin, int argc, char **argv, int flag)
{ {
int i,k,l,ret,source_has_size=0, idx= -1; int i,k,l,ret,source_has_size=0, idx= -1;
double value,grab_and_wait_value= -1.0, num; double value,grab_and_wait_value= -1.0;
char *cpt,*value_pt,adr[Cdrskin_adrleN],*blank_mode= ""; char *cpt,*value_pt,adr[Cdrskin_adrleN],*blank_mode= "";
struct stat stbuf; struct stat stbuf;
@ -7734,15 +7725,9 @@ set_speed:;
set_stream_recording:; set_stream_recording:;
if(strcmp(value_pt, "on")==0) if(strcmp(value_pt, "on")==0)
skin->stream_recording_is_set= 1; skin->stream_recording_is_set= 1;
else if(value_pt[0] >= '0' && value_pt[0] <= '9') { else
num= Scanf_io_size(value_pt, 0);
num/= 2048.0;
if(num >= 16 && num <= 0x7FFFFFFF)
skin->stream_recording_is_set= num;
else
skin->stream_recording_is_set= 0;
} else
skin->stream_recording_is_set= 0; skin->stream_recording_is_set= 0;
} else if(strcmp(argv[i],"-swab")==0) { } else if(strcmp(argv[i],"-swab")==0) {
skin->swap_audio_bytes= 0; skin->swap_audio_bytes= 0;

View File

@ -59,7 +59,7 @@ and to MMC-5 for DVD or BD).
GPL software included:<BR> GPL software included:<BR>
</H2> </H2>
<DL> <DL>
<DT>libburn-0.6.4</DT> <DT>libburn-0.6.0</DT>
<DD>(founded by Derek Foreman and Ben Jansens, <DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org) Thomas Schmitt from team of libburnia-project.org)
@ -148,9 +148,6 @@ as listed by option --devices.</DT>
<DD><KBD>&nbsp;&nbsp;--tell_media_space 2>/dev/null)</KBD></DD> <DD><KBD>&nbsp;&nbsp;--tell_media_space 2>/dev/null)</KBD></DD>
<DD>$<KBD>&nbsp;echo "Available: $x blocks of 2048 data bytes"</KBD></DD> <DD>$<KBD>&nbsp;echo "Available: $x blocks of 2048 data bytes"</KBD></DD>
<DT>Accelerate BD-RE writing to full nominal speed after the first 250 MB</DT>
<DD>$<KBD>&nbsp;cdrskin ... stream_recording=250m ...</KBD>
<DT>Write audio tracks to CD:</DT> <DT>Write audio tracks to CD:</DT>
<DD>$<KBD>&nbsp;cdrskin -v dev=ATA:1,0,0 speed=48 -sao \</KBD></DD> <DD>$<KBD>&nbsp;cdrskin -v dev=ATA:1,0,0 speed=48 -sao \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;track1.wav track2.au -audio -swab track3.raw</KBD></DD> <DD><KBD>&nbsp;&nbsp;track1.wav track2.au -audio -swab track3.raw</KBD></DD>
@ -194,8 +191,8 @@ or to do experiments on BD-R media.
<P> <P>
<DL> <DL>
<DT>Download as source code (see README):</DT> <DT>Download as source code (see README):</DT>
<DD><A HREF="cdrskin-0.6.4.pl00.tar.gz">cdrskin-0.6.4.pl00.tar.gz</A> <DD><A HREF="cdrskin-0.6.0.pl01.tar.gz">cdrskin-0.6.0.pl01.tar.gz</A>
(750 KB). (745 KB).
</DD> </DD>
<DD> <DD>
The cdrskin tarballs are source code identical with libburn releases The cdrskin tarballs are source code identical with libburn releases
@ -244,31 +241,37 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
<HR> <HR>
<P> <P>
Enhancements towards previous stable version cdrskin-0.6.2.pl00: Enhancements towards previous stable version cdrskin-0.5.8.pl00:
<UL> <UL>
<LI>New operating system adapter "dummy" for stdio on general X/Open systems <LI>Formatting and writing of BD-R media</LI>
</LI>
<LI>New stream recording mode with start address</LI>
<LI></LI>
<!-- <!--
<LI>none</LI> <LI>none</LI>
--> -->
</UL> </UL>
Bug fixes towards cdrskin-0.6.2.pl00: Bug fixes towards cdrskin-0.5.8.pl00:
<UL> <UL>
<LI>none</LI> <LI>none</LI>
<!-- <!--
<LI>none</LI>
--> -->
</UL> </UL>
Bug fixes towards cdrskin-0.6.0.pl00:
<UL>
<LI>BD-R media were not closed properly.
The last session staid open and unreadable.</LI>
<!--
-->
</UL>
</P>
<HR> <HR>
<P> <P>
<DL> <DL>
<DT><H3>Development snapshot, version 0.6.5 :</H3></DT> <DT><H3>Development snapshot, version 0.6.1 :</H3></DT>
<DD>Enhancements towards current stable version 0.6.4.pl00: <DD>Enhancements towards current stable version 0.6.0.pl00:
<UL> <UL>
<LI>none yet</LI> <LI>none yet</LI>
<!-- <!--
@ -277,10 +280,10 @@ Bug fixes towards cdrskin-0.6.2.pl00:
</UL> </UL>
</DD> </DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DD><A HREF="README_cdrskin_devel">README 0.6.5</A> <DD><A HREF="README_cdrskin_devel">README 0.6.1</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.6.5 --help</A></DD> <DD><A HREF="cdrskin__help_devel">cdrskin_0.6.1 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.6.5 -help</A></DD> <DD><A HREF="cdrskin_help_devel">cdrskin_0.6.1 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.6.5)</A></DD> <DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.6.1)</A></DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DT>Maintainers of cdrskin unstable packages please use SVN of <DT>Maintainers of cdrskin unstable packages please use SVN of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT> <A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
@ -300,8 +303,8 @@ admins with full system souvereignty.</DT>
<A HREF="README_cdrskin_devel">upcoming README</A> ): <A HREF="README_cdrskin_devel">upcoming README</A> ):
</DD> </DD>
<DD> <DD>
<A HREF="cdrskin-0.6.5.tar.gz">cdrskin-0.6.5.tar.gz</A> <A HREF="cdrskin-0.6.1.tar.gz">cdrskin-0.6.1.tar.gz</A>
(750 KB). (740 KB).
</DD> </DD>
<!-- This is not offered any more since spring 2008 <!-- This is not offered any more since spring 2008

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2009.03.13.080001" #define Cdrskin_timestamP "2009.01.07.140001"

View File

@ -6217,7 +6217,7 @@ libburn/libdax_msgs.h
test/libburner.c test/libburner.c
Updated copyright claims to year 2009 Updated copyright claims to year 2009
2009.01.02.160001 [2348] 2009.01.02.160001 [i2348]
Makefile.am Makefile.am
configure.ac configure.ac
README README
@ -6236,7 +6236,7 @@ Made number transition to 0.6.0
+ cdrskin/add_ts_changes_to_libburn_0_6_1 + cdrskin/add_ts_changes_to_libburn_0_6_1
Updated cdrskin tarball generator Updated cdrskin tarball generator
02 Jan 2009 [2350] []
cdrskin/changelog.txt cdrskin/changelog.txt
Documented changes and release timestamp Documented changes and release timestamp
@ -6244,299 +6244,9 @@ Documented changes and release timestamp
* Formatting and writing of BD-R media * Formatting and writing of BD-R media
* New API function burn_get_read_capacity() * New API function burn_get_read_capacity()
2009.01.04.112716 [2351] ------------------------------------ cycle - cdrskin-0.6.1 -
COPYRIGHT ------------------------------------ cycle - cdrskin-0.6.1 -
libburn/libdax_msgs.c
libburn/libdax_msgs.h
test/libburner.c
Updated copyright claims to year 2009
2009.01.04.113401 [2352]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.6.1
04 Jan 2009 [2353]
- cdrskin/add_ts_changes_to_libburn_0_5_8
- cdrskin/add_ts_changes_to_libburn_0_5_9
+ cdrskin/add_ts_changes_to_libburn_0_6_0
+ cdrskin/add_ts_changes_to_libburn_0_6_1
Updated cdrskin tarball generator
03 Jan 2009 [2354]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.04.113401
04 Jan 2009 [2356]
svn move
http://svn.libburnia-project.org/libburn/branches/ZeroSixZero
http://svn.libburnia-project.org/libburn/tags/ZeroSixZero
libburn release 0.6.0 is ready
2009.01.06.122534 [2366]
libburn/spc.c
Error texts for ASC 73 : power calibration and program memory
2009.01.06.122808 [2367] [2369]
libburn/async.c
libburn/libdax_msgs.h
Complaining and refusing more early with unformatted BD-RE
7 Jan 2009 [2370]
cdrskin/cdrskin.1
Clarification about one-time DVD and BD media
2009.01.07.154414 [2371]
libburn/write.c
Bug fix: BD-R were not correctly finalized
7 Jan 2009 [2372]
cdrskin/cdrskin_eng.html
Mentioned bug fix and pl01
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.07.154414
7 Jan 2009 [2373]
svn copy -m "Branching for libburn bugfix release 0.6.0.pl01" \
http://svn.libburnia-project.org/libburn/ \
http://svn.libburnia-project.org/libburn/
7 Jan 2009 [2374]
svn rm -m 'Removing falsly copied tag' \
http://svn.libburnia-project.org/libburn/libburn
7 Jan 2009 [2375]
svn copy -m "Branching for libburn bugfix release 0.6.0.pl01" \
http://svn.libburnia-project.org/libburn/tags/ZeroSixZero \
http://svn.libburnia-project.org/libburn/branches/ZeroSixZeroPl01
2009.01.07.140001 [branch 2376]
README
cdrskin/README
cdrskin/cdrskin_eng.html
cdrskin/cdrskin_timestamp.h
Mentioned bug fix and pl01
2009.01.07.140001 [branch 2377]
libburn/write.c
Bug fix: BD-R were not correctly finalized
7 Jan 2009 [2378]
svn move -m 'libburn bugfix release 0.6.0.pl01 is ready' \
http://svn.libburnia-project.org/libburn/branches/ZeroSixZeroPl01 \
http://svn.libburnia-project.org/libburn/tags/ZeroSixZeroPl01
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.07.154414
2009.01.09.095943 [2381]
libburn/transport.h
libburn/write.c
libburn/mmc.c
libburn/libdax_msgs.h
Recognizing BD-R media spoiled by the close bug and handling them as appendable
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.09.100210
2009.01.09.161704 [2383]
libburn/write.c
Preventing a possible bug with a burn run of more than one session at once
2009.01.11.102711 [2390]
libburn/write.c
libburn/libdax_msgs.h
Prepared eventual closing of spoiled BD-R media by a pseudo write run
11 Jan 2009 [2391]
doc/cookbook.txt
Updated cookbook about BD-R media
27 Jan 2009 [2431]
README
libburn/libburn.h
Mentioned the need for 64 bit file i/o
2009.02.04.102822 [2447]
Makefile.am
Linking with $LIBBURN_ARCH_LIBS to get -lcam on FreeBSD
4 Feb 2009 [2448]
README
cdrskin/README
Mentioned hald as possibly conflicting service
2009.02.19.192801 [2479]
libburn/spc.c
Human readable error messages with asynchronous SCSI errors
20 Feb 2009 [2482]
svn copy http://svn.libburnia-project.org/libburn/trunk
http://svn.libburnia-project.org/libburn/branches/ZeroSixZero
Preparing for libburn-0.6.0
2009.02.20.090001 [2483]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.6.2
20 Feb 2009 [2484]
- cdrskin/add_ts_changes_to_libburn_0_6_0
- cdrskin/add_ts_changes_to_libburn_0_6_1
+ cdrskin/add_ts_changes_to_libburn_0_6_2
+ cdrskin/add_ts_changes_to_libburn_0_6_3
Updated cdrskin tarball generator
------------------------------ release - cdrskin-0.6.2.pl00 - 2009.02.20.090001
* Improvements with build system for FreeBSD
2009.02.20.124909 [2485]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.6.3
20 Feb 2009 [2486]
- cdrskin/add_ts_changes_to_libburn_0_6_0
- cdrskin/add_ts_changes_to_libburn_0_6_1
+ cdrskin/add_ts_changes_to_libburn_0_6_2
+ cdrskin/add_ts_changes_to_libburn_0_6_3
Updated cdrskin tarball generator
------------------------------------ cycle - cdrskin-0.6.3 - 2009.02.20.132535
20 Feb 2009 [2489]
svn move -m libburn release 0.6.2 is ready
http://svn.libburnia-project.org/libburn/branches/ZeroSixTwo
http://svn.libburnia-project.org/libburn/tags/ZeroSixTwo
2009.02.27.143100 [2500]
libburn/libburn.h
libburn/transport.h
libburn/drive.c
libburn/options.c
libburn/write.c
libburn/mmc.c
New API function burn_drive_set_stream_recording()
2009.02.27.211707 [2501]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
New stream_recording mode with start number
2009.03.02.170126 [2513]
libburn/os.h
libburn/libdax_msgs.h
libburn/sg.c
+ libburn/os-dummy.h
+ libburn/sg-dummy.c
New operating system adapter "dummy" for stdio on POSIX-like systems
2009.03.02.193353 [2514]
libburn/drive.c
Fixed a race condition on abort with stdio writing which could cause SIGSEGV
2009.03.02.200132 [2515]
libburn/sg.c
Added a dummy function with loud compiler warning to sg.c dummy case
2009.03.03.092057 [2516]
configure.ac
libburn/sg-dummy.c
Making optional use of statvfs() in sg-dummy
------------------------------------ cycle - cdrskin-0.6.3 - 2009.03.03.092057
* New API function burn_drive_set_stream_recording()
* New stream recording mode with start number
2009.03.05.145309 [2520]
acinclude.m4
Lifted the ban on operating systems other than Linux and FreeBSD
------------------------------------ cycle - cdrskin-0.6.3 - 2009.03.05.145309
* New operating system adapter "dummy" for stdio on POSIX-like systems
2009.03.08.140120 [2522]
libburn/cleanup.c
Reacted on compiler warnings of SchilliX-0.6.7 (based on Solaris 5.11)
13 Mar 2009 [2529]
svn copy -m "Branching for libburn release 0.6.4" \
http://svn.libburnia-project.org/libburn/trunk \
http://svn.libburnia-project.org/libburn/branches/ZeroSixFour
2009.03.13.080001 [2530]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made libburn number transition to 0.6.4
13 Mar 2009 [2531]
- cdrskin/add_ts_changes_to_libburn_0_6_2
- cdrskin/add_ts_changes_to_libburn_0_6_3
+ cdrskin/add_ts_changes_to_libburn_0_6_4
+ cdrskin/add_ts_changes_to_libburn_0_6_5
Updated cdrskin tarball generator
13 Mar 2009 []
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------ release - cdrskin-0.6.4.pl00 - 2009.03.13.080001
* New operating system adapter "dummy" for stdio on general X/Open systems
* New API function burn_drive_set_stream_recording()
* New stream recording mode with start address
2009.03.13.135818 [2532]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made libburn number transition to 0.6.5
13 Mar 2009 [2533]
- cdrskin/add_ts_changes_to_libburn_0_6_2
- cdrskin/add_ts_changes_to_libburn_0_6_3
+ cdrskin/add_ts_changes_to_libburn_0_6_4
+ cdrskin/add_ts_changes_to_libburn_0_6_5
Updated cdrskin tarball generator
------------------------------------ cycle - cdrskin-0.6.5 -
------------------------------------ cycle - cdrskin-0.6.5 -
=============================================================================== ===============================================================================
TODO TODO
@ -6545,6 +6255,8 @@ Updated cdrskin tarball generator
--------------------------------- bugs ------------------------------------- --------------------------------- bugs -------------------------------------
- Needed is a system dependend facility: dev_t <-> major, minor
- Do something about drive->buffer asynchronous race conditions - Do something about drive->buffer asynchronous race conditions
and dangerous use of local heap memory. and dangerous use of local heap memory.
(The various asynchronous operations use the same buffer (The various asynchronous operations use the same buffer
@ -6581,6 +6293,9 @@ problem with telltoc: double descriptor list from before load and after load
What about cdrskin rc files ? Forward with fallback runs ? What about cdrskin rc files ? Forward with fallback runs ?
cdrskin/README
Thin out
[] []
Emulate -dummy on overwriteables ? Emulate -dummy on overwriteables ?

View File

@ -7,7 +7,7 @@
debug_opts="-O2" debug_opts="-O2"
def_opts= def_opts=
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1" largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
libvers="-DCdrskin_libburn_0_6_4" libvers="-DCdrskin_libburn_0_6_0"
cleanup_src_or_obj="libburn/cleanup.o" cleanup_src_or_obj="libburn/cleanup.o"
libdax_msgs_o="libburn/libdax_msgs.o" libdax_msgs_o="libburn/libdax_msgs.o"
libdax_audioxtr_o="libburn/libdax_audioxtr.o" libdax_audioxtr_o="libburn/libdax_audioxtr.o"
@ -33,15 +33,15 @@ do
libdax_audioxtr_o= libdax_audioxtr_o=
libdax_msgs_o="libburn/message.o" libdax_msgs_o="libburn/message.o"
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c" cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
elif test "$i" = "-libburn_0_6_4" elif test "$i" = "-libburn_0_6_0"
then then
libvers="-DCdrskin_libburn_0_6_4" libvers="-DCdrskin_libburn_0_6_0"
libdax_audioxtr_o="libburn/libdax_audioxtr.o" libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o" libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o" cleanup_src_or_obj="libburn/cleanup.o"
elif test "$i" = "-libburn_svn" elif test "$i" = "-libburn_svn"
then then
libvers="-DCdrskin_libburn_0_6_5" libvers="-DCdrskin_libburn_0_6_1"
libdax_audioxtr_o="libburn/libdax_audioxtr.o" libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o" libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o" cleanup_src_or_obj="libburn/cleanup.o"
@ -75,8 +75,10 @@ do
echo "Options:" echo "Options:"
echo " -compile_cdrfifo compile program cdrskin/cdrfifo." echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
echo " -compile_dewav compile program test/dewav without libburn." echo " -compile_dewav compile program test/dewav without libburn."
echo " -libburn_0_6_4 set macro to match libburn-0.6.4" echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
echo " -libburn_0_6_0 set macro to match libburn-0.6.0"
echo " -libburn_svn set macro to match current libburn-SVN." echo " -libburn_svn 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 " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
echo " -experimental use newly introduced libburn features." echo " -experimental use newly introduced libburn features."
echo " -oldfashioned use pre-0.2.2 libburn features only." echo " -oldfashioned use pre-0.2.2 libburn features only."

View File

@ -1,4 +1,4 @@
AC_INIT([libburn], [0.6.4], [http://libburnia-project.org]) AC_INIT([libburn], [0.6.0], [http://libburnia-project.org])
AC_PREREQ([2.50]) AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h]) dnl AC_CONFIG_HEADER([config.h])
@ -42,8 +42,7 @@ dnl So this is a superspace of the SONAME version space. To avoid
dnl ill SONAME, the value of CURRENT must be larger than AGE. dnl ill SONAME, the value of CURRENT must be larger than AGE.
dnl See also http://www.gnu.org/software/libtool/manual.html#Interfaces dnl See also http://www.gnu.org/software/libtool/manual.html#Interfaces
dnl dnl
dnl On Linux the name of the dynamic library will be dnl The name of the dynamic library will be libburn.so.$SONAME.$AGE.$REV .
dnl libburn.so.$SONAME.$AGE.$REV
dnl In the terminology of this file: dnl In the terminology of this file:
dnl CURRENT = LT_CURRENT dnl CURRENT = LT_CURRENT
dnl AGE = LT_AGE dnl AGE = LT_AGE
@ -69,8 +68,6 @@ dnl 0.5.4 = libburn.so.4.19.0
dnl 0.5.6 = libburn.so.4.21.0 dnl 0.5.6 = libburn.so.4.21.0
dnl 0.5.8 = libburn.so.4.23.0 dnl 0.5.8 = libburn.so.4.23.0
dnl 0.6.0 = libburn.so.4.25.0 dnl 0.6.0 = libburn.so.4.25.0
dnl 0.6.2 = libburn.so.4.27.0
dnl 0.6.4 = libburn.so.4.29.0
dnl dnl
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here. dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE. dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
@ -96,7 +93,7 @@ dnl
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_* dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
BURN_MAJOR_VERSION=0 BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=6 BURN_MINOR_VERSION=6
BURN_MICRO_VERSION=4 BURN_MICRO_VERSION=0
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
AC_SUBST(BURN_MAJOR_VERSION) AC_SUBST(BURN_MAJOR_VERSION)
@ -107,15 +104,15 @@ AC_SUBST(BURN_VERSION)
dnl Libtool versioning dnl Libtool versioning
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
dnl dnl
dnl ts A90313 dnl ts A90102
dnl This is the release version libburn-0.6.4 = libburn.so.4.29.0 dnl This is the release version libburn-0.6.0 = libburn.so.4.25.0
dnl ### This is the development version after above release version dnl ### This is the development version after above release version
dnl LT_CURRENT++, LT_AGE++ has not yet happened. dnl LT_CURRENT++, LT_AGE++ has not yet happened.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile. dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl dnl
dnl SONAME = 33 - 29 = 4 . Linux library name = libburn.so.4.29.0 dnl SONAME = 29 - 25 = 4 . Library name = libburn.so.4.25.0
LT_CURRENT=33 LT_CURRENT=29
LT_AGE=29 LT_AGE=25
LT_REVISION=0 LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -164,16 +161,6 @@ TARGET_SHIZZLE
AC_SUBST(ARCH) AC_SUBST(ARCH)
AC_SUBST(LIBBURN_ARCH_LIBS) AC_SUBST(LIBBURN_ARCH_LIBS)
dnl ts A90303
dnl Check the preconditions for using statvfs() in sg-dummy
dnl (sg-linux and sg-freebsd use statvfs() unconditionally)
STATVFS_DEF=-DLibburn_os_has_statvfS
AC_CHECK_HEADER(sys/statvfs.h, X=, STATVFS_DEF=)
AC_CHECK_FUNC([statvfs], X=, STATVFS_DEF=)
dnl If this would be done more specifically in Makefile.am
dnl via libburn_libburn_la_CFLAGS then undesired .o file names would emerge
CFLAGS="$CFLAGS $STATVFS_DEF"
dnl Add compiler-specific flags dnl Add compiler-specific flags
dnl See if the user wants aggressive optimizations of the code dnl See if the user wants aggressive optimizations of the code

View File

@ -1,4 +1,4 @@
libburnia-project.org Optical Media Rotisserie Recipes as of January 2009 libburnia-project.org Optical Media Rotisserie Recipes as of April 2008
Content: Content:
- TAO Multi-Session CD Cookbook (CD-R, CD-RW) - TAO Multi-Session CD Cookbook (CD-R, CD-RW)
@ -6,7 +6,6 @@ Content:
- Overwriteable DVD Cookbook (DVD-RAM, DVD+RW, DVD-RW, BD-RE) - Overwriteable DVD Cookbook (DVD-RAM, DVD+RW, DVD-RW, BD-RE)
- Sequential DVD-R[W] Cookbook - Sequential DVD-R[W] Cookbook
- DVD+R[/DL] Cookbook - DVD+R[/DL] Cookbook
- BD-R Cookbook
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
TAO Multi-Session CD Cookbook TAO Multi-Session CD Cookbook
@ -405,7 +404,7 @@ correctness of Pre-gap and Post-gap would become evident.
Inspired by Andy Polyakov's http://fy.chalmers.se/~appro/linux/DVD+RW/tools , Inspired by Andy Polyakov's http://fy.chalmers.se/~appro/linux/DVD+RW/tools ,
backed by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/ backed by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/
by own experiments with drives NEC ND-4570A, LG GSA-4082B, PHILIPS SPD3300L, by own experiments with drives NEC ND-4570A, LG GSA-4082B, PHILIPS SPD3300L,
LG GGW H20L, and by BD-RE experiments done by Giulio Orsero on LG BE06LU10. and by BD-RE experiments done by Giulio Orsero on LG BE06LU10.
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net> For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net>
@ -698,14 +697,9 @@ managment. There is no way to increase payload capacity by format 01h.
(mmc5r03c.pdf 6.5.4.2.2.1) (mmc5r03c.pdf 6.5.4.2.2.1)
With BD-RE there are three format types : 00h, 30h and 31h. With BD-RE there are three format types : 00h, 30h and 31h.
00h offers the default size format. This may be the only fast formatting 00h offers the default size format.
mode that is offered by the drive.
Feature 0023h tells whether format 31h and certain 30h subtypes are available.
(mmc5r03c.pdf 5.3.13)
30h offers several sizes with defect management. Usually there are three 30h offers several sizes with defect management. Usually there are three
sizes given: #1: default size, #2: maximum spare area, #3: minimal spare. size to choose: #1: default size, #2: maximum spare area, #3: minimal spare.
One may demand any spare size between maximum and minimum. There may be quick
certification and full certification. See feature 0023h.
31h offers a single size and disables defect management. This has the side 31h offers a single size and disables defect management. This has the side
effect to speed up writing to nominal speed. effect to speed up writing to nominal speed.
(mmc5r03c.pdf 6.5.4.2.15, 6.24.3.3, Table 472) (mmc5r03c.pdf 6.5.4.2.15, 6.24.3.3, Table 472)
@ -744,7 +738,7 @@ DVD-RAM and BD-RE tuning :
A special aspect of DVD-RAM and BD-RE is their low speed with write operations, A special aspect of DVD-RAM and BD-RE is their low speed with write operations,
which usually is only half than the nominal speed of media and drive. which usually is only half than the nominal speed of media and drive.
This is blamed to the automatic checkreading which happens for managing This is blamed to the automatic checkreading which happens ifor managing
eventual defects. eventual defects.
Defect management of BD-RE can be disabled by format type 31h. See above. Defect management of BD-RE can be disabled by format type 31h. See above.
@ -755,7 +749,7 @@ The only known way to get full speed from DVD-RAM or BD-RE with enabled defect
management is the use of AAh WRITE12 with Streaming Bit set to 1. management is the use of AAh WRITE12 with Streaming Bit set to 1.
(mmc5r03c.pdf 6.45) (mmc5r03c.pdf 6.45)
With some DVD-RAM drives this fails if a write buffer is not full 32 kB. With some DVD-RAM drives this fails if a write buffer is not full 32 kB.
With the tested BD-RE one has to write full 64 kB buffers. With the tested BD-RE ione has to write write full 64 kB buffers.
Although it seems not optimal, this is specified not only to disable the Although it seems not optimal, this is specified not only to disable the
cumbersome checkread but also to ignore known defects and to write data cumbersome checkread but also to ignore known defects and to write data
@ -766,10 +760,10 @@ incorrectable errors.
Caveat: Caveat:
MMC-5 does not guarantee AAh WRITE12 to work on DVD-RAM or BD-RE at all. MMC-5 does not guarantee AAh WRITE12 to work on DVD-RAM or BD-RE at all.
None of the features of profiles 0012h and 0043h promises the existence of None of the features of profiles 0012h and 0043 promises the existence of
AAh WRITE12. AAh WRITE12.
Nevertheless it worked on all tested drives is proper alignment was observed.
(mmc5r03c.pdf 5.4.13, 6.45) (mmc5r03c.pdf 5.4.13, 6.45)
Nevertheless it worked on all tested drives if proper alignment was observed.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
@ -796,9 +790,9 @@ The bytes 0 to 5 of a PVD block are
0x01 'C' 'D' '0' '0' '1' 0x01 'C' 'D' '0' '0' '1'
The sector count can then be read from byte 80 to 83 The sector count can then be read from byte 80 to 83
sectors= pvd[80] | (pvd[81] << 8) | (pvd[82] << 16) | (pvd[83] << 24); sectors= pvd[80] | (pvd[81] << 8) | (pvd[82] << 16) | (pvd[83] << 24);
(Ecma-119.pdf 8.4)
To support CD, DVD and BD media alike, it is advisable to round the NWA To support CD, DVD and BD media alike, it is advisable to round the NWA
to the next multiple of 32 (= 64 KiB). to the next multiple of 32 (= 64 KiB).
(Ecma-119.pdf 8.4)
So one can use 0 as MSC1 and prepare a new ISO session for the computed NWA. So one can use 0 as MSC1 and prepare a new ISO session for the computed NWA.
After writing the session it is necessary to patch the PVD at LBA 16. After writing the session it is necessary to patch the PVD at LBA 16.
@ -807,7 +801,7 @@ It is stored in both notations LSB and MSB:
for(i= 0; i < 4; i++) for(i= 0; i < 4; i++)
pvd[87 - i]= pvd[80 + i]= (sectors >> (8 * i)) & 0xff; pvd[87 - i]= pvd[80 + i]= (sectors >> (8 * i)) & 0xff;
cdrskin --grow_overwriteable_iso not only patches the sector fields of the cdrskin --grow_overwriteable not only patches the sector fields of the
PVD block but also the blocks up to LBA 31 which begin with PVD block but also the blocks up to LBA 31 which begin with
0xff 'C' 'D' '0' '0' '1' 0xff 'C' 'D' '0' '0' '1'
libisoburn submits 64 KiB data buffer to libisofs before image generation and libisoburn submits 64 KiB data buffer to libisofs before image generation and
@ -1279,118 +1273,3 @@ in http://libburnia-project.org/ticket/13 .
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-------------------------------------------------------------------------------
BD-R Cookbook
-------------------------------------------------------------------------------
Inspired by reading mmc5r03c.pdf from http://www.t10.org/ftp/t10/drafts/mmc5/
backed by experiments iwith drive LG GGW H20L.
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net>
-------------------------------------------------------------------------------
Media type can be recognized by Current Profile from 46h GET CONFIGURATION.
(mmc5r03c.pdf 6.6.2.1)
BD-R 0042h
There are two basic recording modes defined: Sequential Recording Mode SRM and
Random Recording Mode RRM. The latter is optional and for now not topic of this
text.
(mmc5r03c.pdf 4.5.3.5)
- SRM Formatting
- Writing a session in SRM-POW
(- Pseudo-OverWrite SRM+POW)
-------------------------------------------------------------------------------
SRM Formatting:
Despite being write-once media BD-R can optionally carry some formatting.
SRM has a disc structure model with tracks and sessions.
Several tracks may be open at the same time, each having its own NWA.
(mmc5r03c.pdf 4.5.3.5.2.2)
This structure is formatted onto blank media automatically as soon as the
first serious write attempt occurs.
(mmc5r03c.pdf 4.5.3.5)
Before such a write attempt, blank media may be explicitely formatted with
spares, which provide defect management.
(mmc5r03c.pdf 4.5.3.5.3)
Tracks get created from other tracks via RESERVE TRACK splitting.
(mmc5r03c.pdf 4.5.3.5.2.5)
On top of defect management there may be Pseudo-OverWrite SRM+POW, a costly
way to write several times to the same LBA. See below.
Fully sequential states are called SRM-POW.
(mmc5r03c.pdf 4.5.3.5.4)
Explicite formatting is done by 04h FORMAT UNIT. Its data payload consists
of a Format List Header and a Format Descriptor. It is advisable to set
the Immed bit and the FOV bit in header byte number 1. The descriptor should
be a copy of a descriptor from 23h READ FORMAT CAPACITIES but the size may be
adjusted within a certain range.
(mmc5r03c.pdf 6.5, 6.5.3.2, 6.5.3.3)
Format type 00h creates SRM layouts with a default number of spares (or
eventually RRM) chosen by the format sub-type:
00b = SRM with support for POW
01b = SRM without POW (but with some spares for defect management)
10b = (RRM)
(mmc5r03c.pdf 6.5.4.2.1.6)
Format type 32h uses the same sub-types but allows to allocate non-default
amounts of spares. Similar to BD-RE format 31h, three format descriptors are
offered: #1: default size, #2: maximum spare area, #3: minimal spare.
The size may be chosen within that range.
The sense behind the Type Dependent Parameters is obscure
to me. Best will be to set ISA_V and TDMA_V to 0.
(mmc5r03c.pdf 6.5.4.2.1.17)
-------------------------------------------------------------------------------
Writing a session in SRM:
The procedure and constraints for writing BD-R SRM-POW are very similar to
DVD+R. libburn flatly re-uses its DVD+R code except the Close Function for
finalizing a disc.
In short:
If all written sessions are closed, then there is exactly one NWA.
In the beginning there is an empty session and track. A new track can be
written either with pre-announced size (by RESERVE TRACK) or open-end by
simply starting to write to the NWA. When done the track gets closed by
close function 001b. Then either session or disc gets closed depending on
the Close Function used:
- Close Function 010b closes the session and keeps the media appendable
(same as with DVD+R)
- Close Function 110b finalizes the media and makes it read-only.
(differs from libburn DVD+R procedure which uses 101b)
-------------------------------------------------------------------------------
Pseudo-OverWrite POW: (no used yet by libburn)
This enhancement of SRM emulates overwriting of existing data blocks.
(mmc5r03c.pdf 4.5.3.5.4)
POW establishes a virtual vLBA space on top of the real address space rLBA.
All read and write commands deal with vLBA. It seems that track NWAs are
assumed to be identical in vLBA space and in rLBA space.
It is not clear whether one may write to vLBA blocks which are neither written
yet nor at one of the track NWAs. Probably not, or else one could make NWAs run
into vLBAs which are associated with older rLBAs.
Replacing invalidated blocks consumes addresses in rLBA space at the NWA of
some track. I.e. no spares are consumed by POW. Nevertheless it is costly by
a special map called Orphanage. It covers rLBA which have been consumed
by differing vLBAs. It never shrinks and can grow with each write to remapped
addresses.
To avoid heavy Orphanage growth it is advised to write mostly to vLBA which
still coincide with their rLBA. E.g. those addresses which have neither been
written as rLBA nor as vLBA yet. So one should begin the vLBA of new sessions
at the NWA of a sufficiently sized track.
(mmc5r03c.pdf 4.5.3.5.4.2 , 4.5.3.6.9)
-------------------------------------------------------------------------------

View File

@ -527,15 +527,12 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
{ {
struct write_opts o; struct write_opts o;
char reasons[BURN_REASONS_LEN+80]; char reasons[BURN_REASONS_LEN+80];
struct burn_drive *d;
d = opts->drive;
/* ts A61006 */ /* ts A61006 */
/* a ssert(!SCAN_GOING()); */ /* a ssert(!SCAN_GOING()); */
/* a ssert(!find_worker(opts->drive)); */ /* a ssert(!find_worker(opts->drive)); */
if ((SCAN_GOING()) || find_worker(opts->drive) != NULL) { if ((SCAN_GOING()) || find_worker(opts->drive) != NULL) {
libdax_msgs_submit(libdax_messenger, d->global_index, libdax_msgs_submit(libdax_messenger, opts->drive->global_index,
0x00020102, 0x00020102,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
"A drive operation is still going on (want to write)", "A drive operation is still going on (want to write)",
@ -544,14 +541,14 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
} }
/* For the next lines any return indicates failure */ /* For the next lines any return indicates failure */
d->cancel = 1; opts->drive->cancel = 1;
/* ts A70203 : people have been warned in API specs */ /* ts A70203 : people have been warned in API specs */
if (opts->write_type == BURN_WRITE_NONE) if (opts->write_type == BURN_WRITE_NONE)
return; return;
if (d->drive_role == 0) { if (opts->drive->drive_role == 0) {
libdax_msgs_submit(libdax_messenger, d->global_index, libdax_msgs_submit(libdax_messenger, opts->drive->global_index,
0x00020146, 0x00020146,
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH, LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
"Drive is a virtual placeholder (null-drive)", 0, 0); "Drive is a virtual placeholder (null-drive)", 0, 0);
@ -559,9 +556,9 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
} }
/* ts A61007 : obsolete Assert in spc_select_write_params() */ /* ts A61007 : obsolete Assert in spc_select_write_params() */
if (d->drive_role == 1 && !d->mdata->valid) { if (opts->drive->drive_role == 1 && !opts->drive->mdata->valid) {
libdax_msgs_submit(libdax_messenger, libdax_msgs_submit(libdax_messenger,
d->global_index, 0x00020113, opts->drive->global_index, 0x00020113,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
"Drive capabilities not inquired yet", 0, 0); "Drive capabilities not inquired yet", 0, 0);
return; return;
@ -574,33 +571,21 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
if (burn_precheck_write(opts, disc, reasons + strlen(reasons), 1) if (burn_precheck_write(opts, disc, reasons + strlen(reasons), 1)
<= 0) { <= 0) {
libdax_msgs_submit(libdax_messenger, libdax_msgs_submit(libdax_messenger,
d->global_index, 0x00020139, opts->drive->global_index, 0x00020139,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
reasons, 0, 0); reasons, 0, 0);
return; return;
} }
/* ts A90106 : early catching of unformatted BD-RE */ opts->drive->cancel = 0; /* End of the return = failure area */
if (d->current_profile == 0x43)
if (d->read_format_capacities(d, 0x00) > 0 &&
d->format_descr_type != BURN_FORMAT_IS_FORMATTED) {
libdax_msgs_submit(libdax_messenger,
d->global_index, 0x00020168,
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
"Media not properly formatted. Cannot write.",
0, 0);
return;
}
d->cancel = 0; /* End of the return = failure area */ o.drive = opts->drive;
o.drive = d;
o.opts = opts; o.opts = opts;
o.disc = disc; o.disc = disc;
opts->refcount++; opts->refcount++;
add_worker(Burnworker_type_writE, d, add_worker(Burnworker_type_writE, opts->drive,
(WorkerFunc) write_disc_worker_func, &o); (WorkerFunc) write_disc_worker_func, &o);
} }

View File

@ -97,8 +97,8 @@ static int Cleanup_handler_exit(int exit_value, int signum, int flag)
return(2); return(2);
} }
if(cleanup_exiting) { if(cleanup_exiting) {
fprintf(stderr,"cleanup: ABORT : repeat by pid=%.f, signum=%d\n", fprintf(stderr,"cleanup: ABORT : repeat by pid=%d, signum=%d\n",
(double) getpid(), signum); getpid(),signum);
return(0); return(0);
} }
cleanup_exiting= 1; cleanup_exiting= 1;

View File

@ -62,7 +62,6 @@ int burn_setup_drive(struct burn_drive *d, char *fname)
d->stdio_fd = -1; d->stdio_fd = -1;
d->status = BURN_DISC_UNREADY; d->status = BURN_DISC_UNREADY;
d->do_stream_recording = 0; d->do_stream_recording = 0;
d->stream_recording_start= 0;
return 1; return 1;
} }
@ -793,18 +792,6 @@ enum burn_drive_status burn_drive_get_status(struct burn_drive *d,
return d->busy; return d->busy;
} }
int burn_drive_set_stream_recording(struct burn_drive *d, int recmode,
int start, int flag)
{
if (recmode == 1)
d->do_stream_recording = 1;
else if (recmode == -1)
d->do_stream_recording = 0;
d->stream_recording_start = start;
return(1);
}
void burn_drive_cancel(struct burn_drive *d) void burn_drive_cancel(struct burn_drive *d)
{ {
pthread_mutex_lock(&d->access_lock); pthread_mutex_lock(&d->access_lock);
@ -1757,18 +1744,10 @@ int burn_abort(int patience,
occup = burn_drive_is_occupied(&(drive_array[i])); occup = burn_drive_is_occupied(&(drive_array[i]));
if(occup == -2) if(occup == -2)
continue; continue;
#ifdef NIX
/* <<< this causes a race condition with drive usage
and drive disposal
*/
if(drive_array[i].drive_role != 1) { if(drive_array[i].drive_role != 1) {
drive_array[i].busy = BURN_DRIVE_IDLE; drive_array[i].busy = BURN_DRIVE_IDLE;
burn_drive_forget(&(drive_array[i]), 1); burn_drive_forget(&(drive_array[i]), 1);
} else } else if(occup <= 10) {
#endif /* NIX */
if(occup <= 10) {
burn_drive_forget(&(drive_array[i]), 1); burn_drive_forget(&(drive_array[i]), 1);
} else if(occup <= 100) { } else if(occup <= 100) {
if(first_round) if(first_round)

View File

@ -3,15 +3,11 @@
#ifndef LIBBURN_H #ifndef LIBBURN_H
#define LIBBURN_H #define LIBBURN_H
/* /* Needed for off_t which is the (POSIX-ly) appropriate type for
expressing a file or stream size.
Applications must use 64 bit off_t. E.g. by defining
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
or take special precautions to interface with the library by 64 bit integers
where this .h files prescribe off_t. Not to use 64 bit file i/o will keep the
application from producing and processing ISO images of more than 2 GB 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 <sys/types.h> #include <sys/types.h>
@ -1388,28 +1384,6 @@ int burn_precheck_write(struct burn_write_opts *o, struct burn_disc *disc,
*/ */
void burn_disc_write(struct burn_write_opts *o, struct burn_disc *disc); void burn_disc_write(struct burn_write_opts *o, struct burn_disc *disc);
/* ts A90227 */
/** Control stream recording during the write run and eventually set the start
LBA for stream recording.
Stream recording is set from struct burn_write_opts when the write run
gets started. See burn_write_opts_set_stream_recording().
The call described here can be used later to override this setting and
to program automatic switching at a given LBA. It also affects subsequent
calls to burn_random_access_write().
@param drive The drive which performs the write operation.
@param recmode -1= disable stream recording
0= leave setting as is
1= enable stream recording
@param start The LBA where actual stream recording shall start.
(0 means unconditional stream recording)
@param flag Bitfield for control purposes (unused yet, submit 0).
@return 1=success , <=0 failure
@since 0.6.4
*/
int burn_drive_set_stream_recording(struct burn_drive *drive, int recmode,
int start, int flag);
/** Cancel an operation on a drive. /** Cancel an operation on a drive.
This will only work when the drive's busy state is BURN_DRIVE_READING or This will only work when the drive's busy state is BURN_DRIVE_READING or
BURN_DRIVE_WRITING. BURN_DRIVE_WRITING.
@ -1928,15 +1902,12 @@ void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force);
/* ts A80412 */ /* ts A80412 */
/** Eventually makes use of the more modern write command AAh WRITE12 and /** Eventually makes use of the more modern write command AAh WRITE12 and
sets the Streaming bit. With DVD-RAM and BD this can override the sets the Streaming bit. With DVD-RAM this can override the traditional
traditional slowdown to half nominal speed. But if it speeds up writing slowdown to half nominal speed. But if it speeds up writing then it also
then it also disables error management and correction. Weigh your disables error management and correction. Weigh your priorities.
priorities. This affects the write operations of burn_disc_write() This only affects the write operations of burn_disc_write().
and subsequent calls of burn_random_access_write().
@param opts The write opts to change @param opts The write opts to change
@param value 0=use 2Ah WRITE10, 1=use AAh WRITE12 with Streaming bit @param value 0=use 2Ah WRITE10, 1=use AAh WRITE12 with Streaming bit
@since 0.6.4:
>=16 use WRITE12 but not before the LBA given by value
@since 0.4.6 @since 0.4.6
*/ */
void burn_write_opts_set_stream_recording(struct burn_write_opts *opts, void burn_write_opts_set_stream_recording(struct burn_write_opts *opts,
@ -2260,7 +2231,7 @@ void burn_version(int *major, int *minor, int *micro);
*/ */
#define burn_header_version_major 0 #define burn_header_version_major 0
#define burn_header_version_minor 6 #define burn_header_version_minor 6
#define burn_header_version_micro 4 #define burn_header_version_micro 0
/** Note: /** Note:
Above version numbers are also recorded in configure.ac because libtool Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time. wants them as parameters at build time.

View File

@ -540,15 +540,6 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
0x00020165 (WARNING,HIGH) = Drive does not support fast formatting 0x00020165 (WARNING,HIGH) = Drive does not support fast formatting
0x00020166 (WARNING,HIGH) = Drive does not support full formatting 0x00020166 (WARNING,HIGH) = Drive does not support full formatting
0x00020167 (SORRY,HIGH) = Drive does not support non-default formatting 0x00020167 (SORRY,HIGH) = Drive does not support non-default formatting
0x00020168 (FAILURE,HIGH) = Media not properly formatted. Cannot write.
0x00020169 (WARNING,HIGH) = Last session on media is still open
0x0002016a (FAILURE,HIGH) = No MMC transport adapter is present
0x0002016b (WARNING,HIGH) = No MMC transport adapter is present
0x0002016c (DEBUG,HIGH) = No MMC transport adapter is present
0x00020170 (NOTE,HIGH) = Closing open session before writing new one
0x00020171 (NOTE,HIGH) = Closing BD-R with accidently open session
libdax_audioxtr: libdax_audioxtr:
0x00020200 (SORRY,HIGH) = Cannot open audio source file 0x00020200 (SORRY,HIGH) = Cannot open audio source file

View File

@ -55,10 +55,10 @@ extern struct libdax_msgs *libdax_messenger;
/* ts A70306 */ /* ts A70306 */
#define Libburn_support_dvd_plus_R 1 #define Libburn_support_dvd_plus_R 1
/* ts A70509 : handling 0x41 as read-only type */ /* ts A70509 : handling 0x41 and 0x42 as read-only types */
#define Libburn_support_bd_r_readonlY 1 #define Libburn_support_bd_r_readonlY 1
/* ts A81208 */ /* >>> ts A81208 */
#define Libburn_support_bd_plus_r_srM 1 #define Libburn_support_bd_plus_r_srM 1
@ -124,7 +124,6 @@ extern struct libdax_msgs *libdax_messenger;
BD-RE is now an officially supported profile. BD-RE is now an officially supported profile.
ts A81209 : The first two sessions have been written to BD-R SRM ts A81209 : The first two sessions have been written to BD-R SRM
(auto formatted without Defect Management). (auto formatted without Defect Management).
ts A90107 : BD-R is now supported media type
*/ */
/* ts A70519 : With MMC commands of data direction FROM_DRIVE: /* ts A70519 : With MMC commands of data direction FROM_DRIVE:
@ -745,7 +744,7 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf)
mmc_wait_for_buffer_free(d, buf); mmc_wait_for_buffer_free(d, buf);
/* ts A80412 */ /* ts A80412 */
if(d->do_stream_recording > 0 && start >= d->stream_recording_start) { if(d->do_stream_recording > 0) {
/* >>> ??? is WRITE12 available ? */ /* >>> ??? is WRITE12 available ? */
/* >>> ??? inquire feature 107h Stream Writing bit ? */ /* >>> ??? inquire feature 107h Stream Writing bit ? */
@ -1467,8 +1466,8 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
struct command c; struct command c;
char msg[160]; char msg[160];
/* ts A70131 : had to move mmc_read_toc() to end of function */ /* ts A70131 : had to move mmc_read_toc() to end of function */
int do_read_toc = 0, disc_status, len, old_alloc_len; int do_read_toc = 0, session_state, disc_status, len, old_alloc_len;
int ret, number_of_sessions = -1; int ret;
/* ts A61020 */ /* ts A61020 */
d->start_lba = d->end_lba = -2000000000; d->start_lba = d->end_lba = -2000000000;
@ -1527,9 +1526,6 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
d->erasable = !!(data[2] & 16); d->erasable = !!(data[2] & 16);
disc_status = data[2] & 3; disc_status = data[2] & 3;
d->state_of_last_session = (data[2] >> 2) & 3;
number_of_sessions = (data[9] << 8) | data[4];
if (d->current_profile == 0x10 || d->current_profile == 0x40) { if (d->current_profile == 0x10 || d->current_profile == 0x40) {
/* DVD-ROM , BD-ROM */ /* DVD-ROM , BD-ROM */
disc_status = 2; /* always full and finalized */ disc_status = 2; /* always full and finalized */
@ -1585,27 +1581,12 @@ regard_as_blank:;
ret = mmc_read_capacity(d); ret = mmc_read_capacity(d);
/* Freshly formatted, unwritten BD-R pretend to be appendable /* Freshly formatted, unwritten BD-R pretend to be appendable
but in our model they need to be regarded as blank. but in our model they need to be regarded as blank.
Criterion: BD-R seq, read capacity known and 0,
declared appendable, single empty session
*/ */
if (d->current_profile == 0x41 && if (d->current_profile == 0x41 && ret > 0 &&
d->status == BURN_DISC_APPENDABLE && d->status == BURN_DISC_APPENDABLE &&
ret > 0 && d->media_read_capacity == 0 && d->media_read_capacity == 0)
d->state_of_last_session == 0 && number_of_sessions == 1)
goto regard_as_blank; goto regard_as_blank;
if (d->current_profile == 0x41 &&
d->status == BURN_DISC_APPENDABLE &&
d->state_of_last_session == 1) {
/* ??? apply this test to other media types ? */
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020169,
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH,
"Last session on media is still open.", 0, 0);
}
do_read_toc = 1; do_read_toc = 1;
break; break;
} }
@ -1653,9 +1634,10 @@ regard_as_blank:;
d->complete_sessions = 0; d->complete_sessions = 0;
} else { } else {
/* ts A70131 : number of non-empty sessions */ /* ts A70131 : number of non-empty sessions */
d->complete_sessions = number_of_sessions; d->complete_sessions = (data[9] << 8) | data[4];
session_state = (data[2] >> 2) & 3;
/* mmc5r03c.pdf 6.22.3.1.3 State of Last Session: 3=complete */ /* mmc5r03c.pdf 6.22.3.1.3 State of Last Session: 3=complete */
if (d->state_of_last_session != 3 && d->complete_sessions >= 1) if (session_state != 3 && d->complete_sessions >= 1)
d->complete_sessions--; d->complete_sessions--;
/* ts A70129 : mmc5r03c.pdf 6.22.3.1.7 /* ts A70129 : mmc5r03c.pdf 6.22.3.1.7
@ -2870,8 +2852,7 @@ selected_not_suitable:;
d->current_profile == 0x14 || d->current_profile == 0x14 ||
d->current_profile == 0x1a || d->current_profile == 0x1a ||
d->current_profile == 0x12 || d->current_profile == 0x12 ||
d->current_profile == 0x41 || d->current_profile == 0x43))
d->current_profile == 0x43))
goto unsuitable_media; goto unsuitable_media;
format_type = d->format_descriptors[index].type; format_type = d->format_descriptors[index].type;
@ -2879,8 +2860,7 @@ selected_not_suitable:;
format_type == 0x10 || format_type == 0x10 ||
format_type == 0x11 || format_type == 0x13 || format_type == 0x11 || format_type == 0x13 ||
format_type == 0x15 || format_type == 0x26 || format_type == 0x15 || format_type == 0x26 ||
format_type == 0x30 || format_type == 0x31 || format_type == 0x30 || format_type == 0x31 ))
format_type == 0x32))
goto selected_not_suitable; goto selected_not_suitable;
if (flag & 4) { if (flag & 4) {
num_of_blocks = num_of_blocks =
@ -2892,8 +2872,7 @@ selected_not_suitable:;
c.page->data[9 + i] = c.page->data[9 + i] =
( d->format_descriptors[index].tdp >> ( d->format_descriptors[index].tdp >>
(16 - 8 * i)) & 0xff; (16 - 8 * i)) & 0xff;
if (format_type == 0x30 || format_type == 0x31 || if (format_type == 0x30 || format_type == 0x31) {
format_type == 0x32) {
if (flag & 64) if (flag & 64)
format_sub_type = 3; /* Quick certification */ format_sub_type = 3; /* Quick certification */
else else
@ -3820,7 +3799,6 @@ int mmc_setup_drive(struct burn_drive *d)
d->bg_format_status = -1; d->bg_format_status = -1;
d->num_format_descr = 0; d->num_format_descr = 0;
d->complete_sessions = 0; d->complete_sessions = 0;
d->state_of_last_session = -1;
d->last_track_no = 1; d->last_track_no = 1;
d->media_capacity_remaining = 0; d->media_capacity_remaining = 0;
d->media_lba_limit = 0; d->media_lba_limit = 0;

View File

@ -385,7 +385,7 @@ void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force)
void burn_write_opts_set_stream_recording(struct burn_write_opts *opts, void burn_write_opts_set_stream_recording(struct burn_write_opts *opts,
int value) int value)
{ {
opts->do_stream_recording = value; opts->do_stream_recording = !!value;
} }

View File

@ -1,63 +0,0 @@
/* os-dummy.h
Operating system specific libburn definitions and declarations. Included
by os.h in case of compilation for
Unknown POSIX like systems
with the dummy MMC transport adapter sg-dummy.c
Copyright (C) 2009 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
*/
/** List of all signals which shall be caught by signal handlers and trigger
a graceful abort of libburn. (See man 7 signal.)
*/
/* Once as system defined macros */
#define BURN_OS_SIGNAL_MACRO_LIST \
SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGABRT, \
SIGFPE, SIGSEGV, SIGPIPE, SIGALRM, SIGTERM, \
SIGUSR1, SIGUSR2, SIGXCPU, SIGTSTP, SIGTTIN, \
SIGTTOU
/* Once as text 1:1 list of strings for messages and interpreters */
#define BURN_OS_SIGNAL_NAME_LIST \
"SIGHUP", "SIGINT", "SIGQUIT", "SIGILL", "SIGABRT", \
"SIGFPE", "SIGSEGV", "SIGPIPE", "SIGALRM", "SIGTERM", \
"SIGUSR1", "SIGUSR2", "SIGXCPU", "SIGTSTP", "SIGTTIN", \
"SIGTTOU"
/* The number of above list items */
#define BURN_OS_SIGNAL_COUNT 16
/** To list all signals which shall surely not be caught */
#define BURN_OS_NON_SIGNAL_MACRO_LIST \
SIGKILL, SIGCHLD, SIGSTOP
/* The number of above list items */
#define BURN_OS_NON_SIGNAL_COUNT 3
/* The maximum size for a (SCSI) i/o transaction */
/* Important : MUST be at least 32768 ! */
#define BURN_OS_TRANSPORT_BUFFER_SIZE 65536
/* To hold the position of the most recently delivered address from
device enumeration.
*/
struct burn_drive_enumerator_struct {
int pos;
int info_count;
char **info_list;
};
#define BURN_OS_DEFINE_DRIVE_ENUMERATOR_T \
typedef struct burn_drive_enumerator_struct burn_drive_enumerator_t;
/* The list of operating system dependent elements in struct burn_drive.
Usually they are initialized in sg-*.c:enumerate_common().
*/
#define BURN_OS_TRANSPORT_DRIVE_ELEMENTS \
int just_a_dummy;

View File

@ -3,7 +3,7 @@
Operating system specific libburn definitions and declarations. Operating system specific libburn definitions and declarations.
The macros defined here are used by libburn modules in order to The macros defined here are used by libburn modules in order to
avoid own system dependent case distinctions. avoid own system dependent case distinctions.
Copyright (C) 2009 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL Copyright (C) 2006 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
*/ */
#ifndef BURN_OS_H_INCLUDED #ifndef BURN_OS_H_INCLUDED
@ -20,23 +20,14 @@
#include "os-freebsd.h" #include "os-freebsd.h"
#else #else /* operating system case distinction */
#ifdef __linux
/* --------- Linux kernels 2.4 and 2.6 with Linux SCSI Generic (sg) -------- */ /* --------- Linux kernels 2.4 and 2.6 with Linux SCSI Generic (sg) -------- */
#include "os-linux.h" #include "os-linux.h"
#else #endif /* End of operating system case distinction */
/* --------- Any other system. With dummy MMC transport sg-dummy.c --------- */
#include "os-dummy.h"
#endif /* ! __linux */
#endif /* ! __FreeBSD__ */
#endif /* ! BURN_OS_H_INCLUDED */ #endif /* ! BURN_OS_H_INCLUDED */

View File

@ -1,229 +0,0 @@
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
/*
This is the main operating system dependent SCSI part of libburn. It implements
the transport level aspects of SCSI control and command i/o.
Present implementation: default dummy which enables libburn only to work
with stdio: pseudo drive addresses.
For real implementations see sg-linux.c or sg-freebsd.c
*/
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <string.h>
#ifdef Libburn_os_has_statvfS
#include <sys/statvfs.h>
#endif /* Libburn_os_has_stavtfS */
#include "transport.h"
#include "drive.h"
#include "sg.h"
#include "spc.h"
#include "mmc.h"
#include "sbc.h"
#include "debug.h"
#include "toc.h"
#include "util.h"
#include "libdax_msgs.h"
extern struct libdax_msgs *libdax_messenger;
/** Returns the next index number and the next enumerated drive address.
The enumeration has to cover all available and accessible drives. It is
allowed to return addresses of drives which are not available but under
some (even exotic) circumstances could be available. It is on the other
hand allowed, only to hand out addresses which can really be used right
in the moment of this call. (This implementation chooses the former.)
@param idx An opaque handle. Make no own theories about it.
@param adr Takes the reply
@param adr_size Gives maximum size of reply including final 0
@param initialize 1 = start new,
0 = continue, use no other values for now
-1 = finish
@return 1 = reply is a valid address , 0 = no further address available
-1 = severe error (e.g. adr_size too small)
*/
int sg_give_next_adr(burn_drive_enumerator_t *idx,
char adr[], int adr_size, int initialize)
{
return 0;
}
/** Brings all available, not-whitelist-banned, and accessible drives into
libburn's list of drives.
*/
/* ts A61115: replacing call to sg-implementation internals from drive.c */
int scsi_enumerate_drives(void)
{
libdax_msgs_submit(libdax_messenger, -1, 0x0002016b,
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH,
"No MMC transport adapter is present. Running on sg-dummy.c.",
0, 0);
return 1;
}
/** Tells wether libburn has the given drive in use or exclusively reserved.
If it is "open" then libburn will eventually call sg_release() on it when
it is time to give up usage resp. reservation.
*/
/** Published as burn_drive.drive_is_open() */
int sg_drive_is_open(struct burn_drive * d)
{
return 0;
}
/** Opens the drive for SCSI commands and - if burn activities are prone
to external interference on your system - obtains an exclusive access lock
on the drive. (Note: this is not physical tray locking.)
A drive that has been opened with sg_grab() will eventually be handed
over to sg_release() for closing and unreserving.
*/
int sg_grab(struct burn_drive *d)
{
libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002016a,
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
"No MMC transport adapter is present. Running on sg-dummy.c.",
0, 0);
return 0;
}
/** Gives up the drive for SCSI commands and releases eventual access locks.
(Note: this is not physical tray locking.)
*/
int sg_release(struct burn_drive *d)
{
return 0;
}
/** Sends a SCSI command to the drive, receives reply and evaluates wether
the command succeeded or shall be retried or finally failed.
Returned SCSI errors shall not lead to a return value indicating failure.
The callers get notified by c->error. An SCSI failure which leads not to
a retry shall be notified via scsi_notify_error().
The Libburn_log_sg_commandS facility might be of help when problems with
a drive have to be examined. It shall stay disabled for normal use.
@return: 1 success , <=0 failure
*/
int sg_issue_command(struct burn_drive *d, struct command *c)
{
libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002016a,
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
"No MMC transport adapter is present. Running on sg-dummy.c.",
0, 0);
return -1;
}
/** Tries to obtain SCSI address parameters.
@return 1 is success , 0 is failure
*/
int sg_obtain_scsi_adr(char *path, int *bus_no, int *host_no, int *channel_no,
int *target_no, int *lun_no)
{
libdax_msgs_submit(libdax_messenger, -1, 0x0002016c,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
"No MMC transport adapter is present. Running on sg-dummy.c.",
0, 0);
return 0;
}
/** Tells wether a text is a persistent address as listed by the enumeration
functions.
*/
int sg_is_enumerable_adr(char *adr)
{
return(0);
}
/** Estimate the potential payload capacity of a file address.
@param path The address of the file to be examined. If it does not
exist yet, then the directory will be inquired.
@param bytes The pointed value gets modified, but only if an estimation is
possible.
@return -2 = cannot perform necessary operations on file object
-1 = neither path nor dirname of path exist
0 = could not estimate size capacity of file object
1 = estimation has been made, bytes was set
*/
int burn_os_stdio_capacity(char *path, off_t *bytes)
{
struct stat stbuf;
#ifdef Libburn_os_has_statvfS
struct statvfs vfsbuf;
#endif
char testpath[4096], *cpt;
long blocks;
off_t add_size = 0;
testpath[0] = 0;
blocks = *bytes / 512;
if (stat(path, &stbuf) == -1) {
strcpy(testpath, path);
cpt = strrchr(testpath, '/');
if(cpt == NULL)
strcpy(testpath, ".");
else if(cpt == testpath)
testpath[1] = 0;
else
*cpt = 0;
if (stat(testpath, &stbuf) == -1)
return -1;
#ifdef Libburn_if_this_was_linuX
} else if(S_ISBLK(stbuf.st_mode)) {
fd = open(path, open_mode);
if (fd == -1)
return -2;
ret = ioctl(fd, BLKGETSIZE, &blocks);
close(fd);
if (ret == -1)
return -2;
*bytes = ((off_t) blocks) * (off_t) 512;
#endif /* Libburn_if_this_was_linuX */
} else if(S_ISREG(stbuf.st_mode)) {
add_size = stbuf.st_blocks * (off_t) 512;
strcpy(testpath, path);
} else
return 0;
if (testpath[0]) {
#ifdef Libburn_os_has_statvfS
if (statvfs(testpath, &vfsbuf) == -1)
return -2;
*bytes = add_size + ((off_t) vfsbuf.f_bsize) *
(off_t) vfsbuf.f_bavail;
#else /* Libburn_os_has_statvfS */
return 0;
#endif /* ! Libburn_os_has_stavtfS */
}
return 1;
}

View File

@ -1,7 +1,7 @@
/* sg.c /* sg.c
Switcher for operating system dependent transport level modules of libburn. Switcher for operating system dependent transport level modules of libburn.
Copyright (C) 2009 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL Copyright (C) 2006 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
*/ */
@ -10,32 +10,8 @@
#include "sg-freebsd.c" #include "sg-freebsd.c"
#else #else
#ifdef __linux
#include "sg-linux.c" #include "sg-linux.c"
#else #endif
/* The dummy adapter formally fulfills the expectations of libburn towards
its SCSI command transport. It will show no drives and perform no SCSI
commands.
libburn will then be restricted to using its stdio pseudo drives.
*/
static int intentional_compiler_warning(void)
{
int INTENTIONAL_COMPILER_WARNING_;
int Cannot_recognize_Linux_nor_FreeBSD_;
int Have_to_use_dummy_MMC_transport_adapter_;
int This_libburn_will_not_be_able_to_operate_on_real_CD_drives;
int Have_to_use_dummy_MMC_transport_adapter;
int Cannot_recognize_Linux_nor_FreeBSD;
int INTENTIONAL_COMPILER_WARNING;
return(0);
}
#include "sg-dummy.c"
#endif /* ! __linux */
#endif /* ! __FreeBSD__ */

View File

@ -104,9 +104,7 @@ int spc_wait_unit_attention(struct burn_drive *d, int max_sec, char *cmd_text,
int flag) int flag)
{ {
int i, ret = 1, key = 0, asc = 0, ascq = 0; int i, ret = 1, key = 0, asc = 0, ascq = 0;
char msg[320]; char msg[160];
unsigned char sense[14];
enum response resp;
if (!(flag & 1)) if (!(flag & 1))
usleep(100000); usleep(100000);
@ -140,24 +138,10 @@ int spc_wait_unit_attention(struct burn_drive *d, int max_sec, char *cmd_text,
/* media change notice = try again */ /* media change notice = try again */
goto slumber; goto slumber;
#ifdef NIX
sprintf(msg, sprintf(msg,
"Asynchromous SCSI error on %s: key=%X asc=%2.2Xh ascq=%2.2Xh", "Asynchromous SCSI error on %s: key=%X asc=%2.2Xh ascq=%2.2Xh",
cmd_text, (unsigned) key, (unsigned) asc, cmd_text, (unsigned) key, (unsigned) asc,
(unsigned) ascq); (unsigned) ascq);
#else
/* ts A90213 */
sprintf(msg,
"Asynchromous SCSI error on %s: ", cmd_text);
sense[2] = key;
sense[12] = asc;
sense[13] = ascq;
resp = scsi_error_msg(d, sense, 14, msg + strlen(msg),
&key, &asc, &ascq);
#endif /* ! NIX */
libdax_msgs_submit(libdax_messenger, d->global_index, libdax_msgs_submit(libdax_messenger, d->global_index,
0x0002014d, 0x0002014d,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
@ -1138,20 +1122,6 @@ enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
else else
break; break;
return FAIL; return FAIL;
case 0x73:
if (*key == 3 && *ascq == 0)
sprintf(msg, "CD control error");
else if (*key == 3 && *ascq == 2)
sprintf(msg, "Power calibration area is full");
else if (*key == 3 && *ascq == 3)
sprintf(msg, "Power calibration area error");
else if (*key == 3 && *ascq == 4)
sprintf(msg, "Program memory area update failure");
else if (*key == 3 && *ascq == 5)
sprintf(msg, "Program memory area is full");
else
break;
return FAIL;
} }
sprintf(msg_data, sprintf(msg_data,
"Failure. See mmc3r10g.pdf: Sense Key %X ASC %2.2X ASCQ %2.2X", "Failure. See mmc3r10g.pdf: Sense Key %X ASC %2.2X ASCQ %2.2X",

View File

@ -205,11 +205,6 @@ struct burn_drive
with BD-RE */ with BD-RE */
int do_stream_recording; int do_stream_recording;
/* ts A90227 : the LBA where stream recording shall start.
Writing to lower LBA will be done without streaming.
*/
int stream_recording_start;
/* ts A61218 from 51h READ DISC INFORMATION */ /* ts A61218 from 51h READ DISC INFORMATION */
int bg_format_status; /* 0=needs format start, 1=needs format restart*/ int bg_format_status; /* 0=needs format start, 1=needs format restart*/
@ -241,9 +236,6 @@ struct burn_drive
/* ts A70131 : from 51h READ DISC INFORMATION Number of Sessions (-1)*/ /* ts A70131 : from 51h READ DISC INFORMATION Number of Sessions (-1)*/
int complete_sessions; int complete_sessions;
/* ts A90107 */
int state_of_last_session;
/* ts A70129 : /* ts A70129 :
from 51h READ DISC INFORMATION Last Track Number in Last Session */ from 51h READ DISC INFORMATION Last Track Number in Last Session */
int last_track_no; int last_track_no;

View File

@ -1399,70 +1399,10 @@ int burn_disc_close_session_dvd_minus_r(struct burn_write_opts *o,
int burn_dvd_write_session(struct burn_write_opts *o, int burn_dvd_write_session(struct burn_write_opts *o,
struct burn_session *s, int is_last_session) struct burn_session *s, int is_last_session)
{ {
int i, ret, multi_mem; int i,ret;
struct burn_drive *d = o->drive; struct burn_drive *d = o->drive;
/* ts A90108 */ /* >>> open_session ? */
if (d->current_profile == 0x41 && d->status == BURN_DISC_APPENDABLE &&
d->state_of_last_session == 1) {
/* last session on BD-R is still open */;
/* BR-R were not closed by libburn-0.6.0.pl00 if o->multi==0.
This leads to an unreadable, but recoverable) media state.
Technically they are appendable although the last session
is not readable.
By default the open session gets closed here before the new
session is written. E.g. after writing a small dummy seesion
number 2 one can read session 1 and write session 3 which
points to data of session 1.
For the case that no media with 3 sessions is desired it is
possible to activate the following coarse single-session
closing code:
No new session will be written but calling programs will
report success. Quite misleading.
Activate only if really needed by
# define Libburn_bug_A90108_close_disC yes
*/
#ifdef Libburn_bug_A90108_close_disC
/* Close open session and media.
That was the goal of the failed run which led to the
unreadable (but recoverable) media state.
It is not easy to implement a general close function for
all media types. Therefore this pseudo write code is under
control of #ifdef.
*/
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020171,
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH,
"Closing BD-R with accidently open session",
0, 0);
d->close_track_session(d, 3, 0); /* CLOSE SESSION, 110b */
d->state_of_last_session = 3; /* mark as complete session */
d->status = BURN_DISC_FULL;
sleep(3); /* The caller might need time to arrange itself */
return 1;
#else /* Libburn_bug_A90108_close_disC */
/* This is the default mode.
*/
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020170,
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH,
"Closing open session before writing new one",
0, 0);
d->close_track_session(d, 1, 0); /* CLOSE SESSION, 010b */
d->state_of_last_session = 3; /* mark as complete session */
#endif /* ! Libburn_bug_A90108_close_disC */
}
for (i = 0; i < s->tracks; i++) { for (i = 0; i < s->tracks; i++) {
ret = burn_dvd_write_track(o, s, i, ret = burn_dvd_write_track(o, s, i,
@ -1473,11 +1413,7 @@ int burn_dvd_write_session(struct burn_write_opts *o,
if (d->current_profile == 0x11 || d->current_profile == 0x14 || if (d->current_profile == 0x11 || d->current_profile == 0x14 ||
d->current_profile == 0x15) { d->current_profile == 0x15) {
/* DVD-R , DVD-RW Sequential, DVD-R/DL Sequential */ /* DVD-R , DVD-RW Sequential, DVD-R/DL Sequential */
multi_mem = o->multi;
if (!is_last_session)
o->multi = 1;
ret = burn_disc_close_session_dvd_minus_r(o, s); ret = burn_disc_close_session_dvd_minus_r(o, s);
o->multi = multi_mem;
if (ret <= 0) if (ret <= 0)
return 0; return 0;
} else if (d->current_profile == 0x12 || d->current_profile == 0x43) { } else if (d->current_profile == 0x12 || d->current_profile == 0x43) {
@ -2095,7 +2031,7 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
struct burn_drive *d = o->drive; struct burn_drive *d = o->drive;
struct buffer buf, *buffer_mem = o->drive->buffer; struct buffer buf, *buffer_mem = o->drive->buffer;
struct burn_track *lt, *t; struct burn_track *lt, *t;
int first = 1, i, ret, lba, nwa = 0, multi_mem; int first = 1, i, ret, lba, nwa = 0;
off_t default_size; off_t default_size;
char msg[80]; char msg[80];
@ -2106,12 +2042,8 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
/* ts A61224 */ /* ts A61224 */
burn_disc_init_write_status(o, disc); /* must be done very early */ burn_disc_init_write_status(o, disc); /* must be done very early */
/* ts A80412 , A90227 */ /* ts A80412 */
d->do_stream_recording = !!o->do_stream_recording; d->do_stream_recording = o->do_stream_recording;
if (o->do_stream_recording >= 16)
d->stream_recording_start = o->do_stream_recording;
else
d->stream_recording_start = 0;
d->buffer = &buf; d->buffer = &buf;
memset(d->buffer, 0, sizeof(struct buffer)); memset(d->buffer, 0, sizeof(struct buffer));
@ -2249,12 +2181,7 @@ return crap. so we send the command, then ignore the result.
d->alba += 4500; d->alba += 4500;
} }
} }
multi_mem = o->multi; if (!burn_write_session(o, disc->session[i]))
if(i < disc->sessions - 1)
o->multi = 1;
ret = burn_write_session(o, disc->session[i]);
o->multi = multi_mem;
if (!ret)
goto fail; goto fail;
lt = disc->session[i]->track[disc->session[i]->tracks - 1]; lt = disc->session[i]->track[disc->session[i]->tracks - 1];