Compare commits
26 Commits
ZeroSixFou
...
ZeroSixEig
Author | SHA1 | Date | |
---|---|---|---|
43f9268440 | |||
dbc5517a62 | |||
e997e8ef67 | |||
8657f0ceb8 | |||
19a668a48e | |||
6ceabaff32 | |||
b65b852c15 | |||
1ccedd5572 | |||
473e205c9e | |||
2522bebfbd | |||
8276611468 | |||
38994b62c0 | |||
474c4cddd7 | |||
b0b4bc57f8 | |||
b97fa7a451 | |||
8aca8e9921 | |||
15b31b121a | |||
e5632de786 | |||
91e3a2f3f7 | |||
0ffc4bd19b | |||
9cb4e4281e | |||
f87747802a | |||
4626304e39 | |||
d19abc1940 | |||
5ef7b4b445 | |||
033107b436 |
10
Makefile.am
10
Makefile.am
@ -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
|
libincludedir=$(includedir)/libburn
|
||||||
|
|
||||||
lib_LTLIBRARIES = libburn/libburn.la
|
lib_LTLIBRARIES = libburn/libburn.la
|
||||||
@ -103,9 +107,9 @@ test_structest_CPPFLAGS = -Ilibburn
|
|||||||
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
test_structest_SOURCES = test/structest.c
|
test_structest_SOURCES = test/structest.c
|
||||||
|
|
||||||
## cdrskin construction site - ts A60816 - A90313
|
## cdrskin construction site - ts A60816 - A90507
|
||||||
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
||||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_4
|
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_8
|
||||||
|
|
||||||
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
||||||
|
33
README
33
README
@ -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.8.pl00.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.8.pl00.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.8.pl00.tar.gz
|
||||||
cd libburn-0.6.4
|
cd libburn-0.6.8
|
||||||
./configure --prefix=/usr
|
./configure --prefix=/usr
|
||||||
make
|
make
|
||||||
|
|
||||||
@ -388,6 +388,31 @@ Project history as far as known to me:
|
|||||||
operations on "stdio:" pseudo drives. Nevertheless this allowed to lift the
|
operations on "stdio:" pseudo drives. Nevertheless this allowed to lift the
|
||||||
ban to build libburn on operating systems other than Linux and FreeBSD.
|
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.
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
55
acinclude.m4
55
acinclude.m4
@ -1,9 +1,11 @@
|
|||||||
AC_DEFUN([TARGET_SHIZZLE],
|
AC_DEFUN([TARGET_SHIZZLE],
|
||||||
[
|
[
|
||||||
ARCH=""
|
ARCH=""
|
||||||
|
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
|
||||||
|
|
||||||
AC_MSG_CHECKING([target operating system])
|
AC_MSG_CHECKING([target operating system])
|
||||||
|
|
||||||
|
|
||||||
case $target in
|
case $target in
|
||||||
*-*-linux*)
|
*-*-linux*)
|
||||||
ARCH=linux
|
ARCH=linux
|
||||||
@ -12,6 +14,7 @@ AC_DEFUN([TARGET_SHIZZLE],
|
|||||||
*-*-freebsd*)
|
*-*-freebsd*)
|
||||||
ARCH=freebsd
|
ARCH=freebsd
|
||||||
LIBBURN_ARCH_LIBS=-lcam
|
LIBBURN_ARCH_LIBS=-lcam
|
||||||
|
LIBBURNIA_PKGCONFDIR=$(echo "$libdir" | sed 's/\/lib$/\/libdata/')/pkgconfig
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
ARCH=
|
ARCH=
|
||||||
@ -22,3 +25,55 @@ AC_DEFUN([TARGET_SHIZZLE],
|
|||||||
|
|
||||||
AC_MSG_RESULT([$ARCH])
|
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])
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
@ -4,7 +4,8 @@
|
|||||||
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.8.pl00.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,7 +15,7 @@ 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
|
On other X/Open compliant systems there will only be emulated drives, but no
|
||||||
direct MMC operation on real CD/DVD/BD drives.
|
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
|
||||||
@ -23,10 +24,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.8.pl00.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.8.pl00.tar.gz
|
||||||
cd cdrskin-0.6.4
|
cd cdrskin-0.6.8
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
|
@ -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.8"
|
||||||
patch_level=".pl00"
|
patch_level=".pl00"
|
||||||
skin_rev="$skin_release""$patch_level"
|
skin_rev="$skin_release""$patch_level"
|
||||||
|
|
@ -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.9"
|
||||||
patch_level=""
|
patch_level=""
|
||||||
skin_rev="$skin_release""$patch_level"
|
skin_rev="$skin_release""$patch_level"
|
||||||
|
|
@ -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 "May 07, 2009"
|
||||||
.\" 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:
|
||||||
@ -67,7 +67,7 @@ Write mode selection
|
|||||||
.br
|
.br
|
||||||
Recordable CD Media
|
Recordable CD Media
|
||||||
.br
|
.br
|
||||||
Sequentially Recordable DVD Media
|
Sequentially Recordable DVD or BD Media
|
||||||
.br
|
.br
|
||||||
Overwriteable DVD or BD Media
|
Overwriteable DVD or BD Media
|
||||||
.br
|
.br
|
||||||
@ -254,7 +254,7 @@ that it has to be formatted again. If in doubt, just give it a try.
|
|||||||
.SS
|
.SS
|
||||||
.B Drive preparation and addressing:
|
.B Drive preparation and addressing:
|
||||||
.br
|
.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
|
are specific to libburn and the operating system. Those addresses get listed
|
||||||
by a run of \fBcdrskin --devices\fP.
|
by a run of \fBcdrskin --devices\fP.
|
||||||
.br
|
.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.
|
accompanied by option --grow_overwriteable_iso.
|
||||||
.TP
|
.TP
|
||||||
.BI \-multi
|
.BI \-multi
|
||||||
This option keeps the CD or unformatted DVD-R[W] appendable after the current
|
This option keeps CD, unformatted DVD-R[W], DVD+R, or BD-R appendable
|
||||||
session has been written.
|
after the current session has been written.
|
||||||
Without it the disc gets closed and may not be written any more - unless it
|
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.
|
is a -RW and gets blanked which causes loss of its content.
|
||||||
.br
|
.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.
|
One should use it only if inavoidable.
|
||||||
.TP
|
.TP
|
||||||
.BI \-sao
|
.BI \-sao
|
||||||
Write CD in Session At Once mode, a sequential DVD-R[W] in Disc-at-once
|
Write CD in Session At Once mode or sequential DVD-R[W] in Disc-at-once
|
||||||
(DAO) mode, or a DVD+R[/DL].
|
(DAO) mode.
|
||||||
.br
|
.br
|
||||||
With CD this mode is able to put several audio tracks on media without
|
With CD this mode is able to put several audio tracks on media without
|
||||||
producing audible gaps between them.
|
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.
|
With DVD-R[W] this mode can only write a single track.
|
||||||
No -multi is allowed with DVD-R[W] -sao.
|
No -multi is allowed with DVD-R[W] -sao.
|
||||||
.br
|
.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.
|
only imposes restrictions without providing known advantages.
|
||||||
.br
|
.br
|
||||||
-sao can only be used for tracks of fixely predicted size. This implies that
|
-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
|
.br
|
||||||
blank=as_needed padsize=300k -
|
blank=as_needed padsize=300k -
|
||||||
.SS
|
.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
|
.br
|
||||||
cdrskin dev=/dev/hdc -v padsize=300k -multi 1.iso
|
cdrskin dev=/dev/sr0 -v padsize=300k -multi 1.iso
|
||||||
.br
|
.br
|
||||||
cdrskin dev=/dev/hdc -v padsize=300k -multi 2.iso
|
cdrskin dev=/dev/sr0 -v padsize=300k -multi 2.iso
|
||||||
.br
|
.br
|
||||||
cdrskin dev=/dev/hdc -v padsize=300k -multi 3.iso
|
cdrskin dev=/dev/sr0 -v padsize=300k -multi 3.iso
|
||||||
.br
|
.br
|
||||||
cdrskin dev=/dev/hdc -v padsize=300k 4.iso
|
cdrskin dev=/dev/sr0 -v padsize=300k 4.iso
|
||||||
.SS
|
.SS
|
||||||
.B Get multi-session info for option -C of program mkisofs:
|
.B Get multi-session info for option -C of program mkisofs:
|
||||||
.br
|
.br
|
||||||
|
@ -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.8"
|
||||||
#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 8
|
||||||
#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_8
|
||||||
#define Cdrskin_libburn_versioN "0.6.4"
|
#define Cdrskin_libburn_versioN "0.6.8"
|
||||||
#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_8 */
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_6_5
|
#ifdef Cdrskin_libburn_0_6_9
|
||||||
#define Cdrskin_libburn_versioN "0.6.5"
|
#define Cdrskin_libburn_versioN "0.6.9"
|
||||||
#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 yet */
|
||||||
|
|
||||||
#endif /* Cdrskin_libburn_0_6_5 */
|
#endif /* Cdrskin_libburn_0_6_9 */
|
||||||
|
|
||||||
#ifndef Cdrskin_libburn_versioN
|
#ifndef Cdrskin_libburn_versioN
|
||||||
#define Cdrskin_libburn_0_6_4
|
#define Cdrskin_libburn_0_6_8
|
||||||
#define Cdrskin_libburn_versioN "0.6.4"
|
#define Cdrskin_libburn_versioN "0.6.8"
|
||||||
#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_8
|
||||||
#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 8
|
||||||
#endif
|
#endif
|
||||||
#ifdef Cdrskin_libburn_0_6_5
|
#ifdef Cdrskin_libburn_0_6_9
|
||||||
#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 9
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -4408,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 Cdrskin_scanbus(struct CdrskiN *skin, int flag)
|
||||||
{
|
{
|
||||||
int ret,i,busno,first_on_bus,pseudo_transport_group= 0,skipped_devices= 0;
|
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 shellsafe[5*Cdrskin_strleN+2],perms[40],btldev[Cdrskin_adrleN];
|
||||||
char adr[Cdrskin_adrleN],*raw_dev,*drives_shown= NULL;
|
char adr[Cdrskin_adrleN],*raw_dev,*drives_shown= NULL;
|
||||||
|
int *drives_busses= NULL;
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
|
|
||||||
drives_shown= malloc(skin->n_drives+1);
|
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;}
|
{ret= -1; goto ex;}
|
||||||
for(i=0;i<skin->n_drives;i++)
|
for(i=0;i<skin->n_drives;i++)
|
||||||
drives_shown[i]= 0;
|
drives_shown[i]= 0;
|
||||||
@ -4472,7 +4474,28 @@ int Cdrskin_scanbus(struct CdrskiN *skin, int flag)
|
|||||||
if(skin->preskin->old_pseudo_scsi_adr)
|
if(skin->preskin->old_pseudo_scsi_adr)
|
||||||
printf("cdrskin: NOTE : The printed addresses are not cdrecord compatible !\n");
|
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;
|
first_on_bus= 1;
|
||||||
for(i=0;i<skin->n_drives;i++) {
|
for(i=0;i<skin->n_drives;i++) {
|
||||||
ret= Cdrskin_driveno_to_btldev(skin,i,btldev,1);
|
ret= Cdrskin_driveno_to_btldev(skin,i,btldev,1);
|
||||||
@ -4510,6 +4533,8 @@ int Cdrskin_scanbus(struct CdrskiN *skin, int flag)
|
|||||||
ex:;
|
ex:;
|
||||||
if(drives_shown!=NULL)
|
if(drives_shown!=NULL)
|
||||||
free((char *) drives_shown);
|
free((char *) drives_shown);
|
||||||
|
if(drives_busses!=NULL)
|
||||||
|
free((char *) drives_busses);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.8</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)
|
||||||
@ -177,14 +177,11 @@ man cdrecord</A></KBD></DD>
|
|||||||
<DL>
|
<DL>
|
||||||
<DT>Learn to know a more versatile way to burn ISO 9660 formatted data</DT>
|
<DT>Learn to know a more versatile way to burn ISO 9660 formatted data</DT>
|
||||||
<DD>
|
<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>.
|
<A HREF="http://scdbackup.sourceforge.net/xorriso_eng.html">xorriso</A>.
|
||||||
</DD>
|
</DD>
|
||||||
</DL>
|
</DL>
|
||||||
|
|
||||||
Testers wanted who are willing to risk some DVD-R DL media
|
|
||||||
or to do experiments on BD-R media.
|
|
||||||
|
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
@ -194,7 +191,7 @@ 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.8.pl00.tar.gz">cdrskin-0.6.8.pl00.tar.gz</A>
|
||||||
(750 KB).
|
(750 KB).
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
@ -244,20 +241,17 @@ 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.6.6.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>New operating system adapter "dummy" for stdio on general X/Open systems
|
<LI>Made -scanbus work with high SCSI bus numbers</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.6.6.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none</LI>
|
<LI>Old MMC-1 drives were rejected</LI>
|
||||||
<!--
|
<!--
|
||||||
<LI>none</LI>
|
<LI>none</LI>
|
||||||
-->
|
-->
|
||||||
@ -267,8 +261,8 @@ Bug fixes towards cdrskin-0.6.2.pl00:
|
|||||||
|
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Development snapshot, version 0.6.5 :</H3></DT>
|
<DT><H3>Development snapshot, version 0.6.9 :</H3></DT>
|
||||||
<DD>Enhancements towards current stable version 0.6.4.pl00:
|
<DD>Enhancements towards current stable version 0.6.8.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
<LI>none yet</LI>
|
||||||
<!--
|
<!--
|
||||||
@ -276,11 +270,20 @@ Bug fixes towards cdrskin-0.6.2.pl00:
|
|||||||
|
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
|
<DD>Bug fixes towards cdrskin-0.6.8.pl00:
|
||||||
|
<UL>
|
||||||
|
<LI>none yet</LI>
|
||||||
|
<!--
|
||||||
|
-->
|
||||||
|
</UL>
|
||||||
|
</DD>
|
||||||
|
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DD><A HREF="README_cdrskin_devel">README 0.6.5</A>
|
<DD><A HREF="README_cdrskin_devel">README 0.6.9</A>
|
||||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.6.5 --help</A></DD>
|
<DD><A HREF="cdrskin__help_devel">cdrskin_0.6.9 --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.9 -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.9)</A></DD>
|
||||||
<DD> </DD>
|
<DD> </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,7 +303,7 @@ 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.9.tar.gz">cdrskin-0.6.9.tar.gz</A>
|
||||||
(750 KB).
|
(750 KB).
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
@ -334,7 +337,7 @@ Historic versions based on Derek's and Ben's
|
|||||||
<BR>
|
<BR>
|
||||||
Very special thanks to Andy Polyakov whose
|
Very special thanks to Andy Polyakov whose
|
||||||
<A HREF="http://fy.chalmers.se/~appro/linux/DVD+RW/tools">dvd+rw-tools</A>
|
<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>
|
</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
@ -496,12 +499,17 @@ and by <A HREF="http://sourceforge.net">sourceforge.net</A><BR>
|
|||||||
<A href="http://sourceforge.net">
|
<A href="http://sourceforge.net">
|
||||||
<IMG src="sflogo-88-1.png" BORDER="0" ALT="SourceForge Logo"></A>
|
<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> -->
|
<!-- 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>
|
</FONT></CENTER>
|
||||||
<HR>
|
<HR>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>Links to my other published software projects :
|
<DT>Links to my other published software projects :
|
||||||
<DD><A HREF="http://scdbackup.webframe.org/xorriso_eng.html">
|
<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.
|
No mkisofs needed.
|
||||||
<DL>
|
<DL>
|
||||||
<DD>
|
<DD>
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2009.03.13.080001"
|
#define Cdrskin_timestamP "2009.07.14.100001"
|
||||||
|
@ -6506,7 +6506,7 @@ Made libburn number transition to 0.6.4
|
|||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_5
|
+ cdrskin/add_ts_changes_to_libburn_0_6_5
|
||||||
Updated cdrskin tarball generator
|
Updated cdrskin tarball generator
|
||||||
|
|
||||||
13 Mar 2009 []
|
13 Mar 2009 [2534]
|
||||||
cdrskin/changelog.txt
|
cdrskin/changelog.txt
|
||||||
Documented changes and release timestamp
|
Documented changes and release timestamp
|
||||||
|
|
||||||
@ -6535,8 +6535,203 @@ Made libburn number transition to 0.6.5
|
|||||||
+ cdrskin/add_ts_changes_to_libburn_0_6_5
|
+ cdrskin/add_ts_changes_to_libburn_0_6_5
|
||||||
Updated cdrskin tarball generator
|
Updated cdrskin tarball generator
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.6.5 -
|
13 Mar 2009 [2535]
|
||||||
------------------------------------ cycle - cdrskin-0.6.5 -
|
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
|
TODO
|
||||||
@ -6545,6 +6740,7 @@ Updated cdrskin tarball generator
|
|||||||
|
|
||||||
--------------------------------- bugs -------------------------------------
|
--------------------------------- bugs -------------------------------------
|
||||||
|
|
||||||
|
|
||||||
- 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
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# compile_cdrskin.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-*
|
# to be executed within ./libburn-* resp ./cdrskin-*
|
||||||
|
|
||||||
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_8"
|
||||||
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_8"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_0_6_4"
|
libvers="-DCdrskin_libburn_0_6_8"
|
||||||
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_9"
|
||||||
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,7 +75,7 @@ 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 " -libburn_0_6_8 set macro to match libburn-0.6.8"
|
||||||
echo " -libburn_svn set macro to match current libburn-SVN."
|
echo " -libburn_svn set macro to match current libburn-SVN."
|
||||||
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."
|
||||||
|
26
configure.ac
26
configure.ac
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([libburn], [0.6.4], [http://libburnia-project.org])
|
AC_INIT([libburn], [0.6.8], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -7,7 +7,7 @@ AC_CANONICAL_TARGET
|
|||||||
|
|
||||||
AM_INIT_AUTOMAKE([subdir-objects])
|
AM_INIT_AUTOMAKE([subdir-objects])
|
||||||
|
|
||||||
dnl Notes by ts A71207 - A81111 :
|
dnl Notes by ts A71207 - A90714 :
|
||||||
dnl
|
dnl
|
||||||
dnl Regrettably the meaning of the various version types was misunderstood
|
dnl Regrettably the meaning of the various version types was misunderstood
|
||||||
dnl before version 0.4.1.
|
dnl before version 0.4.1.
|
||||||
@ -71,6 +71,8 @@ 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.2 = libburn.so.4.27.0
|
||||||
dnl 0.6.4 = libburn.so.4.29.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
|
||||||
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 +98,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=8
|
||||||
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 +109,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 A90714
|
||||||
dnl This is the release version libburn-0.6.4 = libburn.so.4.29.0
|
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 ### 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 = 37 - 33 = 4 . Linux library name = libburn.so.4.33.0
|
||||||
LT_CURRENT=33
|
LT_CURRENT=37
|
||||||
LT_AGE=29
|
LT_AGE=33
|
||||||
LT_REVISION=0
|
LT_REVISION=0
|
||||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||||
|
|
||||||
@ -162,6 +164,7 @@ AC_SUBST(THREAD_LIBS)
|
|||||||
|
|
||||||
TARGET_SHIZZLE
|
TARGET_SHIZZLE
|
||||||
AC_SUBST(ARCH)
|
AC_SUBST(ARCH)
|
||||||
|
AC_SUBST(LIBBURNIA_PKGCONFDIR)
|
||||||
AC_SUBST(LIBBURN_ARCH_LIBS)
|
AC_SUBST(LIBBURN_ARCH_LIBS)
|
||||||
|
|
||||||
dnl ts A90303
|
dnl ts A90303
|
||||||
@ -193,6 +196,13 @@ else
|
|||||||
CFLAGS="$CFLAGS -DDEBUG"
|
CFLAGS="$CFLAGS -DDEBUG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
dnl Determine target directory for libburn-*.pc
|
||||||
|
dnl Important: Must be performed _after_ TARGET_SHIZZLE
|
||||||
|
dnl
|
||||||
|
LIBBURNIA_SET_PKGCONFIG
|
||||||
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
doc/doxygen.conf
|
doc/doxygen.conf
|
||||||
|
@ -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() */
|
/* 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,
|
libdax_msgs_submit(libdax_messenger,
|
||||||
d->global_index, 0x00020113,
|
d->global_index, 0x00020113,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
|
@ -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 A61020 : d->status was set to BURN_DISC_BLANK as pure guess */
|
||||||
|
|
||||||
/* ts A71128 : run read_disc_info() for any recognizeable profile */
|
/* 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->cdr_write || d->mdata->cdrw_write ||
|
||||||
d->mdata->dvdr_write || d->mdata->dvdram_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 *burn_drive_finish_enum(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
struct burn_drive *t;
|
struct burn_drive *t;
|
||||||
|
char msg[BURN_DRIVE_ADR_LEN + 160];
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* ts A60821
|
/* ts A60821
|
||||||
<<< debug: for tracing calls which might use open drive fds */
|
<<< debug: for tracing calls which might use open drive fds */
|
||||||
int mmc_function_spy(struct burn_drive *d, char * text);
|
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");
|
mmc_function_spy(NULL, "enumerate_common : -------- doing grab");
|
||||||
|
|
||||||
/* try to get the drive info */
|
/* try to get the drive info */
|
||||||
if (t->grab(t)) {
|
ret = t->grab(t);
|
||||||
|
if (ret) {
|
||||||
burn_print(2, "getting drive info\n");
|
burn_print(2, "getting drive info\n");
|
||||||
t->getcaps(t);
|
t->getcaps(t);
|
||||||
t->unlock(t);
|
t->unlock(t);
|
||||||
t->released = 1;
|
t->released = 1;
|
||||||
} else {
|
} 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);
|
burn_drive_unregister(t);
|
||||||
t = NULL;
|
t = NULL;
|
||||||
}
|
}
|
||||||
@ -855,7 +864,7 @@ static int drive_getcaps(struct burn_drive *d, struct burn_drive_info *out)
|
|||||||
a ssert(d->mdata);
|
a ssert(d->mdata);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!d->idata->valid || !d->mdata->valid)
|
if(d->idata->valid <= 0 || d->mdata->valid <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
id = (struct burn_scsi_inquiry_data *)d->idata;
|
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 char scanned[32];
|
||||||
unsigned count = 0;
|
unsigned count = 0;
|
||||||
int i;
|
int i, ret;
|
||||||
|
|
||||||
/* ts A61007 : moved up to burn_drive_scan() */
|
/* ts A61007 : moved up to burn_drive_scan() */
|
||||||
/* a ssert(burn_running); */
|
/* 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)
|
if (drive_array[i].global_index < 0)
|
||||||
continue; /* invalid device */
|
continue; /* invalid device */
|
||||||
|
|
||||||
while (!drive_getcaps(&drive_array[i],
|
/* ts A90602 : This old loop is not plausible. See A70907.
|
||||||
&(*drives)[*n_drives])) {
|
while (!drive_getcaps(&drive_array[i],
|
||||||
|
&(*drives)[*n_drives])) {
|
||||||
sleep(1);
|
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);
|
scanned[i / 8] |= 1 << (i % 8);
|
||||||
}
|
}
|
||||||
|
if (*drives != NULL && *n_drives == 0) {
|
||||||
|
free ((char *) *drives);
|
||||||
|
*drives = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return(1);
|
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)
|
int burn_drive_get_read_speed(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
if(!d->mdata->valid)
|
if(d->mdata->valid <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
return d->mdata->max_read_speed;
|
return d->mdata->max_read_speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
int burn_drive_get_write_speed(struct burn_drive *d)
|
int burn_drive_get_write_speed(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
if(!d->mdata->valid)
|
if(d->mdata->valid <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
return d->mdata->max_write_speed;
|
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 */
|
/* ts A61021 : New API function */
|
||||||
int burn_drive_get_min_write_speed(struct burn_drive *d)
|
int burn_drive_get_min_write_speed(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
if(!d->mdata->valid)
|
if(d->mdata->valid <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
return d->mdata->min_write_speed;
|
return d->mdata->min_write_speed;
|
||||||
}
|
}
|
||||||
@ -1742,6 +1760,10 @@ int burn_abort(int patience,
|
|||||||
unsigned long wait_grain= 100000;
|
unsigned long wait_grain= 100000;
|
||||||
time_t start_time, current_time, pacifier_time, end_time;
|
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);
|
current_time = start_time = pacifier_time = time(0);
|
||||||
end_time = start_time + patience;
|
end_time = start_time + patience;
|
||||||
|
|
||||||
@ -1758,15 +1780,35 @@ int burn_abort(int patience,
|
|||||||
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) {
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
|
|
||||||
|
/* ts A90302
|
||||||
|
<<< this causes a race condition with drive
|
||||||
|
usage and drive disposal.
|
||||||
|
*/
|
||||||
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
|
continue;
|
||||||
#endif /* NIX */
|
|
||||||
|
#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) {
|
if(occup <= 10) {
|
||||||
burn_drive_forget(&(drive_array[i]), 1);
|
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;
|
struct burn_speed_descriptor *sd, *csd = NULL;
|
||||||
|
|
||||||
(*speed_list) = NULL;
|
(*speed_list) = NULL;
|
||||||
if(!d->mdata->valid)
|
if(d->mdata->valid <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
for (sd = d->mdata->speed_descriptors; sd != NULL; sd = sd->next) {
|
for (sd = d->mdata->speed_descriptors; sd != NULL; sd = sd->next) {
|
||||||
ret = burn_speed_descriptor_new(&csd, NULL, csd, 0);
|
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)
|
if (speed_goal < 0)
|
||||||
best_speed = 2000000000;
|
best_speed = 2000000000;
|
||||||
*best_descr = NULL;
|
*best_descr = NULL;
|
||||||
if(!d->mdata->valid)
|
if(d->mdata->valid <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
for (sd = d->mdata->speed_descriptors; sd != NULL; sd = sd->next) {
|
for (sd = d->mdata->speed_descriptors; sd != NULL; sd = sd->next) {
|
||||||
if (flag & 1)
|
if (flag & 1)
|
||||||
|
@ -2260,7 +2260,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 8
|
||||||
/** 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.
|
||||||
|
@ -545,7 +545,8 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
|||||||
0x0002016a (FAILURE,HIGH) = No MMC transport adapter is present
|
0x0002016a (FAILURE,HIGH) = No MMC transport adapter is present
|
||||||
0x0002016b (WARNING,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
|
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
|
0x00020170 (NOTE,HIGH) = Closing open session before writing new one
|
||||||
0x00020171 (NOTE,HIGH) = Closing BD-R with accidently open session
|
0x00020171 (NOTE,HIGH) = Closing BD-R with accidently open session
|
||||||
|
|
||||||
|
152
libburn/mmc.c
152
libburn/mmc.c
@ -77,6 +77,12 @@ extern struct libdax_msgs *libdax_messenger;
|
|||||||
# define Libburn_do_not_format_dvd_ram_or_bd_rE 1
|
# 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:
|
/* DVD/BD progress report:
|
||||||
ts A61219 : It seems to work with a used (i.e. thoroughly formatted) DVD+RW.
|
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
|
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)
|
static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
|
||||||
{
|
{
|
||||||
struct buffer buf;
|
struct buffer buf;
|
||||||
@ -1610,6 +1685,10 @@ regard_as_blank:;
|
|||||||
break;
|
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)
|
if ((d->current_profile != 0 || d->status != BURN_DISC_UNREADY)
|
||||||
&& ! d->current_is_supported_profile) {
|
&& ! d->current_is_supported_profile) {
|
||||||
if (!d->silent_on_scsi_error) {
|
if (!d->silent_on_scsi_error) {
|
||||||
@ -1625,7 +1704,7 @@ regard_as_blank:;
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* >>> ts A61217 : Note for future
|
/* ts A61217 : Note for future
|
||||||
growisofs performs OPC if (data[0]<<8)|data[1]<=32
|
growisofs performs OPC if (data[0]<<8)|data[1]<=32
|
||||||
which indicates no OPC entries are attached to the
|
which indicates no OPC entries are attached to the
|
||||||
reply from the drive.
|
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
|
/* ts A61201 : found in unfunctional state
|
||||||
*/
|
*/
|
||||||
static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
|
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_profile_text[0] = 0;
|
||||||
d->current_is_cd_profile = 0;
|
d->current_is_cd_profile = 0;
|
||||||
d->current_is_supported_profile = 0;
|
d->current_is_supported_profile = 0;
|
||||||
|
d->current_is_guessed_profile = 0;
|
||||||
d->current_has_feat21h = 0;
|
d->current_has_feat21h = 0;
|
||||||
d->current_feat21h_link_size = -1;
|
d->current_feat21h_link_size = -1;
|
||||||
d->current_feat23h_byte4 = 0;
|
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;
|
c.dir = FROM_DRIVE;
|
||||||
d->issue_command(d, &c);
|
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;
|
return 0;
|
||||||
|
}
|
||||||
old_alloc_len = *alloc_len;
|
old_alloc_len = *alloc_len;
|
||||||
*alloc_len = len = mmc_four_char_to_int(c.page->data);
|
*alloc_len = len = mmc_four_char_to_int(c.page->data);
|
||||||
if (len > old_alloc_len)
|
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.page->bytes = 0;
|
||||||
c.dir = FROM_DRIVE;
|
c.dir = FROM_DRIVE;
|
||||||
d->issue_command(d, &c);
|
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)
|
if (c.error)
|
||||||
return 0;
|
return 0;
|
||||||
len = mmc_four_char_to_int(c.page->data);
|
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_profile_text[0] = 0;
|
||||||
d->current_is_cd_profile = 0;
|
d->current_is_cd_profile = 0;
|
||||||
d->current_is_supported_profile = 0;
|
d->current_is_supported_profile = 0;
|
||||||
|
d->current_is_guessed_profile = 0;
|
||||||
d->current_has_feat21h = 0;
|
d->current_has_feat21h = 0;
|
||||||
d->current_feat21h_link_size = -1;
|
d->current_feat21h_link_size = -1;
|
||||||
d->current_feat23h_byte4 = 0;
|
d->current_feat23h_byte4 = 0;
|
||||||
|
@ -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 burn_write_opts_set_underrun_proof(struct burn_write_opts *opts,
|
||||||
int underrun_proof)
|
int underrun_proof)
|
||||||
{
|
{
|
||||||
if (!opts->drive->mdata->valid)
|
if (opts->drive->mdata->valid <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (opts->drive->mdata->underrun_proof) {
|
if (opts->drive->mdata->underrun_proof) {
|
||||||
opts->underrun_proof = underrun_proof;
|
opts->underrun_proof = underrun_proof;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -553,11 +552,26 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
if (c->page) {
|
if (c->page) {
|
||||||
ccb->csio.data_ptr = c->page->data;
|
ccb->csio.data_ptr = c->page->data;
|
||||||
if (c->dir == FROM_DRIVE) {
|
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 */
|
/* touch page so we can use valgrind */
|
||||||
memset(c->page->data, 0, BUFFER_SIZE);
|
memset(c->page->data, 0, BUFFER_SIZE);
|
||||||
} else {
|
} 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;
|
ccb->csio.dxfer_len = c->page->bytes;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -470,7 +470,7 @@ static int sg_fcntl_lock(int *fd, char *fd_name, int l_type, int verbous)
|
|||||||
/* ts A60926 */
|
/* ts A60926 */
|
||||||
static int sg_open_drive_fd(char *fname, int scan_mode)
|
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];
|
char msg[81];
|
||||||
|
|
||||||
/* ts A70409 : DDLP-B */
|
/* 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",
|
"libburn: experimental: O_EXCL= %d , O_NDELAY= %d\n",
|
||||||
!!(open_mode&O_EXCL),!!(open_mode&O_NDELAY));
|
!!(open_mode&O_EXCL),!!(open_mode&O_NDELAY));
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
try_open:;
|
||||||
fd = open(fname, open_mode);
|
fd = open(fname, open_mode);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
/* <<< debugging
|
/* <<< debugging
|
||||||
@ -511,6 +512,17 @@ static int sg_open_drive_fd(char *fname, int scan_mode)
|
|||||||
fname,errno);
|
fname,errno);
|
||||||
*/
|
*/
|
||||||
if (errno == EBUSY) {
|
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);
|
sg_handle_busy_device(fname, errno);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -793,7 +805,7 @@ static int is_scsi_drive(char *fname, int *bus_no, int *host_no,
|
|||||||
if (ret<=0) {
|
if (ret<=0) {
|
||||||
if (linux_sg_enumerate_debug)
|
if (linux_sg_enumerate_debug)
|
||||||
fprintf(stderr, "cannot lock siblings\n");
|
fprintf(stderr, "cannot lock siblings\n");
|
||||||
sg_handle_busy_device(fname, 0);
|
sg_handle_busy_device(fname, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* the final occupation will be done in sg_grab() */
|
/* the final occupation will be done in sg_grab() */
|
||||||
|
@ -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 */
|
/** flag&1= do only inquire alloc_len */
|
||||||
static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
|
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;
|
unsigned char *page;
|
||||||
struct command c;
|
struct command c;
|
||||||
struct burn_speed_descriptor *sd;
|
struct burn_speed_descriptor *sd;
|
||||||
|
char msg[BURN_DRIVE_ADR_LEN + 160];
|
||||||
|
|
||||||
/* ts A61225 : 1 = report about post-MMC-1 speed descriptors */
|
/* ts A61225 : 1 = report about post-MMC-1 speed descriptors */
|
||||||
static int speed_debug = 0;
|
static int speed_debug = 0;
|
||||||
|
|
||||||
if (*alloc_len < 8)
|
if (*alloc_len < 10)
|
||||||
return 0;
|
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));
|
memset(&buf, 0, sizeof(buf));
|
||||||
scsi_init_command(&c, SPC_MODE_SENSE, sizeof(SPC_MODE_SENSE));
|
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);
|
d->issue_command(d, &c);
|
||||||
if (c.error) {
|
if (c.error) {
|
||||||
memset(&buf, 0, sizeof(buf));
|
memset(&buf, 0, sizeof(buf));
|
||||||
d->mdata->valid = -1;
|
m->valid = -1;
|
||||||
was_error = 1;
|
was_error = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
size = c.page->data[0] * 256 + c.page->data[1];
|
size = c.page->data[0] * 256 + c.page->data[1];
|
||||||
m = d->mdata;
|
|
||||||
page = c.page->data + 8;
|
page = c.page->data + 8;
|
||||||
|
|
||||||
/* ts A61225 :
|
/* 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
|
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".
|
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];
|
page_length = page[1];
|
||||||
old_alloc_len = *alloc_len;
|
old_alloc_len = *alloc_len;
|
||||||
*alloc_len = page_length + 8;
|
*alloc_len = page_length + 10;
|
||||||
if (flag & 1)
|
if (flag & 1)
|
||||||
return !was_error;
|
return !was_error;
|
||||||
if (page_length + 8 > old_alloc_len)
|
if (page_length + 10 > old_alloc_len)
|
||||||
page_length = old_alloc_len - 8;
|
page_length = old_alloc_len - 10;
|
||||||
if (page_length < 22)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
m->valid = 0;
|
/* ts A90602 : 20 asserts page[21]. (see SPC-1 8.3.3) */
|
||||||
burn_mdata_free_subs(m);
|
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->buffer_size = page[12] * 256 + page[13];
|
||||||
m->dvdram_read = page[2] & 32;
|
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->min_end_lba = 0x7fffffff;
|
||||||
m->max_end_lba = 0;
|
m->max_end_lba = 0;
|
||||||
|
|
||||||
m->valid = 1;
|
if (!was_error)
|
||||||
|
m->valid = 1;
|
||||||
|
|
||||||
mmc_get_configuration(d);
|
mmc_get_configuration(d);
|
||||||
|
|
||||||
/* ts A61225 : end of MMC-1 , begin of MMC-3 */
|
/* 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;
|
goto try_mmc_get_performance;
|
||||||
|
|
||||||
m->cur_write_speed = page[28] * 256 + page[29];
|
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++) {
|
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)
|
if (speed_debug)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"LIBBURN_DEBUG: write speed #%d = %d kB/s (rc %d)\n",
|
"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 */
|
/* ts A61226 */
|
||||||
ret = burn_speed_descriptor_new(&(d->mdata->speed_descriptors),
|
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,
|
strcpy(sd->profile_name,
|
||||||
d->current_profile_text);
|
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;
|
sd->write_speed = speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,7 +475,7 @@ try_mmc_get_performance:;
|
|||||||
|
|
||||||
void spc_sense_caps(struct burn_drive *d)
|
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)
|
if (mmc_function_spy(d, "sense_caps") <= 0)
|
||||||
return;
|
return;
|
||||||
@ -920,6 +936,18 @@ enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
|
|||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"Logical unit is in the process of becoming ready");
|
"Logical unit is in the process of becoming ready");
|
||||||
return RETRY;
|
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:
|
case 0x09:
|
||||||
if (*key != 4)
|
if (*key != 4)
|
||||||
break;
|
break;
|
||||||
|
@ -161,6 +161,8 @@ struct burn_drive
|
|||||||
char current_profile_text[80];
|
char current_profile_text[80];
|
||||||
int current_is_cd_profile;
|
int current_is_cd_profile;
|
||||||
int current_is_supported_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.
|
/* ts A70128 : MMC-to-MMC feature info from 46h for DVD-RW.
|
||||||
Quite internal. Regard as opaque :)
|
Quite internal. Regard as opaque :)
|
||||||
|
@ -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 burn_stdio_write(int fd, char *buf, int count, struct burn_drive *d,
|
||||||
int flag)
|
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) {
|
if (write(fd, buf, count) != count) {
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
0x00020148,
|
0x00020148,
|
||||||
@ -2093,7 +2100,7 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
|
|||||||
{
|
{
|
||||||
struct cue_sheet *sheet;
|
struct cue_sheet *sheet;
|
||||||
struct burn_drive *d = o->drive;
|
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;
|
struct burn_track *lt, *t;
|
||||||
int first = 1, i, ret, lba, nwa = 0, multi_mem;
|
int first = 1, i, ret, lba, nwa = 0, multi_mem;
|
||||||
off_t default_size;
|
off_t default_size;
|
||||||
@ -2113,8 +2120,33 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
|
|||||||
else
|
else
|
||||||
d->stream_recording_start = 0;
|
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));
|
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->rlba = -150;
|
||||||
d->toc_temp = 9;
|
d->toc_temp = 9;
|
||||||
|
|
||||||
@ -2312,6 +2344,8 @@ fail_wo_sync:;
|
|||||||
d->busy = BURN_DRIVE_IDLE;
|
d->busy = BURN_DRIVE_IDLE;
|
||||||
ex:;
|
ex:;
|
||||||
d->do_stream_recording = 0;
|
d->do_stream_recording = 0;
|
||||||
|
if (d->buffer != NULL)
|
||||||
|
free((char *) d->buffer);
|
||||||
d->buffer = buffer_mem;
|
d->buffer = buffer_mem;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ int libburner_aquire_drive(char *drive_adr, int *driveno)
|
|||||||
ret = libburner_aquire_by_adr(drive_adr);
|
ret = libburner_aquire_by_adr(drive_adr);
|
||||||
else
|
else
|
||||||
ret = libburner_aquire_by_driveno(driveno);
|
ret = libburner_aquire_by_driveno(driveno);
|
||||||
if (ret <= 0)
|
if (ret <= 0 || *driveno <= 0)
|
||||||
return ret;
|
return ret;
|
||||||
burn_disc_get_profile(drive_list[0].drive, ¤t_profile,
|
burn_disc_get_profile(drive_list[0].drive, ¤t_profile,
|
||||||
current_profile_name);
|
current_profile_name);
|
||||||
|
Reference in New Issue
Block a user