Compare commits

...

26 Commits

Author SHA1 Message Date
43f9268440 Documented changes and release timestamp 2009-07-14 10:24:17 +00:00
dbc5517a62 Updated cdrskin tarball generator 2009-07-14 10:23:04 +00:00
e997e8ef67 Made number transition and activated development documentation 2009-07-14 10:21:03 +00:00
8657f0ceb8 Branching for libburn release 0.6.8 2009-07-14 07:52:49 +00:00
19a668a48e Timestamp for revision 2691 2009-07-07 19:17:40 +00:00
6ceabaff32 configure options --enable-libdir-pkgconfig and --enable-pkgconfig-path=DIR 2009-07-07 19:12:18 +00:00
b65b852c15 Retrying 3 times on EBUSY drives with generous usleep intervals 2009-06-14 09:49:47 +00:00
1ccedd5572 Bug fix: No usable media was detected with old MMC-1 drives 2009-06-03 18:53:57 +00:00
473e205c9e Bug fix: Old MMC-1 drives were rejected because of mode page 2Ah length 2009-06-03 08:58:18 +00:00
2522bebfbd Avoided to enumerate faulty drive objects 2009-06-02 17:21:43 +00:00
8276611468 Avoided SIGSEGV if no drives were found by scan 2009-06-02 16:30:06 +00:00
38994b62c0 Rectified use of burn_drive.mdata->valid 2009-06-02 16:28:33 +00:00
474c4cddd7 Made -scanbus work with SCSI bus numbers like 85 (USB, kernel 2.6.18.2) 2009-05-17 14:42:52 +00:00
b0b4bc57f8 Documented changes and release timestamp 2009-05-07 18:17:54 +00:00
b97fa7a451 Updated cdrskin tarball generator 2009-05-07 18:16:55 +00:00
8aca8e9921 Made number transition and activated development documentation 2009-05-07 18:15:47 +00:00
15b31b121a Mentioned BD were it was missing 2009-05-07 18:12:32 +00:00
e5632de786 Bug fix: Device scan stalled on FreeBSD. Ticket 148 jwele 2009-04-30 07:08:23 +00:00
91e3a2f3f7 Replaced 8 blanks by a tab 2009-04-30 06:59:35 +00:00
0ffc4bd19b Marked alleged use of uninitialized memory reported by valgrind 2009-04-30 06:56:47 +00:00
9cb4e4281e Bug fix: burn_abort() did not work with broken output pipe (since rev 2514) 2009-03-18 17:25:00 +00:00
f87747802a Human readable error messages for asc=08 "Logical unit communication failure" 2009-03-18 12:45:59 +00:00
4626304e39 Get on FreeBSD pkgconfigdir=.../libdata , on Linux and others: .../lib 2009-03-16 19:07:45 +00:00
d19abc1940 Documented changes and release timestamp 2009-03-13 14:15:46 +00:00
5ef7b4b445 Updated cdrskin tarball generator 2009-03-13 14:10:09 +00:00
033107b436 Made libburn number transition to 0.6.5 2009-03-13 14:03:13 +00:00
25 changed files with 997 additions and 195 deletions

View File

@ -1,4 +1,8 @@
pkgconfigdir=$(libdir)/pkgconfig
# ts A90315 : LIBBURNIA_PKGCONFDIR is defined OS specific in acinclude.m4
# was: pkgconfigdir=$(libdir)/pkgconfig
pkgconfigdir=$(LIBBURNIA_PKGCONFDIR)
libincludedir=$(includedir)/libburn
lib_LTLIBRARIES = libburn/libburn.la
@ -103,9 +107,9 @@ test_structest_CPPFLAGS = -Ilibburn
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
test_structest_SOURCES = test/structest.c
## cdrskin construction site - ts A60816 - A90220
## cdrskin construction site - ts A60816 - A90507
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_3
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_8
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking

59
README
View File

@ -11,7 +11,7 @@ Still containing parts of Libburn. By Derek Foreman <derek@signalmarketing.com>
and Ben Jansens <xor@orodu.net>
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
http://files.libburnia-project.org/releases/libburn-0.6.2.pl00.tar.gz
http://files.libburnia-project.org/releases/libburn-0.6.8.pl00.tar.gz
------------------------------------------------------------------------------
@ -19,10 +19,10 @@ Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
From tarball
Obtain libburn-0.6.2.pl00.tar.gz, take it to a directory of your choice and do:
Obtain libburn-0.6.8.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf libburn-0.6.2.pl00.tar.gz
cd libburn-0.6.2
tar xzf libburn-0.6.8.pl00.tar.gz
cd libburn-0.6.8
./configure --prefix=/usr
make
@ -83,8 +83,10 @@ These are libraries, language bindings, and middleware binaries which emulate
classical (and valuable) Linux tools.
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).
On other X/Open compliant systems there will only be pseudo drives, but no
direct MMC operation on real CD/DVD/BD drives.
For ports to other systems we would need : login on a development machine
For full 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
of Linux sg or FreeBSD CAM, volunteers for testing of realistic use cases.
@ -363,13 +365,54 @@ 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
formatted or unformatted BD-R.
- 6th Jan 2009 libisoburn-0.3.2 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:".
- 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.
- 16 Mar 2009 libisoburn-0.3.6: xorriso uses RRIP version 1.10 as default
in order to be mountable where mkisofs images are mountable.
- 17 Apr 2009 libisofs-0.6.18 introduces content filtering of data files.
Built-in filters allow compression to formats gzip and zisofs. External
filter processes allow arbitrary data conversions like encryption.
- 19 Apr 2009 libisoburn-0.3.8 makes use of the new libisofs capability to
perform content filtering of data files.
- 08 May 2009 libburn-0.6.6 fixes a bug with aborting on broken output pipe
and a bug with device scan on FreeBSD.
- 31 May 2009 libisofs-0.6.20 can record hard link relations in ISO images
and offers support with restoring them to disk. Current Linux kernels will
mount images with such hard links but will attribute a unique inode number
to each file.
- 28 Jun 2009 libisoburn-0.4.0: xorriso can record and restore hard link
relations of files. Performance of data reading has been improved. Option
-find now supports logical operators with its tests.
- 14 Jul 2009 libburn-0.6.8 fixes bugs and shortcommings with old MMC-1 drives
and with large SCSI bus numbers as handed out by Linux for USB drives.
------------------------------------------------------------------------------

View File

@ -1,9 +1,11 @@
AC_DEFUN([TARGET_SHIZZLE],
[
ARCH=""
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
AC_MSG_CHECKING([target operating system])
case $target in
*-*-linux*)
ARCH=linux
@ -12,6 +14,7 @@ AC_DEFUN([TARGET_SHIZZLE],
*-*-freebsd*)
ARCH=freebsd
LIBBURN_ARCH_LIBS=-lcam
LIBBURNIA_PKGCONFDIR=$(echo "$libdir" | sed 's/\/lib$/\/libdata/')/pkgconfig
;;
*)
ARCH=
@ -22,3 +25,55 @@ AC_DEFUN([TARGET_SHIZZLE],
AC_MSG_RESULT([$ARCH])
])
dnl LIBBURNIA_SET_PKGCONFIG determines the install directory for the *.pc file.
dnl Important: Must be performed _after_ TARGET_SHIZZLE
dnl
AC_DEFUN([LIBBURNIA_SET_PKGCONFIG],
[
### for testing --enable-libdir-pkgconfig on Linux
### LIBBURNIA_PKGCONFDIR="$libdir"data/pkgconfig
if test "x$LIBBURNIA_PKGCONFDIR" = "x$libdir"/pkgconfig
then
dummy=dummy
else
AC_ARG_ENABLE(libdir-pkgconfig,
[ --enable-libdir-pkgconfig Install to $libdir/pkgconfig on any OS, default=no],
, enable_libdir_pkgconfig="no")
AC_MSG_CHECKING([for --enable-libdir-pkgconfig])
if test "x$enable_libdir_pkgconfig" = xyes
then
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
fi
AC_MSG_RESULT([$enable_libdir_pkgconfig])
fi
libburnia_pkgconfig_override="no"
AC_ARG_ENABLE(pkgconfig-path,
[ --enable-pkgconfig-path=DIR Absolute path of directory for libisofs-*.pc],
libburnia_pkgconfig_override="yes" , enable_pkgconfig_path="none")
AC_MSG_CHECKING([for overridden pkgconfig directory path])
if test "x$enable_pkgconfig_path" = xno
then
libburnia_pkgconfig_override="no"
fi
if test "x$enable_pkgconfig_path" = x -o "x$enable_pkgconfig_path" = xyes
then
libburnia_pkgconfig_override="invalid argument"
fi
if test "x$libburnia_pkgconfig_override" = xyes
then
LIBBURNIA_PKGCONFDIR="$enable_pkgconfig_path"
AC_MSG_RESULT([$LIBBURNIA_PKGCONFDIR])
else
AC_MSG_RESULT([$libburnia_pkgconfig_override])
fi
AC_SUBST(LIBBURNIA_PKGCONFDIR)
dnl For debugging only
### AC_MSG_RESULT([LIBBURNIA_PKGCONFDIR = $LIBBURNIA_PKGCONFDIR])
])

View File

@ -4,7 +4,8 @@
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/cdrskin_eng.html
http://scdbackup.sourceforge.net/cdrskin-0.6.3.tar.gz
http://scdbackup.sourceforge.net/cdrskin-0.6.8.pl00.tar.gz
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------
@ -14,6 +15,8 @@ most of the libburn features from the command line.
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).
On other X/Open compliant systems there will only be emulated 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
"This software is provided as is. There is no warranty implied and ..."
@ -21,10 +24,10 @@ By using this software you agree to the disclaimer at the end of this text
Compilation, First Glimpse, Installation
Obtain cdrskin-0.6.3.tar.gz, take it to a directory of your choice and do:
Obtain cdrskin-0.6.8.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf cdrskin-0.6.3.tar.gz
cd cdrskin-0.6.3
tar xzf cdrskin-0.6.8.pl00.tar.gz
cd cdrskin-0.6.8
Within that directory execute:
@ -286,6 +289,9 @@ nominal speed by option "stream_recording=on".
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
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
-msinfo and -toc, and makes blank=fast an invalidator for ISO filesystems

View File

@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
# My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-release"
skin_release="0.6.2"
skin_release="0.6.8"
patch_level=".pl00"
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
changes="./libburn-develop"
skin_release="0.6.3"
skin_release="0.6.9"
patch_level=""
skin_rev="$skin_release""$patch_level"

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "Jan 07, 2009"
.TH CDRSKIN 1 "May 07, 2009"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -67,7 +67,7 @@ Write mode selection
.br
Recordable CD Media
.br
Sequentially Recordable DVD Media
Sequentially Recordable DVD or BD Media
.br
Overwriteable DVD or BD Media
.br
@ -254,7 +254,7 @@ that it has to be formatted again. If in doubt, just give it a try.
.SS
.B Drive preparation and addressing:
.br
The drives, either CD burners or DVD burners, are accessed via addresses which
The drives, CD, DVD, or BD burners, are accessed via addresses which
are specific to libburn and the operating system. Those addresses get listed
by a run of \fBcdrskin --devices\fP.
.br
@ -638,8 +638,8 @@ To have a chance for working on overwriteable media, this option has to be
accompanied by option --grow_overwriteable_iso.
.TP
.BI \-multi
This option keeps the CD or unformatted DVD-R[W] appendable after the current
session has been written.
This option keeps CD, unformatted DVD-R[W], DVD+R, or BD-R appendable
after the current session has been written.
Without it the disc gets closed and may not be written any more - unless it
is a -RW and gets blanked which causes loss of its content.
.br
@ -687,8 +687,8 @@ then behave strange or even go bad for the next few attempts to burn a CD.
One should use it only if inavoidable.
.TP
.BI \-sao
Write CD in Session At Once mode, a sequential DVD-R[W] in Disc-at-once
(DAO) mode, or a DVD+R[/DL].
Write CD in Session At Once mode or sequential DVD-R[W] in Disc-at-once
(DAO) mode.
.br
With CD this mode is able to put several audio tracks on media without
producing audible gaps between them.
@ -696,7 +696,7 @@ producing audible gaps between them.
With DVD-R[W] this mode can only write a single track.
No -multi is allowed with DVD-R[W] -sao.
.br
-sao is permissible with overwriteable DVD, BD or DVD+R[/DL] but actually
-sao is permissible with overwriteable DVD, or DVD+R[/DL], or BD but actually
only imposes restrictions without providing known advantages.
.br
-sao can only be used for tracks of fixely predicted size. This implies that
@ -1239,15 +1239,15 @@ cdrskin -v dev=0,1,0 fs=32m speed=8 \\
.br
blank=as_needed padsize=300k -
.SS
.B Write multi-session to the same CD, DVD-R[W] or DVD+R[/DL]:
.B Write multi-session to the same CD, DVD-R[W], DVD+R[/DL], or BD-R:
.br
cdrskin dev=/dev/hdc -v padsize=300k -multi 1.iso
cdrskin dev=/dev/sr0 -v padsize=300k -multi 1.iso
.br
cdrskin dev=/dev/hdc -v padsize=300k -multi 2.iso
cdrskin dev=/dev/sr0 -v padsize=300k -multi 2.iso
.br
cdrskin dev=/dev/hdc -v padsize=300k -multi 3.iso
cdrskin dev=/dev/sr0 -v padsize=300k -multi 3.iso
.br
cdrskin dev=/dev/hdc -v padsize=300k 4.iso
cdrskin dev=/dev/sr0 -v padsize=300k 4.iso
.SS
.B Get multi-session info for option -C of program mkisofs:
.br

View File

@ -88,7 +88,7 @@ or
/** The official program version */
#ifndef Cdrskin_prog_versioN
#define Cdrskin_prog_versioN "0.6.3"
#define Cdrskin_prog_versioN "0.6.8"
#endif
/** The official libburn interface revision to use.
@ -101,7 +101,7 @@ or
#define Cdrskin_libburn_minoR 6
#endif
#ifndef Cdrskin_libburn_micrO
#define Cdrskin_libburn_micrO 2
#define Cdrskin_libburn_micrO 8
#endif
@ -135,44 +135,44 @@ or
#endif /* Cdrskin_libburn_cvs_A60220_tS */
#ifdef Cdrskin_libburn_0_6_2
#define Cdrskin_libburn_versioN "0.6.2"
#ifdef Cdrskin_libburn_0_6_8
#define Cdrskin_libburn_versioN "0.6.8"
#define Cdrskin_libburn_from_pykix_svN 1
#endif /* Cdrskin_libburn_0_6_2 */
#endif /* Cdrskin_libburn_0_6_8 */
#ifdef Cdrskin_libburn_0_6_3
#define Cdrskin_libburn_versioN "0.6.3"
#ifdef Cdrskin_libburn_0_6_9
#define Cdrskin_libburn_versioN "0.6.9"
#define Cdrskin_libburn_from_pykix_svN 1
/* Place novelty switch macros here.
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
*/
/* there are no libburn novelties in 0.6.3 yet */
/* there are no libburn novelties yet */
#endif /* Cdrskin_libburn_0_6_3 */
#endif /* Cdrskin_libburn_0_6_9 */
#ifndef Cdrskin_libburn_versioN
#define Cdrskin_libburn_0_6_2
#define Cdrskin_libburn_versioN "0.6.2"
#define Cdrskin_libburn_0_6_8
#define Cdrskin_libburn_versioN "0.6.8"
#define Cdrskin_libburn_from_pykix_svN 1
#endif
#ifdef Cdrskin_libburn_0_6_2
#ifdef Cdrskin_libburn_0_6_8
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 6
#define Cdrskin_libburn_micrO 2
#define Cdrskin_libburn_micrO 8
#endif
#ifdef Cdrskin_libburn_0_6_3
#ifdef Cdrskin_libburn_0_6_9
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 6
#define Cdrskin_libburn_micrO 3
#define Cdrskin_libburn_micrO 9
#endif
@ -254,6 +254,12 @@ or
/* 0.5.0 , 0.5.2 , 0.5.4 , 0.5.6 , 0.5.8 , 0.6.0 , 0.6.2 */
/* 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
@ -4402,13 +4408,15 @@ int Cdrskin_report_disc_status(struct CdrskiN *skin, enum burn_disc_status s,
int Cdrskin_scanbus(struct CdrskiN *skin, int flag)
{
int ret,i,busno,first_on_bus,pseudo_transport_group= 0,skipped_devices= 0;
int busmax= 16;
int busmax= 16, busidx;
char shellsafe[5*Cdrskin_strleN+2],perms[40],btldev[Cdrskin_adrleN];
char adr[Cdrskin_adrleN],*raw_dev,*drives_shown= NULL;
int *drives_busses= NULL;
struct stat stbuf;
drives_shown= malloc(skin->n_drives+1);
if(drives_shown==NULL)
drives_busses= malloc((skin->n_drives+1) * sizeof(int));
if(drives_shown == NULL || drives_busses == NULL)
{ret= -1; goto ex;}
for(i=0;i<skin->n_drives;i++)
drives_shown[i]= 0;
@ -4466,7 +4474,28 @@ int Cdrskin_scanbus(struct CdrskiN *skin, int flag)
if(skin->preskin->old_pseudo_scsi_adr)
printf("cdrskin: NOTE : The printed addresses are not cdrecord compatible !\n");
for(busno= 0;busno<=busmax;busno++) {
for(i=0;i<skin->n_drives;i++) {
drives_busses[i]= -1;
ret= Cdrskin_driveno_to_btldev(skin,i,btldev,1);
if(ret >= pseudo_transport_group &&
ret < pseudo_transport_group + 1000000) {
drives_busses[i]= ret - pseudo_transport_group;
if(ret > pseudo_transport_group + busmax)
busmax= 1 + ret - pseudo_transport_group;
}
}
for(busidx= 0; busidx < skin->n_drives + 1; busidx++) {
if(busidx < skin->n_drives)
busno= drives_busses[busidx];
else
busno= busmax;
if(busno < 0)
continue;
for(i= 0; i < busidx; i++)
if(drives_busses[i] == busno)
break;
if(i < busidx)
continue;
first_on_bus= 1;
for(i=0;i<skin->n_drives;i++) {
ret= Cdrskin_driveno_to_btldev(skin,i,btldev,1);
@ -4504,6 +4533,8 @@ int Cdrskin_scanbus(struct CdrskiN *skin, int flag)
ex:;
if(drives_shown!=NULL)
free((char *) drives_shown);
if(drives_busses!=NULL)
free((char *) drives_busses);
return(ret);
}

View File

@ -59,7 +59,7 @@ and to MMC-5 for DVD or BD).
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.6.2</DT>
<DT>libburn-0.6.8</DT>
<DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)
@ -148,6 +148,9 @@ as listed by option --devices.</DT>
<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>
<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>
<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>
@ -174,14 +177,11 @@ man cdrecord</A></KBD></DD>
<DL>
<DT>Learn to know a more versatile way to burn ISO 9660 formatted data</DT>
<DD>
Standalone ISO 9660 multi-session CD/DVD tool
Standalone ISO 9660 multi-session CD/DVD/BD tool
<A HREF="http://scdbackup.sourceforge.net/xorriso_eng.html">xorriso</A>.
</DD>
</DL>
Testers wanted who are willing to risk some DVD-R DL media
or to do experiments on BD-R media.
</P>
<HR>
@ -191,7 +191,7 @@ or to do experiments on BD-R media.
<P>
<DL>
<DT>Download as source code (see README):</DT>
<DD><A HREF="cdrskin-0.6.2.pl00.tar.gz">cdrskin-0.6.2.pl00.tar.gz</A>
<DD><A HREF="cdrskin-0.6.8.pl00.tar.gz">cdrskin-0.6.8.pl00.tar.gz</A>
(750 KB).
</DD>
<DD>
@ -241,18 +241,17 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
<HR>
<P>
Enhancements towards previous stable version cdrskin-0.6.0.pl00:
Enhancements towards previous stable version cdrskin-0.6.6.pl00:
<UL>
<LI>Improvements with build system for FreeBSD</LI>
<LI>Made -scanbus work with high SCSI bus numbers</LI>
<!--
<LI>none</LI>
-->
</UL>
Bug fixes towards cdrskin-0.6.0.pl00:
Bug fixes towards cdrskin-0.6.6.pl00:
<UL>
<LI>BD-R media were not closed properly.
The last session staid open and unreadable.</LI>
<LI>Old MMC-1 drives were rejected</LI>
<!--
<LI>none</LI>
-->
@ -262,8 +261,8 @@ Bug fixes towards cdrskin-0.6.0.pl00:
<P>
<DL>
<DT><H3>Development snapshot, version 0.6.3 :</H3></DT>
<DD>Enhancements towards current stable version 0.6.0.pl00:
<DT><H3>Development snapshot, version 0.6.9 :</H3></DT>
<DD>Enhancements towards current stable version 0.6.8.pl00:
<UL>
<LI>none yet</LI>
<!--
@ -271,11 +270,20 @@ Bug fixes towards cdrskin-0.6.0.pl00:
</UL>
</DD>
<DD>Bug fixes towards cdrskin-0.6.8.pl00:
<UL>
<LI>none yet</LI>
<!--
-->
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_cdrskin_devel">README 0.6.3</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.6.3 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.6.3 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.6.3)</A></DD>
<DD><A HREF="README_cdrskin_devel">README 0.6.9</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.6.9 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.6.9 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.6.9)</A></DD>
<DD>&nbsp;</DD>
<DT>Maintainers of cdrskin unstable packages please use SVN of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
@ -295,7 +303,7 @@ admins with full system souvereignty.</DT>
<A HREF="README_cdrskin_devel">upcoming README</A> ):
</DD>
<DD>
<A HREF="cdrskin-0.6.3.tar.gz">cdrskin-0.6.3.tar.gz</A>
<A HREF="cdrskin-0.6.9.tar.gz">cdrskin-0.6.9.tar.gz</A>
(750 KB).
</DD>
@ -329,7 +337,7 @@ Historic versions based on Derek's and Ben's
<BR>
Very special thanks to Andy Polyakov whose
<A HREF="http://fy.chalmers.se/~appro/linux/DVD+RW/tools">dvd+rw-tools</A>
provide libburn with invaluable examples on how to deal with DVD media.
provide libburn with invaluable examples on how to deal with DVD and BD media.
</P>
<HR>
@ -491,12 +499,17 @@ and by <A HREF="http://sourceforge.net">sourceforge.net</A><BR>
<A href="http://sourceforge.net">
<IMG src="sflogo-88-1.png" BORDER="0" ALT="SourceForge Logo"></A>
<!-- on sourceforge use : <IMG src="http://sourceforge.net/sflogo.php?group_id=16010" width="88" height="31" border="0" alt="SourceForge Logo"></A> -->
<P>
Enjoying a FreeBSD shell account with the opportunity to
build and install cdrskin at<BR>
<A HREF="http://www.en.free-shells.com.ar">free-shells.com.ar</A>
</P>
</FONT></CENTER>
<HR>
<DL>
<DT>Links to my other published software projects :
<DD><A HREF="http://scdbackup.webframe.org/xorriso_eng.html">
xorriso, a standalone ISO 9660 multi-session CD/DVD burn tool.
xorriso, a standalone ISO 9660 multi-session CD/DVD/BD burn tool.
No mkisofs needed.
<DL>
<DD>

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2009.03.08.140120"
#define Cdrskin_timestamP "2009.07.14.100001"

View File

@ -6244,14 +6244,14 @@ Documented changes and release timestamp
* Formatting and writing of BD-R media
* New API function burn_get_read_capacity()
03 Jan 2009 []
2009.01.04.112716 [2351]
COPYRIGHT
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
@ -6261,28 +6261,477 @@ cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.6.0
Made number transition to 0.6.1
03 Jan 2009 []
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 []
03 Jan 2009 [2354]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.04.113401
------------------------------------ cycle - cdrskin-0.6.1 -
------------------------------------ cycle - cdrskin-0.6.1 -
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 [2534]
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
13 Mar 2009 [2535]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.6.5 - 2009.03.13.162355
13 Mar 2009 [2538]
svn move -m "libburn release 0.6.4 is ready" \
http://svn.libburnia-project.org/libburn/branches/ZeroSixFour \
http://svn.libburnia-project.org/libburn/tags/ZeroSixFour
2009.03.16.190745 [2547]
configure.ac
acinclude.m4
Makefile.am
Get on FreeBSD pkgconfigdir=.../libdata , on Linux and others: .../lib
2009.03.18.124558 [2553]
libburn/spc.c
Human readable error messages for asc=08 "Logical unit communication failure"
2009.03.18.172512 [2554]
libburn/drive.c
Bug fix: burn_abort() did not work with broken output pipe (since rev 2514)
2009.04.30.065653 [2623]
libburn/write.c
Marked alleged use of uninitialized memory reported by valgrind
2009.04.30.065918 [2624]
libburn/write.c
Replaced 8 blanks by a tab
2009.04.30.070813 [2625]
libburn/sg-freebsd.c
Bug fix: Device scan stalled on FreeBSD. Ticket 148 jwehle
------------------------------------ cycle - cdrskin-0.6.5 - 2009.04.30.070813
Bug fix: burn_abort() did not work with broken output pipe (since rev 2514)
Bug fix: Device scan stalled on FreeBSD. Ticket 148 jwehle
7 May 2009 [2628]
svn copy -m "Branching for libburn release 0.6.6"
http://svn.libburnia-project.org/libburn/trunk
http://svn.libburnia-project.org/libburn/branches/ZeroSixSix
7 May 2009 [2629]
cdrskin/cdrskin.1
Mentioned BD were it was missing
2009.05.07.100001 [2630]
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 and activated development documentation
7 May 2009 [2631]
- cdrskin/add_ts_changes_to_libburn_0_6_4
- cdrskin/add_ts_changes_to_libburn_0_6_5
+ cdrskin/add_ts_changes_to_libburn_0_6_6
+ cdrskin/add_ts_changes_to_libburn_0_6_7
Updated cdrskin tarball generator
7 May 2009 [2632]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------ release - cdrskin-0.6.6.pl00 - 2009.05.07.100001
Bug fix: burn_abort() did not work with broken output pipe (since rev 2514)
Bug fix: Device scan stalled on FreeBSD. Ticket 148 jwehle
7 May 2009 [2633]
cdrskin/cdrskin.1
Mentioned BD were it was missing
2009.05.07.181034 [2634]
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 and activated development documentation
7 May 2009 [2635]
- cdrskin/add_ts_changes_to_libburn_0_6_4
- cdrskin/add_ts_changes_to_libburn_0_6_5
+ cdrskin/add_ts_changes_to_libburn_0_6_6
+ cdrskin/add_ts_changes_to_libburn_0_6_7
Updated cdrskin tarball generator
7 May 2009 [2636]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.6.7 - 2009.05.07.181034
8 May 2009 [2637]
svn move -m libburn release 0.6.6 is ready
http://svn.libburnia-project.org/libburn/branches/ZeroSixSix
http://svn.libburnia-project.org/libburn/tags/ZeroSixSix
2009.05.17.144304 [2645]
cdrskin/cdrskin.c
Made -scanbus work with SCSI bus numbers like 85 (USB, kernel 2.6.18.2)
2009.06.02.162841 [2655]
libburn/drive.c
libburn/async.c
libburn/options.c
libburn/spc.c
libburn/libdax_msgs.h
Rectified use of burn_drive.mdata->valid
2 Jun 2009 [2656]
test/libburner.c
Avoided SIGSEGV if no drives were found by scan
2009.06.02.172201 [2657]
libburn/drive.c
Avoided to enumerate faulty drive objects
2009.06.03.085637 [2658]
libburn/spc.c
Bug fix: Old MMC-1 drives were rejected because of mode page 2Ah length
2009.06.03.185118 [2659]
libburn/transport.h
libburn/drive.c
libburn/spc.c
libburn/mmc.c
Bug fix: No usable media was detected with old MMC-1 drives
2009.06.14.095004 [2669]
libburn/sg-linux.c
Retrying 3 times on EBUSY drives with generous usleep intervals
------------------------------------ cycle - cdrskin-0.6.7 - 2009.06.14.095833
Made -scanbus work with high SCSI bus numbers
Bug fix: Old MMC-1 drives were rejected because of mode page 2Ah length
Bug fix: No usable media was detected with old MMC-1 drives
7 Jul 2009 [2691]
acinclude.m4
configure.ac
configure options --enable-libdir-pkgconfig and --enable-pkgconfig-path=DIR
2009.07.07.191134 [2692]
Timestamp for revision 2691
14 Jul 2009 [2894]
svn copy -m "Branching for libburn release 0.6.8"
http://svn.libburnia-project.org/libburn/trunk
http://svn.libburnia-project.org/libburn/branches/ZeroSixEight
2009.07.14.100001 [2695]
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 and activated development documentation
14 Jul 2009 [2696]
- cdrskin/add_ts_changes_to_libburn_0_6_6
- cdrskin/add_ts_changes_to_libburn_0_6_7
+ cdrskin/add_ts_changes_to_libburn_0_6_8
+ cdrskin/add_ts_changes_to_libburn_0_6_9
Updated cdrskin tarball generator
14 Jul 2009 []
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------ release - cdrskin-0.6.8.pl00 - 2009.07.14.100001
Made -scanbus work with high SCSI bus numbers
Bug fix: Old MMC-1 drives were rejected because of mode page 2Ah length
Bug fix: No usable media was detected with old MMC-1 drives
------------------------------------ cycle - cdrskin-0.6.9 -
------------------------------------ cycle - cdrskin-0.6.9 -
===============================================================================
TODO
@ -6291,7 +6740,6 @@ Error texts for ASC 73 : power calibration and program memory
--------------------------------- bugs -------------------------------------
- Needed is a system dependend facility: dev_t <-> major, minor
- Do something about drive->buffer asynchronous race conditions
and dangerous use of local heap memory.
@ -6329,9 +6777,6 @@ problem with telltoc: double descriptor list from before load and after load
What about cdrskin rc files ? Forward with fallback runs ?
cdrskin/README
Thin out
[]
Emulate -dummy on overwriteables ?

View File

@ -1,13 +1,13 @@
#!/bin/sh
# compile_cdrskin.sh
# Copyright 2005 - 2008 Thomas Schmitt, scdbackup@gmx.net, GPL version 2
# Copyright 2005 - 2009 Thomas Schmitt, scdbackup@gmx.net, GPL version 2
# to be executed within ./libburn-* resp ./cdrskin-*
debug_opts="-O2"
def_opts=
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
libvers="-DCdrskin_libburn_0_6_3"
libvers="-DCdrskin_libburn_0_6_8"
cleanup_src_or_obj="libburn/cleanup.o"
libdax_msgs_o="libburn/libdax_msgs.o"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
@ -33,15 +33,15 @@ do
libdax_audioxtr_o=
libdax_msgs_o="libburn/message.o"
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
elif test "$i" = "-libburn_0_6_2"
elif test "$i" = "-libburn_0_6_8"
then
libvers="-DCdrskin_libburn_0_6_2"
libvers="-DCdrskin_libburn_0_6_8"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o"
elif test "$i" = "-libburn_svn"
then
libvers="-DCdrskin_libburn_0_6_3"
libvers="-DCdrskin_libburn_0_6_9"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o"
@ -75,10 +75,8 @@ do
echo "Options:"
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
echo " -compile_dewav compile program test/dewav without libburn."
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
echo " -libburn_0_6_2 set macro to match libburn-0.6.2"
echo " -libburn_0_6_8 set macro to match libburn-0.6.8"
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 " -experimental use newly introduced libburn features."
echo " -oldfashioned use pre-0.2.2 libburn features only."

View File

@ -1,4 +1,4 @@
AC_INIT([libburn], [0.6.3], [http://libburnia-project.org])
AC_INIT([libburn], [0.6.8], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -7,7 +7,7 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
dnl Notes by ts A71207 - A81111 :
dnl Notes by ts A71207 - A90714 :
dnl
dnl Regrettably the meaning of the various version types was misunderstood
dnl before version 0.4.1.
@ -42,7 +42,8 @@ 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 See also http://www.gnu.org/software/libtool/manual.html#Interfaces
dnl
dnl The name of the dynamic library will be libburn.so.$SONAME.$AGE.$REV .
dnl On Linux the name of the dynamic library will be
dnl libburn.so.$SONAME.$AGE.$REV
dnl In the terminology of this file:
dnl CURRENT = LT_CURRENT
dnl AGE = LT_AGE
@ -69,6 +70,9 @@ dnl 0.5.6 = libburn.so.4.21.0
dnl 0.5.8 = libburn.so.4.23.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 0.6.6 = libburn.so.4.31.0
dnl 0.6.8 = libburn.so.4.33.0
dnl
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
@ -94,7 +98,7 @@ dnl
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=6
BURN_MICRO_VERSION=3
BURN_MICRO_VERSION=8
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
AC_SUBST(BURN_MAJOR_VERSION)
@ -105,15 +109,15 @@ AC_SUBST(BURN_VERSION)
dnl Libtool versioning
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
dnl
dnl ts A90220
dnl ### This is the release version libburn-0.6.2 = libburn.so.4.27.0
dnl This is the development version after above release version
dnl ts A90714
dnl This is the release version libburn-0.6.8 = libburn.so.4.33.0
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 happened meanwhile.
dnl
dnl SONAME = 31 - 27 = 4 . Library name = libburn.so.4.27.0
LT_CURRENT=31
LT_AGE=27
dnl SONAME = 37 - 33 = 4 . Linux library name = libburn.so.4.33.0
LT_CURRENT=37
LT_AGE=33
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -160,6 +164,7 @@ AC_SUBST(THREAD_LIBS)
TARGET_SHIZZLE
AC_SUBST(ARCH)
AC_SUBST(LIBBURNIA_PKGCONFDIR)
AC_SUBST(LIBBURN_ARCH_LIBS)
dnl ts A90303
@ -191,6 +196,13 @@ else
CFLAGS="$CFLAGS -DDEBUG"
fi
dnl Determine target directory for libburn-*.pc
dnl Important: Must be performed _after_ TARGET_SHIZZLE
dnl
LIBBURNIA_SET_PKGCONFIG
AC_CONFIG_FILES([
Makefile
doc/doxygen.conf

View File

@ -559,7 +559,7 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
}
/* ts A61007 : obsolete Assert in spc_select_write_params() */
if (d->drive_role == 1 && !d->mdata->valid) {
if (d->drive_role == 1 && d->mdata->valid <= 0) {
libdax_msgs_submit(libdax_messenger,
d->global_index, 0x00020113,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,

View File

@ -232,7 +232,7 @@ int burn_drive_inquire_media(struct burn_drive *d)
/* ts A61020 : d->status was set to BURN_DISC_BLANK as pure guess */
/* ts A71128 : run read_disc_info() for any recognizeable profile */
if (d->current_profile > 0 ||
if (d->current_profile > 0 || d->current_is_guessed_profile ||
d->mdata->cdr_write || d->mdata->cdrw_write ||
d->mdata->dvdr_write || d->mdata->dvdram_write) {
@ -418,6 +418,9 @@ int burn_drive_unregister(struct burn_drive *d)
struct burn_drive *burn_drive_finish_enum(struct burn_drive *d)
{
struct burn_drive *t;
char msg[BURN_DRIVE_ADR_LEN + 160];
int ret;
/* ts A60821
<<< debug: for tracing calls which might use open drive fds */
int mmc_function_spy(struct burn_drive *d, char * text);
@ -430,13 +433,19 @@ struct burn_drive *burn_drive_finish_enum(struct burn_drive *d)
mmc_function_spy(NULL, "enumerate_common : -------- doing grab");
/* try to get the drive info */
if (t->grab(t)) {
ret = t->grab(t);
if (ret) {
burn_print(2, "getting drive info\n");
t->getcaps(t);
t->unlock(t);
t->released = 1;
} else {
burn_print(2, "unable to grab new located drive\n");
/* ts A90602 */
d->mdata->valid = -1;
sprintf(msg, "Unable to grab scanned drive %s", d->devname);
libdax_msgs_submit(libdax_messenger, d->global_index,
0x0002016f, LIBDAX_MSGS_SEV_DEBUG,
LIBDAX_MSGS_PRIO_LOW, msg, 0, 0);
burn_drive_unregister(t);
t = NULL;
}
@ -855,7 +864,7 @@ static int drive_getcaps(struct burn_drive *d, struct burn_drive_info *out)
a ssert(d->mdata);
#endif
if (!d->idata->valid || !d->mdata->valid)
if(d->idata->valid <= 0 || d->mdata->valid <= 0)
return 0;
id = (struct burn_scsi_inquiry_data *)d->idata;
@ -921,7 +930,7 @@ int burn_drive_scan_sync(struct burn_drive_info *drives[],
*/
unsigned char scanned[32];
unsigned count = 0;
int i;
int i, ret;
/* ts A61007 : moved up to burn_drive_scan() */
/* a ssert(burn_running); */
@ -978,13 +987,22 @@ int burn_drive_scan_sync(struct burn_drive_info *drives[],
if (drive_array[i].global_index < 0)
continue; /* invalid device */
while (!drive_getcaps(&drive_array[i],
&(*drives)[*n_drives])) {
/* ts A90602 : This old loop is not plausible. See A70907.
while (!drive_getcaps(&drive_array[i],
&(*drives)[*n_drives])) {
sleep(1);
}
(*n_drives)++;
}
*/
/* ts A90602 : A single call shall do (rather than a loop) */
ret = drive_getcaps(&drive_array[i], &(*drives)[*n_drives]);
if (ret > 0)
(*n_drives)++;
scanned[i / 8] |= 1 << (i % 8);
}
if (*drives != NULL && *n_drives == 0) {
free ((char *) *drives);
*drives = NULL;
}
return(1);
}
@ -1140,14 +1158,14 @@ void burn_sectors_to_msf(int sectors, int *m, int *s, int *f)
int burn_drive_get_read_speed(struct burn_drive *d)
{
if(!d->mdata->valid)
if(d->mdata->valid <= 0)
return 0;
return d->mdata->max_read_speed;
}
int burn_drive_get_write_speed(struct burn_drive *d)
{
if(!d->mdata->valid)
if(d->mdata->valid <= 0)
return 0;
return d->mdata->max_write_speed;
}
@ -1155,7 +1173,7 @@ int burn_drive_get_write_speed(struct burn_drive *d)
/* ts A61021 : New API function */
int burn_drive_get_min_write_speed(struct burn_drive *d)
{
if(!d->mdata->valid)
if(d->mdata->valid <= 0)
return 0;
return d->mdata->min_write_speed;
}
@ -1742,6 +1760,10 @@ int burn_abort(int patience,
unsigned long wait_grain= 100000;
time_t start_time, current_time, pacifier_time, end_time;
#ifndef NIX
time_t stdio_patience = 3;
#endif
current_time = start_time = pacifier_time = time(0);
end_time = start_time + patience;
@ -1758,15 +1780,35 @@ int burn_abort(int patience,
if(occup == -2)
continue;
#ifdef NIX
/* <<< this causes a race condition with drive usage
and drive disposal
*/
if(drive_array[i].drive_role != 1) {
#ifdef NIX
/* ts A90302
<<< this causes a race condition with drive
usage and drive disposal.
*/
drive_array[i].busy = BURN_DRIVE_IDLE;
burn_drive_forget(&(drive_array[i]), 1);
} else
#endif /* NIX */
continue;
#else /* NIX */
/* ts A90318
>>> but if a pipe breaks then the drive
never gets idle.
So for now with a short patience timespan
and eventually a deliberate memory leak.
*/
if (current_time - start_time >
stdio_patience) {
drive_array[i].global_index = -1;
continue;
}
#endif /* ! NIX */
}
if(occup <= 10) {
burn_drive_forget(&(drive_array[i]), 1);
@ -2058,7 +2100,7 @@ int burn_drive_get_speedlist(struct burn_drive *d,
struct burn_speed_descriptor *sd, *csd = NULL;
(*speed_list) = NULL;
if(!d->mdata->valid)
if(d->mdata->valid <= 0)
return 0;
for (sd = d->mdata->speed_descriptors; sd != NULL; sd = sd->next) {
ret = burn_speed_descriptor_new(&csd, NULL, csd, 0);
@ -2083,7 +2125,7 @@ int burn_drive_get_best_speed(struct burn_drive *d, int speed_goal,
if (speed_goal < 0)
best_speed = 2000000000;
*best_descr = NULL;
if(!d->mdata->valid)
if(d->mdata->valid <= 0)
return 0;
for (sd = d->mdata->speed_descriptors; sd != NULL; sd = sd->next) {
if (flag & 1)

View File

@ -2260,7 +2260,7 @@ void burn_version(int *major, int *minor, int *micro);
*/
#define burn_header_version_major 0
#define burn_header_version_minor 6
#define burn_header_version_micro 3
#define burn_header_version_micro 8
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.

View File

@ -545,7 +545,8 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
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
0x0002016e (DEBUG,HIGH) = MODE SENSE page 2A too short
0x0002016f (DEBUG,HIGH) = Unable to grab scanned drive
0x00020170 (NOTE,HIGH) = Closing open session before writing new one
0x00020171 (NOTE,HIGH) = Closing BD-R with accidently open session

View File

@ -77,6 +77,12 @@ extern struct libdax_msgs *libdax_messenger;
# define Libburn_do_not_format_dvd_ram_or_bd_rE 1
*/
/* ts A90603 : Simulate the command restrictions of an old MMC-1 drive
# define Libisofs_simulate_old_mmc1_drivE 1
*/
/* DVD/BD progress report:
ts A61219 : It seems to work with a used (i.e. thoroughly formatted) DVD+RW.
Error messages of class DEBUG appear because of inability to
@ -1460,6 +1466,75 @@ inquire_drive:;
}
/* ts A61201 */
static char *mmc_obtain_profile_name(int profile_number)
{
static char *texts[0x53] = {NULL};
int i, max_pno = 0x53;
if (texts[0] == NULL) {
for (i = 0; i<max_pno; i++)
texts[i] = "";
/* mmc5r03c.pdf , Table 89, Spelling: guessed cdrecord style */
texts[0x01] = "Non-removable disk";
texts[0x02] = "Removable disk";
texts[0x03] = "MO erasable";
texts[0x04] = "Optical write once";
texts[0x05] = "AS-MO";
texts[0x08] = "CD-ROM";
texts[0x09] = "CD-R";
texts[0x0a] = "CD-RW";
texts[0x10] = "DVD-ROM";
texts[0x11] = "DVD-R sequential recording";
texts[0x12] = "DVD-RAM";
texts[0x13] = "DVD-RW restricted overwrite";
texts[0x14] = "DVD-RW sequential recording";
texts[0x15] = "DVD-R/DL sequential recording";
texts[0x16] = "DVD-R/DL layer jump recording";
texts[0x1a] = "DVD+RW";
texts[0x1b] = "DVD+R";
texts[0x2a] = "DVD+RW/DL";
texts[0x2b] = "DVD+R/DL";
texts[0x40] = "BD-ROM";
texts[0x41] = "BD-R sequential recording";
texts[0x42] = "BD-R random recording";
texts[0x43] = "BD-RE";
texts[0x50] = "HD-DVD-ROM";
texts[0x51] = "HD-DVD-R";
texts[0x52] = "HD-DVD-RAM";
}
if (profile_number<0 || profile_number>=max_pno)
return "";
return texts[profile_number];
}
/* ts A90603 : to be used if the drive knows no GET CONFIGURATION
*/
static int mmc_guess_profile(struct burn_drive *d, int flag)
{
int cp;
cp = 0;
if (d->status == BURN_DISC_BLANK ||
d->status == BURN_DISC_APPENDABLE) {
cp = 0x09;
} else if (d->status == BURN_DISC_FULL) {
cp = 0x08;
}
if (cp)
if (d->erasable)
cp = 0x0a;
d->current_profile = cp;
if (cp == 0)
return 0;
d->current_is_cd_profile = 1;
d->current_is_supported_profile = 1;
strcpy(d->current_profile_text, mmc_obtain_profile_name(cp));
return 1;
}
static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
{
struct buffer buf;
@ -1610,6 +1685,10 @@ regard_as_blank:;
break;
}
/* ts A90603 : An MMC-1 drive might not know the media type yet */
if (d->current_is_guessed_profile && d->current_profile == 0)
mmc_guess_profile(d, 0);
if ((d->current_profile != 0 || d->status != BURN_DISC_UNREADY)
&& ! d->current_is_supported_profile) {
if (!d->silent_on_scsi_error) {
@ -1625,7 +1704,7 @@ regard_as_blank:;
return 0;
}
/* >>> ts A61217 : Note for future
/* ts A61217 : Note for future
growisofs performs OPC if (data[0]<<8)|data[1]<=32
which indicates no OPC entries are attached to the
reply from the drive.
@ -2165,49 +2244,6 @@ void mmc_set_speed(struct burn_drive *d, int r, int w)
}
/* ts A61201 */
static char *mmc_obtain_profile_name(int profile_number)
{
static char *texts[0x53] = {NULL};
int i, max_pno = 0x53;
if (texts[0] == NULL) {
for (i = 0; i<max_pno; i++)
texts[i] = "";
/* mmc5r03c.pdf , Table 89, Spelling: guessed cdrecord style */
texts[0x01] = "Non-removable disk";
texts[0x02] = "Removable disk";
texts[0x03] = "MO erasable";
texts[0x04] = "Optical write once";
texts[0x05] = "AS-MO";
texts[0x08] = "CD-ROM";
texts[0x09] = "CD-R";
texts[0x0a] = "CD-RW";
texts[0x10] = "DVD-ROM";
texts[0x11] = "DVD-R sequential recording";
texts[0x12] = "DVD-RAM";
texts[0x13] = "DVD-RW restricted overwrite";
texts[0x14] = "DVD-RW sequential recording";
texts[0x15] = "DVD-R/DL sequential recording";
texts[0x16] = "DVD-R/DL layer jump recording";
texts[0x1a] = "DVD+RW";
texts[0x1b] = "DVD+R";
texts[0x2a] = "DVD+RW/DL";
texts[0x2b] = "DVD+R/DL";
texts[0x40] = "BD-ROM";
texts[0x41] = "BD-R sequential recording";
texts[0x42] = "BD-R random recording";
texts[0x43] = "BD-RE";
texts[0x50] = "HD-DVD-ROM";
texts[0x51] = "HD-DVD-R";
texts[0x52] = "HD-DVD-RAM";
}
if (profile_number<0 || profile_number>=max_pno)
return "";
return texts[profile_number];
}
/* ts A61201 : found in unfunctional state
*/
static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
@ -2227,6 +2263,7 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
d->current_profile_text[0] = 0;
d->current_is_cd_profile = 0;
d->current_is_supported_profile = 0;
d->current_is_guessed_profile = 0;
d->current_has_feat21h = 0;
d->current_feat21h_link_size = -1;
d->current_feat23h_byte4 = 0;
@ -2249,8 +2286,24 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
c.dir = FROM_DRIVE;
d->issue_command(d, &c);
if (c.error)
#ifdef Libisofs_simulate_old_mmc1_drivE
c.error = 1;
c.sense[2] = 0x5;
c.sense[12] = 0x20;
c.sense[13] = 0x0;
#endif /* Libisofs_simulate_old_mmc1_drivE */
if (c.error) {
/* ts A90603 : MMC-1 drive do not know 46h GET CONFIGURATION */
if (c.sense[2] == 0x5 && c.sense[12] == 0x20 &&
c.sense[13] == 0x0) {
d->current_is_guessed_profile = 1;
/* Will yield a non-zero profile only after
mmc_read_disc_info_al() was called */
mmc_guess_profile(d, 0);
}
return 0;
}
old_alloc_len = *alloc_len;
*alloc_len = len = mmc_four_char_to_int(c.page->data);
if (len > old_alloc_len)
@ -3475,6 +3528,14 @@ static int mmc_get_write_performance_al(struct burn_drive *d,
c.page->bytes = 0;
c.dir = FROM_DRIVE;
d->issue_command(d, &c);
#ifdef Libisofs_simulate_old_mmc1_drivE
c.error = 1;
c.sense[2] = 0x5;
c.sense[12] = 0x20;
c.sense[13] = 0x0;
#endif /* Libisofs_simulate_old_mmc1_drivE */
if (c.error)
return 0;
len = mmc_four_char_to_int(c.page->data);
@ -3810,6 +3871,7 @@ int mmc_setup_drive(struct burn_drive *d)
d->current_profile_text[0] = 0;
d->current_is_cd_profile = 0;
d->current_is_supported_profile = 0;
d->current_is_guessed_profile = 0;
d->current_has_feat21h = 0;
d->current_feat21h_link_size = -1;
d->current_feat23h_byte4 = 0;

View File

@ -143,7 +143,7 @@ int burn_write_opts_set_simulate(struct burn_write_opts *opts, int sim)
int burn_write_opts_set_underrun_proof(struct burn_write_opts *opts,
int underrun_proof)
{
if (!opts->drive->mdata->valid)
if (opts->drive->mdata->valid <= 0)
return 0;
if (opts->drive->mdata->underrun_proof) {
opts->underrun_proof = underrun_proof;

View File

@ -1,6 +1,5 @@
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
#include <assert.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
@ -553,11 +552,26 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
if (c->page) {
ccb->csio.data_ptr = c->page->data;
if (c->dir == FROM_DRIVE) {
ccb->csio.dxfer_len = BUFFER_SIZE;
/* ts A90430 : Ticket 148 , by jwehle :
"On ... FreeBSD 6.4 which has a usb memory reader in
addition to a ATAPI DVD burner sg_issue_command
will hang while the SCSI bus is being scanned"
*/
if (c->dxfer_len >= 0)
ccb->csio.dxfer_len = c->dxfer_len;
else
ccb->csio.dxfer_len = BUFFER_SIZE;
/* touch page so we can use valgrind */
memset(c->page->data, 0, BUFFER_SIZE);
} else {
assert(c->page->bytes > 0);
/* ts A90430 */
/* a ssert(c->page->bytes > 0); */
if (c->page->bytes <= 0) {
c->error = 1;
return 0;
}
ccb->csio.dxfer_len = c->page->bytes;
}
} else {

View File

@ -470,7 +470,7 @@ static int sg_fcntl_lock(int *fd, char *fd_name, int l_type, int verbous)
/* ts A60926 */
static int sg_open_drive_fd(char *fname, int scan_mode)
{
int open_mode = O_RDWR, fd;
int open_mode = O_RDWR, fd, tries= 0;
char msg[81];
/* ts A70409 : DDLP-B */
@ -502,7 +502,8 @@ static int sg_open_drive_fd(char *fname, int scan_mode)
"libburn: experimental: O_EXCL= %d , O_NDELAY= %d\n",
!!(open_mode&O_EXCL),!!(open_mode&O_NDELAY));
*/
try_open:;
fd = open(fname, open_mode);
if (fd == -1) {
/* <<< debugging
@ -511,6 +512,17 @@ static int sg_open_drive_fd(char *fname, int scan_mode)
fname,errno);
*/
if (errno == EBUSY) {
tries++;
/* <<< debugging
fprintf(stderr,
"\nlibburn_DEBUG: EBUSY , tries= %d\n", tries);
*/
if (tries < 4) {
usleep(2000000);
goto try_open;
}
sg_handle_busy_device(fname, errno);
return -1;
@ -793,7 +805,7 @@ static int is_scsi_drive(char *fname, int *bus_no, int *host_no,
if (ret<=0) {
if (linux_sg_enumerate_debug)
fprintf(stderr, "cannot lock siblings\n");
sg_handle_busy_device(fname, 0);
sg_handle_busy_device(fname, 0);
return 0;
}
/* the final occupation will be done in sg_grab() */

View File

@ -291,7 +291,7 @@ void spc_allow(struct burn_drive *d)
}
/*
ts A70518 : Do not call with *alloc_len < 8
ts A70518 - A90603 : Do not call with *alloc_len < 10
*/
/** flag&1= do only inquire alloc_len */
static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
@ -303,13 +303,19 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
unsigned char *page;
struct command c;
struct burn_speed_descriptor *sd;
char msg[BURN_DRIVE_ADR_LEN + 160];
/* ts A61225 : 1 = report about post-MMC-1 speed descriptors */
static int speed_debug = 0;
if (*alloc_len < 8)
if (*alloc_len < 10)
return 0;
/* ts A90602 : Clearing mdata before command execution */
m = d->mdata;
m->valid = 0;
burn_mdata_free_subs(m);
memset(&buf, 0, sizeof(buf));
scsi_init_command(&c, SPC_MODE_SENSE, sizeof(SPC_MODE_SENSE));
/*
@ -328,12 +334,11 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
d->issue_command(d, &c);
if (c.error) {
memset(&buf, 0, sizeof(buf));
d->mdata->valid = -1;
m->valid = -1;
was_error = 1;
}
size = c.page->data[0] * 256 + c.page->data[1];
m = d->mdata;
page = c.page->data + 8;
/* ts A61225 :
@ -342,18 +347,28 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
in MMC-3 6.3.11 there are at least 28 bytes plus a variable length
set of speed descriptors. In MMC-5 E.11 it is declared "legacy".
*/
/* ts A90603 :
SPC-1 8.3.3 enumerates mode page format bytes from 0 to n and
defines Page Length as (n-1).
*/
page_length = page[1];
old_alloc_len = *alloc_len;
*alloc_len = page_length + 8;
*alloc_len = page_length + 10;
if (flag & 1)
return !was_error;
if (page_length + 8 > old_alloc_len)
page_length = old_alloc_len - 8;
if (page_length < 22)
return 0;
if (page_length + 10 > old_alloc_len)
page_length = old_alloc_len - 10;
m->valid = 0;
burn_mdata_free_subs(m);
/* ts A90602 : 20 asserts page[21]. (see SPC-1 8.3.3) */
if (page_length < 20) {
m->valid = -1;
sprintf(msg, "MODE SENSE page 2A too short: %s : %d",
d->devname, page_length);
libdax_msgs_submit(libdax_messenger, d->global_index,
0x0002016e, LIBDAX_MSGS_SEV_DEBUG,
LIBDAX_MSGS_PRIO_LOW, msg, 0, 0);
return 0;
}
m->buffer_size = page[12] * 256 + page[13];
m->dvdram_read = page[2] & 32;
@ -384,12 +399,13 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
m->min_end_lba = 0x7fffffff;
m->max_end_lba = 0;
m->valid = 1;
if (!was_error)
m->valid = 1;
mmc_get_configuration(d);
/* ts A61225 : end of MMC-1 , begin of MMC-3 */
if (page_length < 32) /* no write speed descriptors ? */
if (page_length < 30) /* no write speed descriptors ? */
goto try_mmc_get_performance;
m->cur_write_speed = page[28] * 256 + page[29];
@ -413,12 +429,12 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
}
for (i = 0; i < num_write_speeds; i++) {
speed = page[32 + 4*i + 2] * 256 + page[32 + 4*i + 3];
speed = page[32 + 4 * i + 2] * 256 + page[32 + 4 * i + 3];
if (speed_debug)
fprintf(stderr,
"LIBBURN_DEBUG: write speed #%d = %d kB/s (rc %d)\n",
i, speed, page[32 + 4*i +1] & 7);
i, speed, page[32 + 4 * i + 1] & 7);
/* ts A61226 */
ret = burn_speed_descriptor_new(&(d->mdata->speed_descriptors),
@ -431,7 +447,7 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
strcpy(sd->profile_name,
d->current_profile_text);
}
sd->wrc = (( page[32 + 4*i +1] & 7 ) == 1 );
sd->wrc = (( page[32 + 4 * i + 1] & 7 ) == 1 );
sd->write_speed = speed;
}
@ -459,7 +475,7 @@ try_mmc_get_performance:;
void spc_sense_caps(struct burn_drive *d)
{
int alloc_len, start_len = 22, ret;
int alloc_len, start_len = 30, ret;
if (mmc_function_spy(d, "sense_caps") <= 0)
return;
@ -920,6 +936,18 @@ enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
sprintf(msg,
"Logical unit is in the process of becoming ready");
return RETRY;
case 0x08:
if (*key != 4)
break;
if (*ascq == 0)
sprintf(msg, "Logical unit communication failure");
else if (*ascq == 1)
sprintf(msg, "Logical unit communication timeout");
else if (*ascq == 2)
sprintf(msg, "Logical unit communication parity error");
else if (*ascq == 3)
sprintf(msg, "Logical unit communication crc error");
return RETRY;
case 0x09:
if (*key != 4)
break;

View File

@ -161,6 +161,8 @@ struct burn_drive
char current_profile_text[80];
int current_is_cd_profile;
int current_is_supported_profile;
/* ts A90603 */
int current_is_guessed_profile;
/* ts A70128 : MMC-to-MMC feature info from 46h for DVD-RW.
Quite internal. Regard as opaque :)

View File

@ -1845,6 +1845,13 @@ int burn_stdio_read_source(struct burn_source *source, char *buf, int bufsize,
int burn_stdio_write(int fd, char *buf, int count, struct burn_drive *d,
int flag)
{
if (d->cancel)
return 0;
/*
fprintf(stderr, "libburn_DEBUG: write(%d, %lX, %d)\n",
fd, (unsigned long) buf, count);
*/
if (write(fd, buf, count) != count) {
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020148,
@ -2093,7 +2100,7 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
{
struct cue_sheet *sheet;
struct burn_drive *d = o->drive;
struct buffer buf, *buffer_mem = o->drive->buffer;
struct buffer *buffer_mem = o->drive->buffer;
struct burn_track *lt, *t;
int first = 1, i, ret, lba, nwa = 0, multi_mem;
off_t default_size;
@ -2113,8 +2120,33 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
else
d->stream_recording_start = 0;
d->buffer = &buf;
d->buffer = calloc(sizeof(struct buffer), 1);
if (d->buffer == NULL)
goto fail_wo_sync;
/* >>> ts A90321
memset(d->buffer, 0, sizeof(struct buffer));
fprintf(stderr, "libburn_DEBUG: d->buffer = %lX , size = %d\n",
(unsigned long) d->buffer, (int) sizeof(struct buffer));
calloc() seems not to have the desired effect. valgrind warns:
==18251== Syscall param write(buf) points to uninitialised byte(s)
==18251== at 0x5071DEB: (within /lib64/libpthread-2.5.so)
==18251== by 0x4723FA: burn_stdio_write (write.c:1850)
==18251== by 0x4725DC: burn_stdio_mmc_write (write.c:1894)
==18251== by 0x483B7A: get_sector (sector.c:229)
==18251== by 0x484F11: sector_data (sector.c:639)
==18251== by 0x4729FE: burn_stdio_write_track (write.c:2012)
==18251== by 0x472CF4: burn_stdio_write_sync (write.c:2072)
==18251== by 0x472E8D: burn_disc_write_sync (write.c:2125) <<< we are here
==18251== by 0x460254: write_disc_worker_func (async.c:514)
==18251== by 0x506B09D: start_thread (in /lib64/libpthread-2.5.so)
==18251== by 0x55484CC: clone (in /lib64/libc-2.5.so)
*/
d->rlba = -150;
d->toc_temp = 9;
@ -2312,6 +2344,8 @@ fail_wo_sync:;
d->busy = BURN_DRIVE_IDLE;
ex:;
d->do_stream_recording = 0;
if (d->buffer != NULL)
free((char *) d->buffer);
d->buffer = buffer_mem;
return;
}

View File

@ -106,7 +106,7 @@ int libburner_aquire_drive(char *drive_adr, int *driveno)
ret = libburner_aquire_by_adr(drive_adr);
else
ret = libburner_aquire_by_driveno(driveno);
if (ret <= 0)
if (ret <= 0 || *driveno <= 0)
return ret;
burn_disc_get_profile(drive_list[0].drive, &current_profile,
current_profile_name);