Compare commits
3 Commits
ZeroSevenZ
...
ZeroSixTwo
Author | SHA1 | Date | |
---|---|---|---|
eaf9048cd3 | |||
7e06575993 | |||
f9053bcfb3 |
10
Makefile.am
10
Makefile.am
@ -1,8 +1,4 @@
|
||||
|
||||
# ts A90315 : LIBBURNIA_PKGCONFDIR is defined OS specific in acinclude.m4
|
||||
# was: pkgconfigdir=$(libdir)/pkgconfig
|
||||
pkgconfigdir=$(LIBBURNIA_PKGCONFDIR)
|
||||
|
||||
pkgconfigdir=$(libdir)/pkgconfig
|
||||
libincludedir=$(includedir)/libburn
|
||||
|
||||
lib_LTLIBRARIES = libburn/libburn.la
|
||||
@ -107,9 +103,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 - A90507
|
||||
## cdrskin construction site - ts A60816 - A90220
|
||||
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_7_0
|
||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_6_2
|
||||
|
||||
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
||||
|
75
README
75
README
@ -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.7.0.pl00.tar.gz
|
||||
http://files.libburnia-project.org/releases/libburn-0.6.2.pl00.tar.gz
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
@ -19,10 +19,10 @@ Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
||||
|
||||
From tarball
|
||||
|
||||
Obtain libburn-0.7.0.pl00.tar.gz, take it to a directory of your choice and do:
|
||||
Obtain libburn-0.6.2.pl00.tar.gz, take it to a directory of your choice and do:
|
||||
|
||||
tar xzf libburn-0.7.0.pl00.tar.gz
|
||||
cd libburn-0.7.0
|
||||
tar xzf libburn-0.6.2.pl00.tar.gz
|
||||
cd libburn-0.6.2
|
||||
./configure --prefix=/usr
|
||||
make
|
||||
|
||||
@ -47,8 +47,8 @@ Our build system is based on autotools. For preparing the build of a SVN
|
||||
snapshot you will need autotools of at least version 1.7.
|
||||
Do in a directory of your choice:
|
||||
|
||||
svn co http://svn.libburnia-project.org/libburn/trunk libburn-svn
|
||||
cd libburn-svn
|
||||
svn co http://svn.libburnia-project.org/libburn/trunk libburn-0.6.3
|
||||
cd libburn-0.6.3
|
||||
./bootstrap
|
||||
./configure --prefix=/usr
|
||||
make
|
||||
@ -83,10 +83,8 @@ 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 full ports to other systems we would need : login on a development machine
|
||||
For ports to other systems we would need : login on a development machine
|
||||
resp. a live OS on CD or DVD, advise from a system person about the equivalent
|
||||
of Linux sg or FreeBSD CAM, volunteers for testing of realistic use cases.
|
||||
|
||||
@ -365,66 +363,13 @@ 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. 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:".
|
||||
- 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:".
|
||||
|
||||
- 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.
|
||||
|
||||
- 20 Jul 2009 libisoburn-0.4.0.pl01 fixes a regression in xorriso which caused
|
||||
data loss in older sessions if xorriso was used underneath growisofs.
|
||||
Affected are releases since libisoburn-0.3.2 in january 2009.
|
||||
|
||||
- 25 Aug 2009 libisofs-0.6.22 can record MD5 checksums for the whole session
|
||||
and for each single data file. Checksum tags allow to verify superblock and
|
||||
directory tree before importing them.
|
||||
|
||||
- 27 Aug 2009 libburn-0.7.0 allows to calm down a drive and to inquire its
|
||||
supported profiles. It works around some pitfalls with U3 enhanced memory
|
||||
sticks which emulate a CD-ROM.
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
59
acinclude.m4
59
acinclude.m4
@ -1,11 +1,9 @@
|
||||
AC_DEFUN([TARGET_SHIZZLE],
|
||||
[
|
||||
ARCH=""
|
||||
LIBBURNIA_PKGCONFDIR="$libdir"/pkgconfig
|
||||
|
||||
AC_MSG_CHECKING([target operating system])
|
||||
|
||||
|
||||
case $target in
|
||||
*-*-linux*)
|
||||
ARCH=linux
|
||||
@ -14,66 +12,11 @@ AC_DEFUN([TARGET_SHIZZLE],
|
||||
*-*-freebsd*)
|
||||
ARCH=freebsd
|
||||
LIBBURN_ARCH_LIBS=-lcam
|
||||
LIBBURNIA_PKGCONFDIR=$(echo "$libdir" | sed 's/\/lib$/\/libdata/')/pkgconfig
|
||||
;;
|
||||
*)
|
||||
ARCH=
|
||||
LIBBURN_ARCH_LIBS=
|
||||
# AC_ERROR([You are attempting to compile for an unsupported platform])
|
||||
AC_ERROR([You are attempting to compile for an unsupported platform])
|
||||
;;
|
||||
esac
|
||||
|
||||
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,8 +4,7 @@
|
||||
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.7.0.pl00.tar.gz
|
||||
|
||||
http://scdbackup.sourceforge.net/cdrskin-0.6.2.pl00.tar.gz
|
||||
Copyright (C) 2006-2009 Thomas Schmitt, provided under GPL version 2.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
@ -15,8 +14,6 @@ most of the libburn features from the command line.
|
||||
|
||||
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
|
||||
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 ..."
|
||||
@ -24,10 +21,10 @@ By using this software you agree to the disclaimer at the end of this text
|
||||
|
||||
Compilation, First Glimpse, Installation
|
||||
|
||||
Obtain cdrskin-0.7.0.pl00.tar.gz, take it to a directory of your choice and do:
|
||||
Obtain cdrskin-0.6.2.pl00.tar.gz, take it to a directory of your choice and do:
|
||||
|
||||
tar xzf cdrskin-0.7.0.pl00.tar.gz
|
||||
cd cdrskin-0.7.0
|
||||
tar xzf cdrskin-0.6.2.pl00.tar.gz
|
||||
cd cdrskin-0.6.2
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
@ -289,9 +286,6 @@ 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
|
||||
|
@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
|
||||
# My changes are in $changes , mainly in $changes/cdrskin
|
||||
changes="./libburn-release"
|
||||
|
||||
skin_release="0.7.0"
|
||||
skin_release="0.6.2"
|
||||
patch_level=".pl00"
|
||||
skin_rev="$skin_release""$patch_level"
|
||||
|
@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
|
||||
# My changes are in $changes , mainly in $changes/cdrskin
|
||||
changes="./libburn-develop"
|
||||
|
||||
skin_release="0.7.1"
|
||||
skin_release="0.6.3"
|
||||
patch_level=""
|
||||
skin_rev="$skin_release""$patch_level"
|
||||
|
@ -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 "May 07, 2009"
|
||||
.TH CDRSKIN 1 "Jan 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 or BD Media
|
||||
Sequentially Recordable DVD 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, CD, DVD, or BD burners, are accessed via addresses which
|
||||
The drives, either CD burners or DVD 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 CD, unformatted DVD-R[W], DVD+R, or BD-R appendable
|
||||
after the current session has been written.
|
||||
This option keeps the CD or unformatted DVD-R[W] 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 or sequential DVD-R[W] in Disc-at-once
|
||||
(DAO) mode.
|
||||
Write CD in Session At Once mode, a sequential DVD-R[W] in Disc-at-once
|
||||
(DAO) mode, or a DVD+R[/DL].
|
||||
.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, or DVD+R[/DL], or BD but actually
|
||||
-sao is permissible with overwriteable DVD, BD or DVD+R[/DL] but actually
|
||||
only imposes restrictions without providing known advantages.
|
||||
.br
|
||||
-sao can only be used for tracks of fixely predicted size. This implies that
|
||||
@ -1186,15 +1186,13 @@ Use and report literal Bus,Target,Lun addresses rather than real SCSI and
|
||||
pseudo ATA addresses. This method is outdated and was never compatible with
|
||||
original cdrecord.
|
||||
.TP
|
||||
.BI stream_recording="on"|"off"|number
|
||||
.BI stream_recording="on"|"off"
|
||||
By setting "on" request that compliance to the desired speed setting is
|
||||
preferred over management of write errors. With DVD-RAM and BD this can
|
||||
bring effective write speed near to the nominal write speed of the media.
|
||||
But it will also disable the automatic use of replacement blocks
|
||||
if write errors occur. It might as well be disliked or ignored by the drive.
|
||||
.br
|
||||
If a number is given, then error management stays enabled for all byte
|
||||
addresses below that number. Any number below 16s is the same as "off".
|
||||
.SH EXAMPLES
|
||||
.SS
|
||||
.B Get an overview of drives and their addresses:
|
||||
@ -1239,15 +1237,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], DVD+R[/DL], or BD-R:
|
||||
.B Write multi-session to the same CD, DVD-R[W] or DVD+R[/DL]:
|
||||
.br
|
||||
cdrskin dev=/dev/sr0 -v padsize=300k -multi 1.iso
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi 1.iso
|
||||
.br
|
||||
cdrskin dev=/dev/sr0 -v padsize=300k -multi 2.iso
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi 2.iso
|
||||
.br
|
||||
cdrskin dev=/dev/sr0 -v padsize=300k -multi 3.iso
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi 3.iso
|
||||
.br
|
||||
cdrskin dev=/dev/sr0 -v padsize=300k 4.iso
|
||||
cdrskin dev=/dev/hdc -v padsize=300k 4.iso
|
||||
.SS
|
||||
.B Get multi-session info for option -C of program mkisofs:
|
||||
.br
|
||||
|
@ -88,7 +88,7 @@ or
|
||||
|
||||
/** The official program version */
|
||||
#ifndef Cdrskin_prog_versioN
|
||||
#define Cdrskin_prog_versioN "0.7.0"
|
||||
#define Cdrskin_prog_versioN "0.6.2"
|
||||
#endif
|
||||
|
||||
/** The official libburn interface revision to use.
|
||||
@ -98,10 +98,10 @@ or
|
||||
#define Cdrskin_libburn_majoR 0
|
||||
#endif
|
||||
#ifndef Cdrskin_libburn_minoR
|
||||
#define Cdrskin_libburn_minoR 7
|
||||
#define Cdrskin_libburn_minoR 6
|
||||
#endif
|
||||
#ifndef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_micrO 0
|
||||
#define Cdrskin_libburn_micrO 2
|
||||
#endif
|
||||
|
||||
|
||||
@ -135,43 +135,44 @@ or
|
||||
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
||||
|
||||
|
||||
#ifdef Cdrskin_libburn_0_7_0
|
||||
#define Cdrskin_libburn_versioN "0.7.0"
|
||||
#ifdef Cdrskin_libburn_0_6_2
|
||||
#define Cdrskin_libburn_versioN "0.6.2"
|
||||
#define Cdrskin_libburn_from_pykix_svN 1
|
||||
#endif /* Cdrskin_libburn_0_7_0 */
|
||||
#endif /* Cdrskin_libburn_0_6_2 */
|
||||
|
||||
#ifdef Cdrskin_libburn_0_7_1
|
||||
#define Cdrskin_libburn_versioN "0.7.1"
|
||||
#ifdef Cdrskin_libburn_0_6_3
|
||||
#define Cdrskin_libburn_versioN "0.6.3"
|
||||
#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 */
|
||||
|
||||
#endif /* Cdrskin_libburn_0_7_1 */
|
||||
#endif /* Cdrskin_libburn_0_6_3 */
|
||||
|
||||
#ifndef Cdrskin_libburn_versioN
|
||||
#define Cdrskin_libburn_0_7_0
|
||||
#define Cdrskin_libburn_versioN "0.7.0"
|
||||
#define Cdrskin_libburn_0_6_2
|
||||
#define Cdrskin_libburn_versioN "0.6.2"
|
||||
#define Cdrskin_libburn_from_pykix_svN 1
|
||||
#endif
|
||||
|
||||
#ifdef Cdrskin_libburn_0_7_0
|
||||
#ifdef Cdrskin_libburn_0_6_2
|
||||
#undef Cdrskin_libburn_majoR
|
||||
#undef Cdrskin_libburn_minoR
|
||||
#undef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_majoR 0
|
||||
#define Cdrskin_libburn_minoR 7
|
||||
#define Cdrskin_libburn_micrO 0
|
||||
#define Cdrskin_libburn_minoR 6
|
||||
#define Cdrskin_libburn_micrO 2
|
||||
#endif
|
||||
#ifdef Cdrskin_libburn_0_7_1
|
||||
#ifdef Cdrskin_libburn_0_6_3
|
||||
#undef Cdrskin_libburn_majoR
|
||||
#undef Cdrskin_libburn_minoR
|
||||
#undef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_majoR 0
|
||||
#define Cdrskin_libburn_minoR 7
|
||||
#define Cdrskin_libburn_micrO 1
|
||||
#define Cdrskin_libburn_minoR 6
|
||||
#define Cdrskin_libburn_micrO 3
|
||||
#endif
|
||||
|
||||
|
||||
@ -253,12 +254,6 @@ 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
|
||||
|
||||
@ -2697,13 +2692,10 @@ set_dev:;
|
||||
" --single_track accept only last argument as source_address\n");
|
||||
|
||||
#ifdef Cdrskin_libburn_has_stream_recordinG
|
||||
printf(" stream_recording=\"on\"|\"off\"|number\n");
|
||||
printf(
|
||||
" \"on\" requests to prefer speed over write\n");
|
||||
" stream_recording=\"on\"|\"off\" \"on\" requests to prefer speed\n");
|
||||
printf(
|
||||
" error management. A number prevents this with\n");
|
||||
printf(
|
||||
" byte addresses below that number.\n");
|
||||
" over write error management.\n");
|
||||
#endif
|
||||
|
||||
#ifdef Cdrskin_allow_libburn_taO
|
||||
@ -3128,7 +3120,7 @@ struct CdrskiN {
|
||||
int gracetime;
|
||||
int dummy_mode;
|
||||
int force_is_set;
|
||||
int stream_recording_is_set; /* see burn_write_opts_set_stream_recording() */
|
||||
int stream_recording_is_set;
|
||||
int single_track;
|
||||
int prodvd_cli_compatible;
|
||||
|
||||
@ -4407,15 +4399,13 @@ 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, busidx;
|
||||
int busmax= 16;
|
||||
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);
|
||||
drives_busses= malloc((skin->n_drives+1) * sizeof(int));
|
||||
if(drives_shown == NULL || drives_busses == NULL)
|
||||
if(drives_shown==NULL)
|
||||
{ret= -1; goto ex;}
|
||||
for(i=0;i<skin->n_drives;i++)
|
||||
drives_shown[i]= 0;
|
||||
@ -4473,28 +4463,7 @@ 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(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;
|
||||
for(busno= 0;busno<=busmax;busno++) {
|
||||
first_on_bus= 1;
|
||||
for(i=0;i<skin->n_drives;i++) {
|
||||
ret= Cdrskin_driveno_to_btldev(skin,i,btldev,1);
|
||||
@ -4532,8 +4501,6 @@ 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);
|
||||
}
|
||||
|
||||
@ -4760,23 +4727,6 @@ cannot_read:;
|
||||
return(0);
|
||||
}
|
||||
|
||||
int Cdrskin_print_all_profiles(struct CdrskiN *skin, struct burn_drive *drive,
|
||||
int flag)
|
||||
{
|
||||
int num_profiles, profiles[64], i, ret;
|
||||
char is_current[64], profile_name[80];
|
||||
|
||||
burn_drive_get_all_profiles(drive, &num_profiles, profiles, is_current);
|
||||
for(i= 0; i < num_profiles; i++) {
|
||||
ret= burn_obtain_profile_name(profiles[i], profile_name);
|
||||
if(ret <= 0)
|
||||
strcpy(profile_name, "unknown");
|
||||
printf("Profile: 0x%4.4X (%s)%s\n", (unsigned int) profiles[i],
|
||||
profile_name, is_current[i] ? " (current)" : "");
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/** Perform -atip .
|
||||
@param flag Bitfield for control purposes:
|
||||
@ -4802,10 +4752,8 @@ int Cdrskin_atip(struct CdrskiN *skin, int flag)
|
||||
if(s==BURN_DISC_APPENDABLE && skin->no_blank_appendable) {
|
||||
is_not_really_erasable= 1;
|
||||
} else if(s==BURN_DISC_EMPTY) {
|
||||
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
||||
if(skin->verbosity>=Cdrskin_verbose_progresS)
|
||||
printf("Current: none\n");
|
||||
Cdrskin_print_all_profiles(skin, drive, 0);
|
||||
}
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
|
||||
@ -4915,9 +4863,7 @@ int Cdrskin_atip(struct CdrskiN *skin, int flag)
|
||||
printf("Current: CD-RW\n");
|
||||
else
|
||||
printf("Current: CD-R\n");
|
||||
Cdrskin_print_all_profiles(skin, drive, 0);
|
||||
}
|
||||
|
||||
if(strstr(profile_name,"DVD")==profile_name) {
|
||||
/* These are dummy messages for project scdbackup, so its media recognition
|
||||
gets a hint that the media is suitable and not in need of blanking.
|
||||
@ -6520,7 +6466,7 @@ burn_failed:;
|
||||
burn_write_opts_set_force(o, !!skin->force_is_set);
|
||||
#endif
|
||||
#ifdef Cdrskin_libburn_has_stream_recordinG
|
||||
burn_write_opts_set_stream_recording(o, skin->stream_recording_is_set);
|
||||
burn_write_opts_set_stream_recording(o, !!skin->stream_recording_is_set);
|
||||
#endif
|
||||
|
||||
if(skin->dummy_mode) {
|
||||
@ -7042,7 +6988,7 @@ sorry_failed_to_eject:;
|
||||
int Cdrskin_setup(struct CdrskiN *skin, int argc, char **argv, int flag)
|
||||
{
|
||||
int i,k,l,ret,source_has_size=0, idx= -1;
|
||||
double value,grab_and_wait_value= -1.0, num;
|
||||
double value,grab_and_wait_value= -1.0;
|
||||
char *cpt,*value_pt,adr[Cdrskin_adrleN],*blank_mode= "";
|
||||
struct stat stbuf;
|
||||
|
||||
@ -7779,15 +7725,9 @@ set_speed:;
|
||||
set_stream_recording:;
|
||||
if(strcmp(value_pt, "on")==0)
|
||||
skin->stream_recording_is_set= 1;
|
||||
else if(value_pt[0] >= '0' && value_pt[0] <= '9') {
|
||||
num= Scanf_io_size(value_pt, 0);
|
||||
num/= 2048.0;
|
||||
if(num >= 16 && num <= 0x7FFFFFFF)
|
||||
skin->stream_recording_is_set= num;
|
||||
else
|
||||
skin->stream_recording_is_set= 0;
|
||||
} else
|
||||
else
|
||||
skin->stream_recording_is_set= 0;
|
||||
|
||||
} else if(strcmp(argv[i],"-swab")==0) {
|
||||
skin->swap_audio_bytes= 0;
|
||||
|
||||
|
@ -34,12 +34,10 @@ CD-R, DVD-R, DVD+R, DVD+R/DL, BD-R, CD-RW, DVD-RW, DVD-RAM, DVD+RW, BD-RE
|
||||
|
||||
<P>
|
||||
<H2>Hardware requirements:</H2>
|
||||
About any CD, DVD, or BD recorder produced in the recent ten years.
|
||||
<BR>
|
||||
<A HREF="http://libburnia-project.org">libburn</A>
|
||||
supports recorders which are compliant to standards MMC-1 for CD and
|
||||
MMC-5 for DVD or BD. Linux and FreeBSD allow to access drives connected
|
||||
via SCSI, PATA (aka IDE, ATA), USB, or SATA.
|
||||
A CD/DVD/BD recorder suitable for
|
||||
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
|
||||
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
|
||||
and to MMC-5 for DVD or BD).
|
||||
<BR>
|
||||
</P>
|
||||
|
||||
@ -61,7 +59,7 @@ via SCSI, PATA (aka IDE, ATA), USB, or SATA.
|
||||
GPL software included:<BR>
|
||||
</H2>
|
||||
<DL>
|
||||
<DT>libburn-0.7.0</DT>
|
||||
<DT>libburn-0.6.2</DT>
|
||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||
developed and maintained since August 2006 by
|
||||
Thomas Schmitt from team of libburnia-project.org)
|
||||
@ -150,9 +148,6 @@ as listed by option --devices.</DT>
|
||||
<DD><KBD> --tell_media_space 2>/dev/null)</KBD></DD>
|
||||
<DD>$<KBD> 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> cdrskin ... stream_recording=250m ...</KBD>
|
||||
|
||||
<DT>Write audio tracks to CD:</DT>
|
||||
<DD>$<KBD> cdrskin -v dev=ATA:1,0,0 speed=48 -sao \</KBD></DD>
|
||||
<DD><KBD> track1.wav track2.au -audio -swab track3.raw</KBD></DD>
|
||||
@ -179,11 +174,14 @@ 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/BD tool
|
||||
Standalone ISO 9660 multi-session CD/DVD 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>
|
||||
@ -193,8 +191,8 @@ Standalone ISO 9660 multi-session CD/DVD/BD tool
|
||||
<P>
|
||||
<DL>
|
||||
<DT>Download as source code (see README):</DT>
|
||||
<DD><A HREF="cdrskin-0.7.0.pl00.tar.gz">cdrskin-0.7.0.pl00.tar.gz</A>
|
||||
(820 KB).
|
||||
<DD><A HREF="cdrskin-0.6.2.pl00.tar.gz">cdrskin-0.6.2.pl00.tar.gz</A>
|
||||
(750 KB).
|
||||
</DD>
|
||||
<DD>
|
||||
The cdrskin tarballs are source code identical with libburn releases
|
||||
@ -243,19 +241,20 @@ 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.8.pl00:
|
||||
Enhancements towards previous stable version cdrskin-0.6.0.pl00:
|
||||
<UL>
|
||||
<LI>Adapted to pitfalls of U3 memory sticks which appear as CD-ROM drives</LI>
|
||||
<LI>Listing all supported profiles with option -atip -v</LI>
|
||||
<LI>Improvements with build system for FreeBSD</LI>
|
||||
<!--
|
||||
<LI>none</LI>
|
||||
-->
|
||||
</UL>
|
||||
|
||||
Bug fixes towards cdrskin-0.6.8.pl00:
|
||||
Bug fixes towards cdrskin-0.6.0.pl00:
|
||||
<UL>
|
||||
<LI>none</LI>
|
||||
<LI>BD-R media were not closed properly.
|
||||
The last session staid open and unreadable.</LI>
|
||||
<!--
|
||||
<LI>none</LI>
|
||||
-->
|
||||
</UL>
|
||||
|
||||
@ -263,8 +262,8 @@ Bug fixes towards cdrskin-0.6.8.pl00:
|
||||
|
||||
<P>
|
||||
<DL>
|
||||
<DT><H3>Development snapshot, version 0.7.1 :</H3></DT>
|
||||
<DD>Enhancements towards current stable version 0.7.0.pl00:
|
||||
<DT><H3>Development snapshot, version 0.6.3 :</H3></DT>
|
||||
<DD>Enhancements towards current stable version 0.6.0.pl00:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
<!--
|
||||
@ -272,20 +271,11 @@ Bug fixes towards cdrskin-0.6.8.pl00:
|
||||
|
||||
</UL>
|
||||
</DD>
|
||||
|
||||
<DD>Bug fixes towards cdrskin-0.7.0.pl00:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
<!--
|
||||
-->
|
||||
</UL>
|
||||
</DD>
|
||||
|
||||
<DD> </DD>
|
||||
<DD><A HREF="README_cdrskin_devel">README 0.7.1</A>
|
||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.7.1 --help</A></DD>
|
||||
<DD><A HREF="cdrskin_help_devel">cdrskin_0.7.1 -help</A></DD>
|
||||
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.7.1)</A></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> </DD>
|
||||
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
||||
@ -305,8 +295,8 @@ admins with full system souvereignty.</DT>
|
||||
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
||||
</DD>
|
||||
<DD>
|
||||
<A HREF="cdrskin-0.7.1.tar.gz">cdrskin-0.7.1.tar.gz</A>
|
||||
(820 KB).
|
||||
<A HREF="cdrskin-0.6.3.tar.gz">cdrskin-0.6.3.tar.gz</A>
|
||||
(750 KB).
|
||||
</DD>
|
||||
|
||||
<!-- This is not offered any more since spring 2008
|
||||
@ -339,7 +329,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 and BD media.
|
||||
provide libburn with invaluable examples on how to deal with DVD media.
|
||||
</P>
|
||||
|
||||
<HR>
|
||||
@ -501,17 +491,12 @@ 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/BD burn tool.
|
||||
xorriso, a standalone ISO 9660 multi-session CD/DVD burn tool.
|
||||
No mkisofs needed.
|
||||
<DL>
|
||||
<DD>
|
||||
|
@ -1 +1 @@
|
||||
#define Cdrskin_timestamP "2009.08.27.123001"
|
||||
#define Cdrskin_timestamP "2009.02.20.090001"
|
||||
|
@ -1761,17 +1761,6 @@ Version leap to 0.2.6
|
||||
Published cdrskin-0.2.6.pl01 on cdrskin home pages
|
||||
|
||||
------------------------------- cycle - cdrskin-0.2.6.pl01 - 2006.11.23.114611
|
||||
* Enabled TAO
|
||||
* Bug fixed: Trailing trash appended to .wav files caused error message
|
||||
and, if exceeding fifo size, could even stall a burn.
|
||||
* Multi-session CDs (for now restricted to write mode TAO), -multi, -msinfo
|
||||
* Bug fixed: False speed with first pacifier cycle. Potential SIGFPE by NaN.
|
||||
* Enabled named pipes and other non-plain file types as track sources
|
||||
(actually already in previous cycle)
|
||||
* Bug fixed: Default speed was not highest possible but announced as "MAX"
|
||||
* SAO is preferred default write mode, TAO is default when needed
|
||||
* libisofs unbundled from libburn+cdrskin
|
||||
* Hints for porting to other operating systems are now in sg-*.c
|
||||
|
||||
|
||||
2006.11.24.121745 [437]
|
||||
@ -6255,14 +6244,14 @@ Documented changes and release timestamp
|
||||
* Formatting and writing of BD-R media
|
||||
* New API function burn_get_read_capacity()
|
||||
|
||||
2009.01.04.112716 [2351]
|
||||
03 Jan 2009 []
|
||||
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
|
||||
@ -6272,607 +6261,28 @@ cdrskin/README
|
||||
cdrskin/compile_cdrskin.sh
|
||||
cdrskin/cdrskin_timestamp.h
|
||||
cdrskin/cdrskin_eng.html
|
||||
Made number transition to 0.6.1
|
||||
Made number transition to 0.6.0
|
||||
|
||||
04 Jan 2009 [2353]
|
||||
03 Jan 2009 []
|
||||
- cdrskin/add_ts_changes_to_libburn_0_5_8
|
||||
- cdrskin/add_ts_changes_to_libburn_0_5_9
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_6_0
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_6_1
|
||||
Updated cdrskin tarball generator
|
||||
|
||||
03 Jan 2009 [2354]
|
||||
03 Jan 2009 []
|
||||
cdrskin/changelog.txt
|
||||
Documented changes and release timestamp
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.6.1 - 2009.01.04.113401
|
||||
|
||||
04 Jan 2009 [2356]
|
||||
svn move
|
||||
http://svn.libburnia-project.org/libburn/branches/ZeroSixZero
|
||||
http://svn.libburnia-project.org/libburn/tags/ZeroSixZero
|
||||
libburn release 0.6.0 is ready
|
||||
------------------------------------ cycle - cdrskin-0.6.1 -
|
||||
------------------------------------ cycle - cdrskin-0.6.1 -
|
||||
|
||||
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 [2697]
|
||||
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
|
||||
|
||||
|
||||
2009.07.14.133159 [2698]
|
||||
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 [2699]
|
||||
- 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 [2700]
|
||||
cdrskin/changelog.txt
|
||||
Documented changes and release timestamp
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.6.9 - 2009.07.14.133159
|
||||
|
||||
14 Jul 2009 [2702]
|
||||
svn move -m libburn release 0.6.8 is ready
|
||||
http://svn.libburnia-project.org/libburn/branches/ZeroSixEight
|
||||
http://svn.libburnia-project.org/libburn/tags/ZeroSixEight
|
||||
|
||||
|
||||
2009.08.15.133055 [2721]
|
||||
libburn/write.c
|
||||
Added test code about output blocks size as comment.
|
||||
|
||||
2009.08.15.133332 [2722]
|
||||
libburn/libburn.h
|
||||
libburn/transport.h
|
||||
libburn/drive.c
|
||||
libburn/mmc.h
|
||||
libburn/mmc.c
|
||||
New API calls burn_drive_get_all_profiles(), burn_obtain_profile_name()
|
||||
|
||||
2009.08.15.133744 [2723]
|
||||
cdrskin/cdrskin.c
|
||||
Listing all profiles with cdrskin -v -atip
|
||||
|
||||
2009.08.23.130326 [2735]
|
||||
libburn/drive.c
|
||||
libburn/spc.c
|
||||
libburn/mmc.c
|
||||
Adapted to pitfalls of U3 memory sticks which appear as CD-ROM drives
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.6.9 - 2009.08.23.132942
|
||||
New API calls burn_drive_get_all_profiles(), burn_obtain_profile_name()
|
||||
Adapted to pitfalls of U3 memory sticks which appear as CD-ROM drives
|
||||
|
||||
|
||||
2009.08.24.131146 [2736]
|
||||
libburn/libburn.h
|
||||
libburn/transport.h
|
||||
libburn/drive.c
|
||||
libburn/sbc.c
|
||||
New API call burn_drive_snooze()
|
||||
|
||||
2009.08.24.161646 [2737]
|
||||
libburn/libburn.h
|
||||
libburn/drive.c
|
||||
Made burn_drive_snooze() safe for emulated drives
|
||||
|
||||
2009.08.24.202517 [2740]
|
||||
libburn/transport.h
|
||||
libburn/sbc.c
|
||||
libburn/mmc.c
|
||||
Implemented automatic START UNIT after STOP UNIT before any other SCSI command
|
||||
|
||||
2009.08.27.123001 [2746]
|
||||
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
|
||||
|
||||
27 Aug 2009 [2747]
|
||||
- cdrskin/add_ts_changes_to_libburn_0_6_8
|
||||
- cdrskin/add_ts_changes_to_libburn_0_6_9
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_7_0
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_7_1
|
||||
Updated cdrskin tarball generator
|
||||
|
||||
27 Aug 2009 []
|
||||
cdrskin/changelog.txt
|
||||
Documented changes and release timestamp
|
||||
|
||||
------------------------------ release - cdrskin-0.7.0.pl00 - 2009.08.27.123001
|
||||
New API calls burn_drive_get_all_profiles(), burn_obtain_profile_name()
|
||||
New API call burn_drive_snooze()
|
||||
Adapted to pitfalls of U3 memory sticks which appear as CD-ROM drives
|
||||
Listing all supported profiles with option -atip
|
||||
|
||||
|
||||
[]
|
||||
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
|
||||
|
||||
27 Aug 2009 []
|
||||
- cdrskin/add_ts_changes_to_libburn_0_6_8
|
||||
- cdrskin/add_ts_changes_to_libburn_0_6_9
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_7_0
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_7_1
|
||||
Updated cdrskin tarball generator
|
||||
|
||||
[]
|
||||
cdrskin/changelog.txt
|
||||
Documented changes and release timestamp
|
||||
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.7.1 -
|
||||
------------------------------------ cycle - cdrskin-0.7.1 -
|
||||
|
||||
===============================================================================
|
||||
TODO
|
||||
@ -6881,6 +6291,8 @@ Documented changes and release timestamp
|
||||
|
||||
--------------------------------- 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.
|
||||
(The various asynchronous operations use the same buffer
|
||||
@ -6917,6 +6329,9 @@ 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 ?
|
||||
|
@ -1,13 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
# compile_cdrskin.sh
|
||||
# Copyright 2005 - 2009 Thomas Schmitt, scdbackup@gmx.net, GPL version 2
|
||||
# Copyright 2005 - 2008 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_7_0"
|
||||
libvers="-DCdrskin_libburn_0_6_2"
|
||||
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_7_0"
|
||||
elif test "$i" = "-libburn_0_6_2"
|
||||
then
|
||||
libvers="-DCdrskin_libburn_0_7_0"
|
||||
libvers="-DCdrskin_libburn_0_6_2"
|
||||
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_7_1"
|
||||
libvers="-DCdrskin_libburn_0_6_3"
|
||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||
cleanup_src_or_obj="libburn/cleanup.o"
|
||||
@ -75,8 +75,10 @@ do
|
||||
echo "Options:"
|
||||
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
||||
echo " -compile_dewav compile program test/dewav without libburn."
|
||||
echo " -libburn_0_7_0 set macro to match libburn-0.7.0"
|
||||
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_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."
|
||||
|
43
configure.ac
43
configure.ac
@ -1,4 +1,4 @@
|
||||
AC_INIT([libburn], [0.7.0], [http://libburnia-project.org])
|
||||
AC_INIT([libburn], [0.6.2], [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 - A90827 :
|
||||
dnl Notes by ts A71207 - A81111 :
|
||||
dnl
|
||||
dnl Regrettably the meaning of the various version types was misunderstood
|
||||
dnl before version 0.4.1.
|
||||
@ -42,8 +42,7 @@ dnl So this is a superspace of the SONAME version space. To avoid
|
||||
dnl ill SONAME, the value of CURRENT must be larger than AGE.
|
||||
dnl See also http://www.gnu.org/software/libtool/manual.html#Interfaces
|
||||
dnl
|
||||
dnl On Linux the name of the dynamic library will be
|
||||
dnl libburn.so.$SONAME.$AGE.$REV
|
||||
dnl The name of the dynamic library will be libburn.so.$SONAME.$AGE.$REV .
|
||||
dnl In the terminology of this file:
|
||||
dnl CURRENT = LT_CURRENT
|
||||
dnl AGE = LT_AGE
|
||||
@ -70,10 +69,6 @@ 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 0.7.0 = libburn.so.4.35.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.
|
||||
@ -98,8 +93,8 @@ dnl If BURN_*_VERSION changes, be sure to change AC_INIT above to match.
|
||||
dnl
|
||||
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
|
||||
BURN_MAJOR_VERSION=0
|
||||
BURN_MINOR_VERSION=7
|
||||
BURN_MICRO_VERSION=0
|
||||
BURN_MINOR_VERSION=6
|
||||
BURN_MICRO_VERSION=2
|
||||
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||
|
||||
AC_SUBST(BURN_MAJOR_VERSION)
|
||||
@ -110,15 +105,15 @@ AC_SUBST(BURN_VERSION)
|
||||
dnl Libtool versioning
|
||||
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||
dnl
|
||||
dnl ts A90827
|
||||
dnl This is the release version libburn-0.7.0 = libburn.so.4.35.0
|
||||
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 LT_CURRENT++, LT_AGE++ has not yet happened.
|
||||
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||
dnl
|
||||
dnl SONAME = 39 - 35 = 4 . Linux library name = libburn.so.4.35.0
|
||||
LT_CURRENT=39
|
||||
LT_AGE=35
|
||||
dnl SONAME = 31 - 27 = 4 . Library name = libburn.so.4.27.0
|
||||
LT_CURRENT=31
|
||||
LT_AGE=27
|
||||
LT_REVISION=0
|
||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||
|
||||
@ -165,19 +160,8 @@ AC_SUBST(THREAD_LIBS)
|
||||
|
||||
TARGET_SHIZZLE
|
||||
AC_SUBST(ARCH)
|
||||
AC_SUBST(LIBBURNIA_PKGCONFDIR)
|
||||
AC_SUBST(LIBBURN_ARCH_LIBS)
|
||||
|
||||
dnl ts A90303
|
||||
dnl Check the preconditions for using statvfs() in sg-dummy
|
||||
dnl (sg-linux and sg-freebsd use statvfs() unconditionally)
|
||||
STATVFS_DEF=-DLibburn_os_has_statvfS
|
||||
AC_CHECK_HEADER(sys/statvfs.h, X=, STATVFS_DEF=)
|
||||
AC_CHECK_FUNC([statvfs], X=, STATVFS_DEF=)
|
||||
dnl If this would be done more specifically in Makefile.am
|
||||
dnl via libburn_libburn_la_CFLAGS then undesired .o file names would emerge
|
||||
CFLAGS="$CFLAGS $STATVFS_DEF"
|
||||
|
||||
dnl Add compiler-specific flags
|
||||
|
||||
dnl See if the user wants aggressive optimizations of the code
|
||||
@ -197,13 +181,6 @@ 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
|
||||
|
@ -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 <= 0) {
|
||||
if (d->drive_role == 1 && !d->mdata->valid) {
|
||||
libdax_msgs_submit(libdax_messenger,
|
||||
d->global_index, 0x00020113,
|
||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||
|
@ -97,8 +97,8 @@ static int Cleanup_handler_exit(int exit_value, int signum, int flag)
|
||||
return(2);
|
||||
}
|
||||
if(cleanup_exiting) {
|
||||
fprintf(stderr,"cleanup: ABORT : repeat by pid=%.f, signum=%d\n",
|
||||
(double) getpid(), signum);
|
||||
fprintf(stderr,"cleanup: ABORT : repeat by pid=%d, signum=%d\n",
|
||||
getpid(),signum);
|
||||
return(0);
|
||||
}
|
||||
cleanup_exiting= 1;
|
||||
|
145
libburn/drive.c
145
libburn/drive.c
@ -40,9 +40,6 @@
|
||||
/* A70903 : for burn_scsi_setup_drive() */
|
||||
#include "spc.h"
|
||||
|
||||
/* A90815 : for mmc_obtain_profile_name() */
|
||||
#include "mmc.h"
|
||||
|
||||
#include "libdax_msgs.h"
|
||||
extern struct libdax_msgs *libdax_messenger;
|
||||
|
||||
@ -65,7 +62,6 @@ int burn_setup_drive(struct burn_drive *d, char *fname)
|
||||
d->stdio_fd = -1;
|
||||
d->status = BURN_DISC_UNREADY;
|
||||
d->do_stream_recording = 0;
|
||||
d->stream_recording_start= 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -235,7 +231,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 || d->current_is_guessed_profile ||
|
||||
if (d->current_profile > 0 ||
|
||||
d->mdata->cdr_write || d->mdata->cdrw_write ||
|
||||
d->mdata->dvdr_write || d->mdata->dvdram_write) {
|
||||
|
||||
@ -421,9 +417,6 @@ 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);
|
||||
@ -436,19 +429,13 @@ 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 */
|
||||
ret = t->grab(t);
|
||||
if (ret) {
|
||||
if (t->grab(t)) {
|
||||
burn_print(2, "getting drive info\n");
|
||||
t->getcaps(t);
|
||||
t->unlock(t);
|
||||
t->released = 1;
|
||||
} else {
|
||||
/* 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_print(2, "unable to grab new located drive\n");
|
||||
burn_drive_unregister(t);
|
||||
t = NULL;
|
||||
}
|
||||
@ -533,22 +520,6 @@ int burn_drive_release_fl(struct burn_drive *d, int flag)
|
||||
}
|
||||
|
||||
|
||||
/* API */
|
||||
/* ts A90824
|
||||
@param flag bit0= wake up (else start snoozing)
|
||||
*/
|
||||
int burn_drive_snooze(struct burn_drive *d, int flag)
|
||||
{
|
||||
if (d->drive_role != 1)
|
||||
return 0;
|
||||
if (flag & 1)
|
||||
d->start_unit(d);
|
||||
else
|
||||
d->stop_unit(d);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* API */
|
||||
void burn_drive_release(struct burn_drive *d, int le)
|
||||
{
|
||||
@ -821,18 +792,6 @@ enum burn_drive_status burn_drive_get_status(struct burn_drive *d,
|
||||
return d->busy;
|
||||
}
|
||||
|
||||
int burn_drive_set_stream_recording(struct burn_drive *d, int recmode,
|
||||
int start, int flag)
|
||||
{
|
||||
|
||||
if (recmode == 1)
|
||||
d->do_stream_recording = 1;
|
||||
else if (recmode == -1)
|
||||
d->do_stream_recording = 0;
|
||||
d->stream_recording_start = start;
|
||||
return(1);
|
||||
}
|
||||
|
||||
void burn_drive_cancel(struct burn_drive *d)
|
||||
{
|
||||
pthread_mutex_lock(&d->access_lock);
|
||||
@ -883,7 +842,7 @@ static int drive_getcaps(struct burn_drive *d, struct burn_drive_info *out)
|
||||
a ssert(d->mdata);
|
||||
#endif
|
||||
|
||||
if(d->idata->valid <= 0 || d->mdata->valid <= 0)
|
||||
if (!d->idata->valid || !d->mdata->valid)
|
||||
return 0;
|
||||
|
||||
id = (struct burn_scsi_inquiry_data *)d->idata;
|
||||
@ -949,7 +908,7 @@ int burn_drive_scan_sync(struct burn_drive_info *drives[],
|
||||
*/
|
||||
unsigned char scanned[32];
|
||||
unsigned count = 0;
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
/* ts A61007 : moved up to burn_drive_scan() */
|
||||
/* a ssert(burn_running); */
|
||||
@ -1006,22 +965,13 @@ int burn_drive_scan_sync(struct burn_drive_info *drives[],
|
||||
if (drive_array[i].global_index < 0)
|
||||
continue; /* invalid device */
|
||||
|
||||
/* ts A90602 : This old loop is not plausible. See A70907.
|
||||
while (!drive_getcaps(&drive_array[i],
|
||||
&(*drives)[*n_drives])) {
|
||||
while (!drive_getcaps(&drive_array[i],
|
||||
&(*drives)[*n_drives])) {
|
||||
sleep(1);
|
||||
}
|
||||
*/
|
||||
/* 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)++;
|
||||
}
|
||||
(*n_drives)++;
|
||||
scanned[i / 8] |= 1 << (i % 8);
|
||||
}
|
||||
if (*drives != NULL && *n_drives == 0) {
|
||||
free ((char *) *drives);
|
||||
*drives = NULL;
|
||||
}
|
||||
|
||||
return(1);
|
||||
}
|
||||
@ -1177,14 +1127,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 <= 0)
|
||||
if(!d->mdata->valid)
|
||||
return 0;
|
||||
return d->mdata->max_read_speed;
|
||||
}
|
||||
|
||||
int burn_drive_get_write_speed(struct burn_drive *d)
|
||||
{
|
||||
if(d->mdata->valid <= 0)
|
||||
if(!d->mdata->valid)
|
||||
return 0;
|
||||
return d->mdata->max_write_speed;
|
||||
}
|
||||
@ -1192,7 +1142,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 <= 0)
|
||||
if(!d->mdata->valid)
|
||||
return 0;
|
||||
return d->mdata->min_write_speed;
|
||||
}
|
||||
@ -1779,10 +1729,6 @@ 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;
|
||||
|
||||
@ -1798,38 +1744,10 @@ int burn_abort(int patience,
|
||||
occup = burn_drive_is_occupied(&(drive_array[i]));
|
||||
if(occup == -2)
|
||||
continue;
|
||||
|
||||
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);
|
||||
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) {
|
||||
} else if(occup <= 10) {
|
||||
burn_drive_forget(&(drive_array[i]), 1);
|
||||
} else if(occup <= 100) {
|
||||
if(first_round)
|
||||
@ -1908,16 +1826,11 @@ int burn_disc_read_atip(struct burn_drive *d)
|
||||
}
|
||||
if(d->drive_role != 1)
|
||||
return 0;
|
||||
if ((d->current_profile == -1 || d->current_is_cd_profile)
|
||||
&& (d->mdata->cdrw_write || d->current_profile != 0x08)) {
|
||||
if (d->current_profile == -1 || d->current_is_cd_profile) {
|
||||
d->read_atip(d);
|
||||
/* >>> some control of success would be nice :) */
|
||||
} else {
|
||||
/* mmc5r03c.pdf 6.26.3.6.3 : ATIP is undefined for non-CD
|
||||
(and it seems meaningless for non-burners).
|
||||
ts A90823: Pseudo-CD U3 memory stick stalls with ATIP.
|
||||
It is !cdrw_write and profile is 0x08.
|
||||
*/
|
||||
/* mmc5r03c.pdf 6.26.3.6.3 : ATIP is undefined for non-CD */;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
@ -2025,30 +1938,6 @@ int burn_disc_get_profile(struct burn_drive *d, int *pno, char name[80])
|
||||
}
|
||||
|
||||
|
||||
/* ts A90815 : New API function */
|
||||
int burn_drive_get_all_profiles(struct burn_drive *d, int *num_profiles,
|
||||
int profiles[64], char is_current[64])
|
||||
{
|
||||
int i;
|
||||
|
||||
*num_profiles = d->num_profiles;
|
||||
for (i = 0; i < d->num_profiles; i++) {
|
||||
profiles[i] = (d->all_profiles[i * 4] << 8) |
|
||||
d->all_profiles[i * 4 + 1];
|
||||
is_current[i] = d->all_profiles[i * 4 + 2] & 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ts A90815 : New API function */
|
||||
int burn_obtain_profile_name(int profile_number, char name[80])
|
||||
{
|
||||
strcpy(name, mmc_obtain_profile_name(profile_number));
|
||||
return(name[0] != 0);
|
||||
}
|
||||
|
||||
|
||||
/* ts A61223 : New API function */
|
||||
int burn_drive_wrote_well(struct burn_drive *d)
|
||||
{
|
||||
@ -2148,7 +2037,7 @@ int burn_drive_get_speedlist(struct burn_drive *d,
|
||||
struct burn_speed_descriptor *sd, *csd = NULL;
|
||||
|
||||
(*speed_list) = NULL;
|
||||
if(d->mdata->valid <= 0)
|
||||
if(!d->mdata->valid)
|
||||
return 0;
|
||||
for (sd = d->mdata->speed_descriptors; sd != NULL; sd = sd->next) {
|
||||
ret = burn_speed_descriptor_new(&csd, NULL, csd, 0);
|
||||
@ -2173,7 +2062,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 <= 0)
|
||||
if(!d->mdata->valid)
|
||||
return 0;
|
||||
for (sd = d->mdata->speed_descriptors; sd != NULL; sd = sd->next) {
|
||||
if (flag & 1)
|
||||
|
@ -1029,23 +1029,6 @@ int burn_drive_obtain_scsi_adr(char *path, int *bus_no, int *host_no,
|
||||
int burn_drive_grab(struct burn_drive *drive, int load);
|
||||
|
||||
|
||||
/* ts A90824 */
|
||||
/** Calm down or alert a drive. Some drives stay alert after reading for
|
||||
quite some time. This saves time with the startup for the next read
|
||||
operation but also causes noise and consumes extra energy. It makes
|
||||
sense to calm down the drive if no read operation is expected for the
|
||||
next few seconds. The drive will get alert automatically if operations
|
||||
are required.
|
||||
@param drive The drive to influence.
|
||||
@param flag Bitfield for control purposes
|
||||
bit0= become alert (else start snoozing)
|
||||
This is not mandatory to allow further drive operations
|
||||
@return 1= success , 0= drive role not suitable for calming
|
||||
@since 0.7.0
|
||||
*/
|
||||
int burn_drive_snooze(struct burn_drive *d, int flag);
|
||||
|
||||
|
||||
/** Release a drive. This should not be done until the drive is no longer
|
||||
busy (see burn_drive_get_status).
|
||||
Linux: The drive device file is not reserved afterwards. (O_EXCL, F_SETLK).
|
||||
@ -1405,28 +1388,6 @@ int burn_precheck_write(struct burn_write_opts *o, struct burn_disc *disc,
|
||||
*/
|
||||
void burn_disc_write(struct burn_write_opts *o, struct burn_disc *disc);
|
||||
|
||||
|
||||
/* ts A90227 */
|
||||
/** Control stream recording during the write run and eventually set the start
|
||||
LBA for stream recording.
|
||||
Stream recording is set from struct burn_write_opts when the write run
|
||||
gets started. See burn_write_opts_set_stream_recording().
|
||||
The call described here can be used later to override this setting and
|
||||
to program automatic switching at a given LBA. It also affects subsequent
|
||||
calls to burn_random_access_write().
|
||||
@param drive The drive which performs the write operation.
|
||||
@param recmode -1= disable stream recording
|
||||
0= leave setting as is
|
||||
1= enable stream recording
|
||||
@param start The LBA where actual stream recording shall start.
|
||||
(0 means unconditional stream recording)
|
||||
@param flag Bitfield for control purposes (unused yet, submit 0).
|
||||
@return 1=success , <=0 failure
|
||||
@since 0.6.4
|
||||
*/
|
||||
int burn_drive_set_stream_recording(struct burn_drive *drive, int recmode,
|
||||
int start, int flag);
|
||||
|
||||
/** Cancel an operation on a drive.
|
||||
This will only work when the drive's busy state is BURN_DRIVE_READING or
|
||||
BURN_DRIVE_WRITING.
|
||||
@ -1945,15 +1906,12 @@ void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force);
|
||||
|
||||
/* ts A80412 */
|
||||
/** Eventually makes use of the more modern write command AAh WRITE12 and
|
||||
sets the Streaming bit. With DVD-RAM and BD this can override the
|
||||
traditional slowdown to half nominal speed. But if it speeds up writing
|
||||
then it also disables error management and correction. Weigh your
|
||||
priorities. This affects the write operations of burn_disc_write()
|
||||
and subsequent calls of burn_random_access_write().
|
||||
sets the Streaming bit. With DVD-RAM this can override the traditional
|
||||
slowdown to half nominal speed. But if it speeds up writing then it also
|
||||
disables error management and correction. Weigh your priorities.
|
||||
This only affects the write operations of burn_disc_write().
|
||||
@param opts The write opts to change
|
||||
@param value 0=use 2Ah WRITE10, 1=use AAh WRITE12 with Streaming bit
|
||||
@since 0.6.4:
|
||||
>=16 use WRITE12 but not before the LBA given by value
|
||||
@since 0.4.6
|
||||
*/
|
||||
void burn_write_opts_set_stream_recording(struct burn_write_opts *opts,
|
||||
@ -2015,34 +1973,6 @@ void burn_read_opts_transfer_damaged_blocks(struct burn_read_opts *opts,
|
||||
void burn_read_opts_set_hardware_error_retries(struct burn_read_opts *opts,
|
||||
unsigned char hardware_error_retries);
|
||||
|
||||
|
||||
/* ts A90815 */
|
||||
/** Gets the list of profile codes supported by the drive.
|
||||
Profiles depict the feature sets which constitute media types. For
|
||||
known profile codes and names see burn_disc_get_profile().
|
||||
@param d is the drive to query
|
||||
@param num_profiles returns the number of supported profiles
|
||||
@param profiles returns the profile codes
|
||||
@param is_current returns the status of the corresponding profile code:
|
||||
1= current, i.e. the matching media is loaded
|
||||
0= not current, i.e. the matching media is not loaded
|
||||
@return always 1 for now
|
||||
@since 0.7.0
|
||||
*/
|
||||
int burn_drive_get_all_profiles(struct burn_drive *d, int *num_profiles,
|
||||
int profiles[64], char is_current[64]);
|
||||
|
||||
|
||||
/* ts A90815 */
|
||||
/** Obtains the profile name associated with a profile code.
|
||||
@param profile_code the profile code to be translated
|
||||
@param name returns the profile name (e.g. "DVD+RW")
|
||||
@return 1= known profile code , 0= unknown profile code
|
||||
@since 0.7.0
|
||||
*/
|
||||
int burn_obtain_profile_name(int profile_code, char name[80]);
|
||||
|
||||
|
||||
/** Gets the maximum write speed for a drive and eventually loaded media.
|
||||
The return value might change by the media type of already loaded media,
|
||||
again by call burn_drive_grab() and again by call burn_disc_read_atip().
|
||||
@ -2304,8 +2234,8 @@ void burn_version(int *major, int *minor, int *micro);
|
||||
|
||||
*/
|
||||
#define burn_header_version_major 0
|
||||
#define burn_header_version_minor 7
|
||||
#define burn_header_version_micro 0
|
||||
#define burn_header_version_minor 6
|
||||
#define burn_header_version_micro 2
|
||||
/** Note:
|
||||
Above version numbers are also recorded in configure.ac because libtool
|
||||
wants them as parameters at build time.
|
||||
|
@ -542,14 +542,8 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
||||
0x00020167 (SORRY,HIGH) = Drive does not support non-default formatting
|
||||
0x00020168 (FAILURE,HIGH) = Media not properly formatted. Cannot write.
|
||||
0x00020169 (WARNING,HIGH) = Last session on media is still open
|
||||
0x0002016a (FAILURE,HIGH) = No MMC transport adapter is present
|
||||
0x0002016b (WARNING,HIGH) = No MMC transport adapter is present
|
||||
0x0002016c (DEBUG,HIGH) = No MMC transport adapter is present
|
||||
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
|
||||
|
||||
|
||||
libdax_audioxtr:
|
||||
0x00020200 (SORRY,HIGH) = Cannot open audio source file
|
||||
|
199
libburn/mmc.c
199
libburn/mmc.c
@ -55,10 +55,10 @@ extern struct libdax_msgs *libdax_messenger;
|
||||
/* ts A70306 */
|
||||
#define Libburn_support_dvd_plus_R 1
|
||||
|
||||
/* ts A70509 : handling 0x41 as read-only type */
|
||||
/* ts A70509 : handling 0x41 and 0x42 as read-only types */
|
||||
#define Libburn_support_bd_r_readonlY 1
|
||||
|
||||
/* ts A81208 */
|
||||
/* >>> ts A81208 */
|
||||
#define Libburn_support_bd_plus_r_srM 1
|
||||
|
||||
|
||||
@ -77,12 +77,6 @@ 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
|
||||
@ -130,7 +124,6 @@ extern struct libdax_msgs *libdax_messenger;
|
||||
BD-RE is now an officially supported profile.
|
||||
ts A81209 : The first two sessions have been written to BD-R SRM
|
||||
(auto formatted without Defect Management).
|
||||
ts A90107 : BD-R is now supported media type
|
||||
*/
|
||||
|
||||
/* ts A70519 : With MMC commands of data direction FROM_DRIVE:
|
||||
@ -236,11 +229,6 @@ int mmc_function_spy(struct burn_drive *d, char * text)
|
||||
d->cancel = 1;
|
||||
return 0;
|
||||
}
|
||||
if (d->is_stopped && strcmp(text, "stop_unit") != 0 &&
|
||||
strcmp(text, "start_unit") != 0) {
|
||||
d->start_unit(d);
|
||||
d->is_stopped = 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -756,7 +744,7 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf)
|
||||
mmc_wait_for_buffer_free(d, buf);
|
||||
|
||||
/* ts A80412 */
|
||||
if(d->do_stream_recording > 0 && start >= d->stream_recording_start) {
|
||||
if(d->do_stream_recording > 0) {
|
||||
|
||||
/* >>> ??? is WRITE12 available ? */
|
||||
/* >>> ??? inquire feature 107h Stream Writing bit ? */
|
||||
@ -1164,7 +1152,7 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
|
||||
struct buffer buf;
|
||||
struct command c;
|
||||
int dlen;
|
||||
int i, bpl= 12, old_alloc_len, t_idx, ret;
|
||||
int i, bpl= 12, old_alloc_len, t_idx;
|
||||
unsigned char *tdata;
|
||||
char msg[321];
|
||||
|
||||
@ -1190,16 +1178,6 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
|
||||
d->status = BURN_DISC_FULL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* ts A90823:
|
||||
SanDisk Cruzer U3 memory stick stalls on format 2.
|
||||
Format 0 seems to be more conservative with read-only drives.
|
||||
*/
|
||||
if (!(d->mdata->cdrw_write || d->current_profile != 0x08)) {
|
||||
ret = mmc_read_toc_fmt0(d);
|
||||
return ret;
|
||||
}
|
||||
|
||||
scsi_init_command(&c, MMC_GET_TOC, sizeof(MMC_GET_TOC));
|
||||
/*
|
||||
memcpy(c.opcode, MMC_GET_TOC, sizeof(MMC_GET_TOC));
|
||||
@ -1481,75 +1459,6 @@ inquire_drive:;
|
||||
}
|
||||
|
||||
|
||||
/* ts A61201 */
|
||||
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;
|
||||
@ -1700,10 +1609,6 @@ 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) {
|
||||
@ -1719,7 +1624,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.
|
||||
@ -2259,13 +2164,56 @@ 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)
|
||||
{
|
||||
struct buffer buf;
|
||||
int len, cp, descr_len = 0, feature_code, prf_number, only_current = 1;
|
||||
int old_alloc_len, only_current_profile = 0;
|
||||
int old_alloc_len;
|
||||
unsigned char *descr, *prf, *up_to, *prf_end;
|
||||
struct command c;
|
||||
int phys_if_std = 0;
|
||||
@ -2278,8 +2226,6 @@ 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->num_profiles = 0;
|
||||
d->current_has_feat21h = 0;
|
||||
d->current_feat21h_link_size = -1;
|
||||
d->current_feat23h_byte4 = 0;
|
||||
@ -2288,6 +2234,10 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
|
||||
|
||||
scsi_init_command(&c, MMC_GET_CONFIGURATION,
|
||||
sizeof(MMC_GET_CONFIGURATION));
|
||||
/*
|
||||
memcpy(c.opcode, MMC_GET_CONFIGURATION, sizeof(MMC_GET_CONFIGURATION));
|
||||
c.oplen = sizeof(MMC_GET_CONFIGURATION);
|
||||
*/
|
||||
c.dxfer_len= *alloc_len;
|
||||
c.retry = 1;
|
||||
c.opcode[7] = (c.dxfer_len >> 8) & 0xff;
|
||||
@ -2298,24 +2248,8 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
|
||||
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) {
|
||||
/* 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);
|
||||
}
|
||||
if (c.error)
|
||||
return 0;
|
||||
}
|
||||
old_alloc_len = *alloc_len;
|
||||
*alloc_len = len = mmc_four_char_to_int(c.page->data);
|
||||
if (len > old_alloc_len)
|
||||
@ -2393,7 +2327,7 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
|
||||
#endif
|
||||
|
||||
/* Enable this to get loud and repeated reports about the feature set :
|
||||
#define Libburn_print_feature_descriptorS 1
|
||||
#define Libburn_print_feature_descriptorS 1
|
||||
*/
|
||||
/* ts A70127 : Interpret list of profile and feature descriptors.
|
||||
see mmc5r03c.pdf 5.2
|
||||
@ -2407,7 +2341,7 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
|
||||
"-----------------------------------------------------------------\n");
|
||||
fprintf(stderr,
|
||||
"LIBBURN_EXPERIMENTAL : feature list length = %d , shown = %d\n",
|
||||
len, (int) (up_to - c.page->data));
|
||||
len, up_to - c.page->data);
|
||||
#endif /* Libburn_print_feature_descriptorS */
|
||||
|
||||
for (descr = c.page->data + 8; descr + 3 < up_to; descr += descr_len) {
|
||||
@ -2425,14 +2359,8 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
|
||||
|
||||
if (feature_code == 0x0) {
|
||||
prf_end = descr + 4 + descr[3];
|
||||
d->num_profiles = descr[3] / 4;
|
||||
if (d->num_profiles > 64)
|
||||
d->num_profiles = 64;
|
||||
if (d->num_profiles > 0)
|
||||
memcpy(d->all_profiles, descr + 4,
|
||||
d->num_profiles * 4);
|
||||
for (prf = descr + 4; prf + 2 < prf_end; prf += 4) {
|
||||
if (only_current_profile && !(prf[2] & 1))
|
||||
if (only_current && !(prf[2] & 1))
|
||||
continue;
|
||||
prf_number = (prf[0] << 8) | prf[1];
|
||||
|
||||
@ -3546,14 +3474,6 @@ 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);
|
||||
@ -3883,15 +3803,12 @@ int mmc_setup_drive(struct burn_drive *d)
|
||||
d->start_lba = -2000000000;
|
||||
d->end_lba = -2000000000;
|
||||
|
||||
/* ts A61201 - A90815*/
|
||||
/* ts A61201 - A70223*/
|
||||
d->erasable = 0;
|
||||
d->current_profile = -1;
|
||||
d->current_profile_text[0] = 0;
|
||||
d->current_is_cd_profile = 0;
|
||||
d->current_is_supported_profile = 0;
|
||||
d->current_is_guessed_profile = 0;
|
||||
memset(d->all_profiles, 0, 256);
|
||||
d->num_profiles = 0;
|
||||
d->current_has_feat21h = 0;
|
||||
d->current_feat21h_link_size = -1;
|
||||
d->current_feat23h_byte4 = 0;
|
||||
|
@ -75,9 +75,6 @@ int mmc_read_10(struct burn_drive *d, int start, int amount,
|
||||
/* ts A81210 : Determine the upper limit of readable data size */
|
||||
int mmc_read_capacity(struct burn_drive *d);
|
||||
|
||||
/* ts A61201 */
|
||||
char *mmc_obtain_profile_name(int profile_number);
|
||||
|
||||
|
||||
/* mmc5r03c.pdf 4.3.4.4.1 d) "The maximum number of RZones is 2 302." */
|
||||
#define BURN_MMC_FAKE_TOC_MAX_SIZE 2302
|
||||
|
@ -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 <= 0)
|
||||
if (!opts->drive->mdata->valid)
|
||||
return 0;
|
||||
if (opts->drive->mdata->underrun_proof) {
|
||||
opts->underrun_proof = underrun_proof;
|
||||
@ -385,7 +385,7 @@ void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force)
|
||||
void burn_write_opts_set_stream_recording(struct burn_write_opts *opts,
|
||||
int value)
|
||||
{
|
||||
opts->do_stream_recording = value;
|
||||
opts->do_stream_recording = !!value;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,63 +0,0 @@
|
||||
|
||||
/* os-dummy.h
|
||||
Operating system specific libburn definitions and declarations. Included
|
||||
by os.h in case of compilation for
|
||||
Unknown POSIX like systems
|
||||
with the dummy MMC transport adapter sg-dummy.c
|
||||
|
||||
Copyright (C) 2009 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
||||
*/
|
||||
|
||||
|
||||
/** List of all signals which shall be caught by signal handlers and trigger
|
||||
a graceful abort of libburn. (See man 7 signal.)
|
||||
*/
|
||||
/* Once as system defined macros */
|
||||
#define BURN_OS_SIGNAL_MACRO_LIST \
|
||||
SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGABRT, \
|
||||
SIGFPE, SIGSEGV, SIGPIPE, SIGALRM, SIGTERM, \
|
||||
SIGUSR1, SIGUSR2, SIGXCPU, SIGTSTP, SIGTTIN, \
|
||||
SIGTTOU
|
||||
|
||||
/* Once as text 1:1 list of strings for messages and interpreters */
|
||||
#define BURN_OS_SIGNAL_NAME_LIST \
|
||||
"SIGHUP", "SIGINT", "SIGQUIT", "SIGILL", "SIGABRT", \
|
||||
"SIGFPE", "SIGSEGV", "SIGPIPE", "SIGALRM", "SIGTERM", \
|
||||
"SIGUSR1", "SIGUSR2", "SIGXCPU", "SIGTSTP", "SIGTTIN", \
|
||||
"SIGTTOU"
|
||||
|
||||
/* The number of above list items */
|
||||
#define BURN_OS_SIGNAL_COUNT 16
|
||||
|
||||
/** To list all signals which shall surely not be caught */
|
||||
#define BURN_OS_NON_SIGNAL_MACRO_LIST \
|
||||
SIGKILL, SIGCHLD, SIGSTOP
|
||||
|
||||
/* The number of above list items */
|
||||
#define BURN_OS_NON_SIGNAL_COUNT 3
|
||||
|
||||
|
||||
/* The maximum size for a (SCSI) i/o transaction */
|
||||
/* Important : MUST be at least 32768 ! */
|
||||
#define BURN_OS_TRANSPORT_BUFFER_SIZE 65536
|
||||
|
||||
|
||||
/* To hold the position of the most recently delivered address from
|
||||
device enumeration.
|
||||
*/
|
||||
struct burn_drive_enumerator_struct {
|
||||
int pos;
|
||||
int info_count;
|
||||
char **info_list;
|
||||
};
|
||||
|
||||
#define BURN_OS_DEFINE_DRIVE_ENUMERATOR_T \
|
||||
typedef struct burn_drive_enumerator_struct burn_drive_enumerator_t;
|
||||
|
||||
|
||||
/* The list of operating system dependent elements in struct burn_drive.
|
||||
Usually they are initialized in sg-*.c:enumerate_common().
|
||||
*/
|
||||
#define BURN_OS_TRANSPORT_DRIVE_ELEMENTS \
|
||||
int just_a_dummy;
|
||||
|
15
libburn/os.h
15
libburn/os.h
@ -3,7 +3,7 @@
|
||||
Operating system specific libburn definitions and declarations.
|
||||
The macros defined here are used by libburn modules in order to
|
||||
avoid own system dependent case distinctions.
|
||||
Copyright (C) 2009 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
||||
Copyright (C) 2006 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
||||
*/
|
||||
|
||||
#ifndef BURN_OS_H_INCLUDED
|
||||
@ -20,23 +20,14 @@
|
||||
#include "os-freebsd.h"
|
||||
|
||||
|
||||
#else
|
||||
#ifdef __linux
|
||||
#else /* operating system case distinction */
|
||||
|
||||
|
||||
/* --------- Linux kernels 2.4 and 2.6 with Linux SCSI Generic (sg) -------- */
|
||||
#include "os-linux.h"
|
||||
|
||||
|
||||
#else
|
||||
|
||||
|
||||
/* --------- Any other system. With dummy MMC transport sg-dummy.c --------- */
|
||||
#include "os-dummy.h"
|
||||
|
||||
|
||||
#endif /* ! __linux */
|
||||
#endif /* ! __FreeBSD__ */
|
||||
#endif /* End of operating system case distinction */
|
||||
|
||||
|
||||
#endif /* ! BURN_OS_H_INCLUDED */
|
||||
|
@ -21,7 +21,6 @@ int mmc_function_spy(struct burn_drive *d, char * text);
|
||||
static unsigned char SBC_LOAD[] = { 0x1b, 0, 0, 0, 3, 0 };
|
||||
static unsigned char SBC_UNLOAD[] = { 0x1b, 0, 0, 0, 2, 0 };
|
||||
static unsigned char SBC_START_UNIT[] = { 0x1b, 0, 0, 0, 1, 0 };
|
||||
static unsigned char SBC_STOP_UNIT[] = { 0x1b, 0, 0, 0, 0, 0 };
|
||||
|
||||
void sbc_load(struct burn_drive *d)
|
||||
{
|
||||
@ -80,46 +79,28 @@ void sbc_eject(struct burn_drive *d)
|
||||
int sbc_start_unit(struct burn_drive *d)
|
||||
{
|
||||
struct command c;
|
||||
int ret;
|
||||
|
||||
if (mmc_function_spy(d, "start_unit") <= 0)
|
||||
return 0;
|
||||
|
||||
scsi_init_command(&c, SBC_START_UNIT, sizeof(SBC_START_UNIT));
|
||||
/*
|
||||
memcpy(c.opcode, SBC_START_UNIT, sizeof(SBC_START_UNIT));
|
||||
c.oplen = sizeof(SBC_START_UNIT);
|
||||
c.page = NULL;
|
||||
*/
|
||||
c.retry = 1;
|
||||
|
||||
c.opcode[1] |= 1; /* ts A70918 : Immed */
|
||||
|
||||
c.dir = NO_TRANSFER;
|
||||
d->issue_command(d, &c);
|
||||
if (c.error)
|
||||
return 0;
|
||||
/* ts A70918 : now asynchronous */
|
||||
d->is_stopped = 0;
|
||||
ret = spc_wait_unit_attention(d, 1800, "START UNIT", 0);
|
||||
return ret;
|
||||
return spc_wait_unit_attention(d, 1800, "START UNIT", 0);
|
||||
}
|
||||
|
||||
/* ts A90824 : Trying to reduce drive noise */
|
||||
int sbc_stop_unit(struct burn_drive *d)
|
||||
{
|
||||
struct command c;
|
||||
int ret;
|
||||
|
||||
if (mmc_function_spy(d, "stop_unit") <= 0)
|
||||
return 0;
|
||||
|
||||
scsi_init_command(&c, SBC_STOP_UNIT, sizeof(SBC_STOP_UNIT));
|
||||
c.retry = 1;
|
||||
c.opcode[1] |= 1; /* Immed */
|
||||
c.dir = NO_TRANSFER;
|
||||
d->issue_command(d, &c);
|
||||
if (c.error)
|
||||
return 0;
|
||||
ret = spc_wait_unit_attention(d, 1800, "STOP UNIT", 0);
|
||||
d->is_stopped = 1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ts A61021 : the sbc specific part of sg.c:enumerate_common()
|
||||
*/
|
||||
@ -128,8 +109,6 @@ int sbc_setup_drive(struct burn_drive *d)
|
||||
d->eject = sbc_eject;
|
||||
d->load = sbc_load;
|
||||
d->start_unit = sbc_start_unit;
|
||||
d->stop_unit = sbc_stop_unit;
|
||||
d->is_stopped = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1,229 +0,0 @@
|
||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||
|
||||
/*
|
||||
|
||||
This is the main operating system dependent SCSI part of libburn. It implements
|
||||
the transport level aspects of SCSI control and command i/o.
|
||||
|
||||
Present implementation: default dummy which enables libburn only to work
|
||||
with stdio: pseudo drive addresses.
|
||||
For real implementations see sg-linux.c or sg-freebsd.c
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef Libburn_os_has_statvfS
|
||||
#include <sys/statvfs.h>
|
||||
#endif /* Libburn_os_has_stavtfS */
|
||||
|
||||
#include "transport.h"
|
||||
#include "drive.h"
|
||||
#include "sg.h"
|
||||
#include "spc.h"
|
||||
#include "mmc.h"
|
||||
#include "sbc.h"
|
||||
#include "debug.h"
|
||||
#include "toc.h"
|
||||
#include "util.h"
|
||||
|
||||
#include "libdax_msgs.h"
|
||||
extern struct libdax_msgs *libdax_messenger;
|
||||
|
||||
|
||||
/** Returns the next index number and the next enumerated drive address.
|
||||
The enumeration has to cover all available and accessible drives. It is
|
||||
allowed to return addresses of drives which are not available but under
|
||||
some (even exotic) circumstances could be available. It is on the other
|
||||
hand allowed, only to hand out addresses which can really be used right
|
||||
in the moment of this call. (This implementation chooses the former.)
|
||||
@param idx An opaque handle. Make no own theories about it.
|
||||
@param adr Takes the reply
|
||||
@param adr_size Gives maximum size of reply including final 0
|
||||
@param initialize 1 = start new,
|
||||
0 = continue, use no other values for now
|
||||
-1 = finish
|
||||
@return 1 = reply is a valid address , 0 = no further address available
|
||||
-1 = severe error (e.g. adr_size too small)
|
||||
*/
|
||||
int sg_give_next_adr(burn_drive_enumerator_t *idx,
|
||||
char adr[], int adr_size, int initialize)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Brings all available, not-whitelist-banned, and accessible drives into
|
||||
libburn's list of drives.
|
||||
*/
|
||||
/* ts A61115: replacing call to sg-implementation internals from drive.c */
|
||||
int scsi_enumerate_drives(void)
|
||||
{
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x0002016b,
|
||||
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"No MMC transport adapter is present. Running on sg-dummy.c.",
|
||||
0, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/** Tells wether libburn has the given drive in use or exclusively reserved.
|
||||
If it is "open" then libburn will eventually call sg_release() on it when
|
||||
it is time to give up usage resp. reservation.
|
||||
*/
|
||||
/** Published as burn_drive.drive_is_open() */
|
||||
int sg_drive_is_open(struct burn_drive * d)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Opens the drive for SCSI commands and - if burn activities are prone
|
||||
to external interference on your system - obtains an exclusive access lock
|
||||
on the drive. (Note: this is not physical tray locking.)
|
||||
A drive that has been opened with sg_grab() will eventually be handed
|
||||
over to sg_release() for closing and unreserving.
|
||||
*/
|
||||
int sg_grab(struct burn_drive *d)
|
||||
{
|
||||
libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002016a,
|
||||
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"No MMC transport adapter is present. Running on sg-dummy.c.",
|
||||
0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Gives up the drive for SCSI commands and releases eventual access locks.
|
||||
(Note: this is not physical tray locking.)
|
||||
*/
|
||||
int sg_release(struct burn_drive *d)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Sends a SCSI command to the drive, receives reply and evaluates wether
|
||||
the command succeeded or shall be retried or finally failed.
|
||||
Returned SCSI errors shall not lead to a return value indicating failure.
|
||||
The callers get notified by c->error. An SCSI failure which leads not to
|
||||
a retry shall be notified via scsi_notify_error().
|
||||
The Libburn_log_sg_commandS facility might be of help when problems with
|
||||
a drive have to be examined. It shall stay disabled for normal use.
|
||||
@return: 1 success , <=0 failure
|
||||
*/
|
||||
int sg_issue_command(struct burn_drive *d, struct command *c)
|
||||
{
|
||||
libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002016a,
|
||||
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"No MMC transport adapter is present. Running on sg-dummy.c.",
|
||||
0, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/** Tries to obtain SCSI address parameters.
|
||||
@return 1 is success , 0 is failure
|
||||
*/
|
||||
int sg_obtain_scsi_adr(char *path, int *bus_no, int *host_no, int *channel_no,
|
||||
int *target_no, int *lun_no)
|
||||
{
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x0002016c,
|
||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"No MMC transport adapter is present. Running on sg-dummy.c.",
|
||||
0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/** Tells wether a text is a persistent address as listed by the enumeration
|
||||
functions.
|
||||
*/
|
||||
int sg_is_enumerable_adr(char *adr)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
/** Estimate the potential payload capacity of a file address.
|
||||
@param path The address of the file to be examined. If it does not
|
||||
exist yet, then the directory will be inquired.
|
||||
@param bytes The pointed value gets modified, but only if an estimation is
|
||||
possible.
|
||||
@return -2 = cannot perform necessary operations on file object
|
||||
-1 = neither path nor dirname of path exist
|
||||
0 = could not estimate size capacity of file object
|
||||
1 = estimation has been made, bytes was set
|
||||
*/
|
||||
int burn_os_stdio_capacity(char *path, off_t *bytes)
|
||||
{
|
||||
struct stat stbuf;
|
||||
|
||||
#ifdef Libburn_os_has_statvfS
|
||||
struct statvfs vfsbuf;
|
||||
#endif
|
||||
|
||||
char testpath[4096], *cpt;
|
||||
long blocks;
|
||||
off_t add_size = 0;
|
||||
|
||||
testpath[0] = 0;
|
||||
blocks = *bytes / 512;
|
||||
if (stat(path, &stbuf) == -1) {
|
||||
strcpy(testpath, path);
|
||||
cpt = strrchr(testpath, '/');
|
||||
if(cpt == NULL)
|
||||
strcpy(testpath, ".");
|
||||
else if(cpt == testpath)
|
||||
testpath[1] = 0;
|
||||
else
|
||||
*cpt = 0;
|
||||
if (stat(testpath, &stbuf) == -1)
|
||||
return -1;
|
||||
|
||||
#ifdef Libburn_if_this_was_linuX
|
||||
|
||||
} else if(S_ISBLK(stbuf.st_mode)) {
|
||||
fd = open(path, open_mode);
|
||||
if (fd == -1)
|
||||
return -2;
|
||||
ret = ioctl(fd, BLKGETSIZE, &blocks);
|
||||
close(fd);
|
||||
if (ret == -1)
|
||||
return -2;
|
||||
*bytes = ((off_t) blocks) * (off_t) 512;
|
||||
|
||||
#endif /* Libburn_if_this_was_linuX */
|
||||
|
||||
} else if(S_ISREG(stbuf.st_mode)) {
|
||||
add_size = stbuf.st_blocks * (off_t) 512;
|
||||
strcpy(testpath, path);
|
||||
} else
|
||||
return 0;
|
||||
|
||||
if (testpath[0]) {
|
||||
|
||||
#ifdef Libburn_os_has_statvfS
|
||||
|
||||
if (statvfs(testpath, &vfsbuf) == -1)
|
||||
return -2;
|
||||
*bytes = add_size + ((off_t) vfsbuf.f_bsize) *
|
||||
(off_t) vfsbuf.f_bavail;
|
||||
|
||||
#else /* Libburn_os_has_statvfS */
|
||||
|
||||
return 0;
|
||||
|
||||
#endif /* ! Libburn_os_has_stavtfS */
|
||||
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
@ -552,26 +553,11 @@ 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) {
|
||||
|
||||
/* 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;
|
||||
|
||||
ccb->csio.dxfer_len = BUFFER_SIZE;
|
||||
/* touch page so we can use valgrind */
|
||||
memset(c->page->data, 0, BUFFER_SIZE);
|
||||
} else {
|
||||
/* ts A90430 */
|
||||
/* a ssert(c->page->bytes > 0); */
|
||||
if (c->page->bytes <= 0) {
|
||||
c->error = 1;
|
||||
return 0;
|
||||
}
|
||||
assert(c->page->bytes > 0);
|
||||
ccb->csio.dxfer_len = c->page->bytes;
|
||||
}
|
||||
} else {
|
||||
|
@ -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, tries= 0;
|
||||
int open_mode = O_RDWR, fd;
|
||||
char msg[81];
|
||||
|
||||
/* ts A70409 : DDLP-B */
|
||||
@ -502,8 +502,7 @@ 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
|
||||
@ -512,17 +511,6 @@ try_open:;
|
||||
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;
|
||||
|
||||
@ -805,7 +793,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() */
|
||||
|
28
libburn/sg.c
28
libburn/sg.c
@ -1,7 +1,7 @@
|
||||
|
||||
/* sg.c
|
||||
Switcher for operating system dependent transport level modules of libburn.
|
||||
Copyright (C) 2009 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
||||
Copyright (C) 2006 Thomas Schmitt <scdbackup@gmx.net>, provided under GPL
|
||||
*/
|
||||
|
||||
|
||||
@ -10,32 +10,8 @@
|
||||
#include "sg-freebsd.c"
|
||||
|
||||
#else
|
||||
#ifdef __linux
|
||||
|
||||
#include "sg-linux.c"
|
||||
|
||||
#else
|
||||
|
||||
/* The dummy adapter formally fulfills the expectations of libburn towards
|
||||
its SCSI command transport. It will show no drives and perform no SCSI
|
||||
commands.
|
||||
libburn will then be restricted to using its stdio pseudo drives.
|
||||
*/
|
||||
static int intentional_compiler_warning(void)
|
||||
{
|
||||
int INTENTIONAL_COMPILER_WARNING_;
|
||||
int Cannot_recognize_Linux_nor_FreeBSD_;
|
||||
int Have_to_use_dummy_MMC_transport_adapter_;
|
||||
int This_libburn_will_not_be_able_to_operate_on_real_CD_drives;
|
||||
int Have_to_use_dummy_MMC_transport_adapter;
|
||||
int Cannot_recognize_Linux_nor_FreeBSD;
|
||||
int INTENTIONAL_COMPILER_WARNING;
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
#include "sg-dummy.c"
|
||||
|
||||
#endif /* ! __linux */
|
||||
#endif /* ! __FreeBSD__ */
|
||||
#endif
|
||||
|
||||
|
@ -291,7 +291,7 @@ void spc_allow(struct burn_drive *d)
|
||||
}
|
||||
|
||||
/*
|
||||
ts A70518 - A90603 : Do not call with *alloc_len < 10
|
||||
ts A70518 : Do not call with *alloc_len < 8
|
||||
*/
|
||||
/** flag&1= do only inquire alloc_len */
|
||||
static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
|
||||
@ -303,19 +303,13 @@ 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 < 10)
|
||||
if (*alloc_len < 8)
|
||||
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));
|
||||
/*
|
||||
@ -334,11 +328,12 @@ 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));
|
||||
m->valid = -1;
|
||||
d->mdata->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 :
|
||||
@ -347,28 +342,18 @@ 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 + 10;
|
||||
*alloc_len = page_length + 8;
|
||||
if (flag & 1)
|
||||
return !was_error;
|
||||
if (page_length + 10 > old_alloc_len)
|
||||
page_length = old_alloc_len - 10;
|
||||
|
||||
/* 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);
|
||||
if (page_length + 8 > old_alloc_len)
|
||||
page_length = old_alloc_len - 8;
|
||||
if (page_length < 22)
|
||||
return 0;
|
||||
}
|
||||
|
||||
m->valid = 0;
|
||||
burn_mdata_free_subs(m);
|
||||
|
||||
m->buffer_size = page[12] * 256 + page[13];
|
||||
m->dvdram_read = page[2] & 32;
|
||||
@ -399,13 +384,12 @@ 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;
|
||||
|
||||
if (!was_error)
|
||||
m->valid = 1;
|
||||
m->valid = 1;
|
||||
|
||||
mmc_get_configuration(d);
|
||||
|
||||
/* ts A61225 : end of MMC-1 , begin of MMC-3 */
|
||||
if (page_length < 30) /* no write speed descriptors ? */
|
||||
if (page_length < 32) /* no write speed descriptors ? */
|
||||
goto try_mmc_get_performance;
|
||||
|
||||
m->cur_write_speed = page[28] * 256 + page[29];
|
||||
@ -429,12 +413,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),
|
||||
@ -447,7 +431,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;
|
||||
}
|
||||
|
||||
@ -463,31 +447,19 @@ static int spc_sense_caps_al(struct burn_drive *d, int *alloc_len, int flag)
|
||||
m->min_write_speed, m->max_write_speed);
|
||||
|
||||
try_mmc_get_performance:;
|
||||
if (m->cdrw_write || page_length >= 32) {
|
||||
/* ts A90823:
|
||||
One has to avoid U3 enhanced memory sticks here. On my
|
||||
SuSE 10.2 a SanDisk Cruzer 4GB stalls at the second occasion
|
||||
of ACh GET PERFORMANCE. (The first one is obviously called
|
||||
by the OS at plug time.)
|
||||
This pseudo drive returns no write capabilities and a page
|
||||
length of 28. MMC-3 describes page length 32. Regrettably
|
||||
MMC-2 prescribes a page length of 26. Here i have to trust
|
||||
m->cdrw_write to reliably indicate any MMC-2 burner.
|
||||
*/
|
||||
ret = mmc_get_write_performance(d);
|
||||
if (ret > 0 && speed_debug)
|
||||
fprintf(stderr,
|
||||
"LIBBURN_DEBUG: ACh min_write_speed = %d , max_write_speed = %d\n",
|
||||
m->min_write_speed, m->max_write_speed);
|
||||
}
|
||||
ret = mmc_get_write_performance(d);
|
||||
|
||||
if (ret > 0 && speed_debug)
|
||||
fprintf(stderr,
|
||||
"LIBBURN_DEBUG: ACh min_write_speed = %d , max_write_speed = %d\n",
|
||||
m->min_write_speed, m->max_write_speed);
|
||||
return !was_error;
|
||||
}
|
||||
|
||||
|
||||
void spc_sense_caps(struct burn_drive *d)
|
||||
{
|
||||
int alloc_len, start_len = 30, ret;
|
||||
int alloc_len, start_len = 22, ret;
|
||||
|
||||
if (mmc_function_spy(d, "sense_caps") <= 0)
|
||||
return;
|
||||
@ -948,18 +920,6 @@ 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;
|
||||
|
@ -161,11 +161,6 @@ 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 A90815 */
|
||||
unsigned char all_profiles[256];
|
||||
int num_profiles;
|
||||
|
||||
/* ts A70128 : MMC-to-MMC feature info from 46h for DVD-RW.
|
||||
Quite internal. Regard as opaque :)
|
||||
@ -210,11 +205,6 @@ struct burn_drive
|
||||
with BD-RE */
|
||||
int do_stream_recording;
|
||||
|
||||
/* ts A90227 : the LBA where stream recording shall start.
|
||||
Writing to lower LBA will be done without streaming.
|
||||
*/
|
||||
int stream_recording_start;
|
||||
|
||||
/* ts A61218 from 51h READ DISC INFORMATION */
|
||||
int bg_format_status; /* 0=needs format start, 1=needs format restart*/
|
||||
|
||||
@ -317,11 +307,6 @@ struct burn_drive
|
||||
void (*eject) (struct burn_drive *);
|
||||
void (*load) (struct burn_drive *);
|
||||
int (*start_unit) (struct burn_drive *);
|
||||
|
||||
/* ts A90824 : Calming down noisy drives */
|
||||
int (*stop_unit) (struct burn_drive *);
|
||||
int is_stopped;
|
||||
|
||||
void (*read_disc_info) (struct burn_drive *);
|
||||
void (*read_sectors) (struct burn_drive *,
|
||||
int start,
|
||||
|
@ -1736,14 +1736,6 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
|
||||
o->obs_pad = 1; /* fill-up track's last 32k buffer */
|
||||
}
|
||||
|
||||
|
||||
/* <<< test only : Does this increase effective speed with USB ?
|
||||
ts A90801 : 64kB: speed with 16x DVD-R is 12 rather than 8
|
||||
>>> next try is 128 kB
|
||||
o->obs = 128 * 1024;
|
||||
*/
|
||||
|
||||
|
||||
sprintf(msg, "dvd/bd Profile= %2.2Xh , obs= %d , obs_pad= %d",
|
||||
d->current_profile, o->obs, o->obs_pad);
|
||||
libdax_msgs_submit(libdax_messenger, d->global_index, 0x00000002,
|
||||
@ -1853,13 +1845,6 @@ 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,
|
||||
@ -2108,7 +2093,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 *buffer_mem = o->drive->buffer;
|
||||
struct buffer buf, *buffer_mem = o->drive->buffer;
|
||||
struct burn_track *lt, *t;
|
||||
int first = 1, i, ret, lba, nwa = 0, multi_mem;
|
||||
off_t default_size;
|
||||
@ -2121,40 +2106,11 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
|
||||
/* ts A61224 */
|
||||
burn_disc_init_write_status(o, disc); /* must be done very early */
|
||||
|
||||
/* ts A80412 , A90227 */
|
||||
d->do_stream_recording = !!o->do_stream_recording;
|
||||
if (o->do_stream_recording >= 16)
|
||||
d->stream_recording_start = o->do_stream_recording;
|
||||
else
|
||||
d->stream_recording_start = 0;
|
||||
|
||||
d->buffer = calloc(sizeof(struct buffer), 1);
|
||||
if (d->buffer == NULL)
|
||||
goto fail_wo_sync;
|
||||
|
||||
|
||||
/* >>> ts A90321
|
||||
/* ts A80412 */
|
||||
d->do_stream_recording = o->do_stream_recording;
|
||||
|
||||
d->buffer = &buf;
|
||||
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;
|
||||
|
||||
@ -2352,8 +2308,6 @@ 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;
|
||||
}
|
||||
|
@ -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 || *driveno <= 0)
|
||||
if (ret <= 0)
|
||||
return ret;
|
||||
burn_disc_get_profile(drive_list[0].drive, ¤t_profile,
|
||||
current_profile_name);
|
||||
|
Reference in New Issue
Block a user