Compare commits

..

4 Commits

26 changed files with 157 additions and 763 deletions

View File

@ -101,9 +101,9 @@ test_structest_CPPFLAGS = -Ilibburn
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
test_structest_SOURCES = test/structest.c
## cdrskin construction site - ts A60816 - A81112
## cdrskin construction site - ts A60816 - A80820
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_5_6
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_5_2
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking

29
README
View File

@ -12,6 +12,12 @@ 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
These parts are to be replaced by own code of above libburnia-project.org
copyright holders and then libburnia-project.org is to be their sole copyright.
This is done to achieve the right to issue the clarification and the
commitment as written at the end of this text.
The rights and merits of the Libburn-copyright holders Derek Foreman and
Ben Jansens will be duely respected.
This libburnia-project.org toplevel README (C) 2006-2008 Thomas Schmitt
------------------------------------------------------------------------------
@ -271,7 +277,7 @@ Project history as far as known to me:
image tree nodes. It now depends on libisofs-0.6.4 and libburn-0.4.4.
xorriso makes use of new libisofs features by performing incremental
updates of directory trees and by cutting oversized data files into
pieces. A primitive single session emulation of cdrecord and mkisofs is
pieces. A primitive single session emulation of cdrcord and mkisofs is
provided.
- 10th May 2008 libburn-0.4.6 supports formatting and writing of BD-RE,
@ -301,27 +307,6 @@ Project history as far as known to me:
enumerable in order to be adressable. Enumeration is enhanced by examining
/proc/sys/dev/cdrom/info.
- 24th Aug 2008 libisoburn/xorriso-0.2.4 introduces a media readability check
with data retrieval option.
- 18th Sep 2008 libisofs-0.6.8 supports ISO 9660 Level 3 which allows very
large data files in the image.
- 20th Sep 2008 libisoburn/xorriso-0.2.6 takes into respect the new Level 3
capabilities of libisofs.
- 6th Oct 2008 libburn-0.5.4 adjusts the changes of 0.5.2 to the needs of
Linux kernel 2.4 and introduces human readable SCSI error messages.
- 6th Oct 2008 libisofs-0.6.10 fixes two bugs which prevented adding and
manipulation of ISOLINUX boot images.
- 15th Oct 2008 libisoburn/xorriso-0.2.8 can activate and maintain an
ISOLINUX boot image by an EL Torito boot record.
- 12th Nov 2008 libburn-0.5.6 fixes usage of freed memory by the fifo thread
of an aborted burn run.
------------------------------------------------------------------------------

View File

@ -4,7 +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.5.6.pl00.tar.gz
http://scdbackup.sourceforge.net/cdrskin-0.5.2.pl00.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------
@ -20,10 +20,10 @@ By using this software you agree to the disclaimer at the end of this text
Compilation, First Glimpse, Installation
Obtain cdrskin-0.5.6.pl00.tar.gz, take it to a directory of your choice and do:
Obtain cdrskin-0.5.2.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf cdrskin-0.5.6.pl00.tar.gz
cd cdrskin-0.5.6
tar xzf cdrskin-0.5.2.pl00.tar.gz
cd cdrskin-0.5.2
Within that directory execute:

View File

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

View File

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

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "Oct 15, 2008"
.TH CDRSKIN 1 "Aug 05, 2008"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -108,9 +108,8 @@ While audio tracks just contain a given time span of acoustic vibrations,
data tracks may have an arbitray meaning. Nevertheless, ISO-9660 filesystems
are established as a format which can represent a tree of directories and
files on all major operating systems. Such filesystem images can be
produced by programs mkisofs or genisoimage or xorriso.
They can also be extended by follow-up tracks if prepared properly.
See the man pages of said programs.
produced by programs mkisofs or genisoimage. They can also be extended by
follow-up tracks if prepared properly. See the man pages of said programs.
cdrskin is able to fulfill the needs about their option -C.
.br
Another type of data track content are archive formats which originally
@ -161,8 +160,7 @@ round of overwriting. Usually
is the appropriate option.
Blanking damages the previous content but does not
make it completely unreadable. It is no effective privacy precaution.
Multiple cycles of blanking and overwriting with random numbers might be
needed.
Multiple cycles of blanking and overwriting with random numbers might be.
.SS
.B Sequentially Recordable DVD Media:
.br
@ -619,8 +617,7 @@ Note: msifile=path is actually an option of wodim and not of cdrecord.
.TP
.BI \-msinfo
Retrieve multi-session info for preparing a follow-up session by option -C
of programs mkisofs, genisoimage, or xorriso -as mkisofs.
Print result to standard output.
of programs mkisofs or genisoimage. Print result to standard output.
This option redirects to stderr all message output except the one of option
--tell_media_space and its own result string, which consists of two numbers.
The result string shall be used as argument of option -C with said programs.

View File

@ -88,7 +88,7 @@ or
/** The official program version */
#ifndef Cdrskin_prog_versioN
#define Cdrskin_prog_versioN "0.5.6"
#define Cdrskin_prog_versioN "0.5.2"
#endif
/** The official libburn interface revision to use.
@ -101,7 +101,7 @@ or
#define Cdrskin_libburn_minoR 5
#endif
#ifndef Cdrskin_libburn_micrO
#define Cdrskin_libburn_micrO 6
#define Cdrskin_libburn_micrO 2
#endif
@ -135,44 +135,44 @@ or
#endif /* Cdrskin_libburn_cvs_A60220_tS */
#ifdef Cdrskin_libburn_0_5_6
#define Cdrskin_libburn_versioN "0.5.6"
#ifdef Cdrskin_libburn_0_5_2
#define Cdrskin_libburn_versioN "0.5.2"
#define Cdrskin_libburn_from_pykix_svN 1
#endif /* Cdrskin_libburn_0_5_6 */
#endif /* Cdrskin_libburn_0_5_2 */
#ifdef Cdrskin_libburn_0_5_7
#define Cdrskin_libburn_versioN "0.5.7"
#ifdef Cdrskin_libburn_0_5_3
#define Cdrskin_libburn_versioN "0.5.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.5.7 yet */
/* there are no libburn novelties in 0.5.3 yet */
#endif /* Cdrskin_libburn_0_5_7 */
#endif /* Cdrskin_libburn_0_5_3 */
#ifndef Cdrskin_libburn_versioN
#define Cdrskin_libburn_0_5_6
#define Cdrskin_libburn_versioN "0.5.6"
#define Cdrskin_libburn_0_5_2
#define Cdrskin_libburn_versioN "0.5.2"
#define Cdrskin_libburn_from_pykix_svN 1
#endif
#ifdef Cdrskin_libburn_0_5_6
#ifdef Cdrskin_libburn_0_5_2
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 5
#define Cdrskin_libburn_micrO 6
#define Cdrskin_libburn_micrO 2
#endif
#ifdef Cdrskin_libburn_0_5_7
#ifdef Cdrskin_libburn_0_5_3
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 5
#define Cdrskin_libburn_micrO 5
#define Cdrskin_libburn_micrO 3
#endif
@ -251,7 +251,7 @@ or
/* 0.4.8 */
/* Bug fix release for write_start_address=... on DVD-RAM and BD-RE */
/* 0.5.0 , 0.5.2 , 0.5.4 , 0.5.6 */
/* 0.5.0 , 0.5.2 */
/* novel libburn features are transparent to cdrskin */
@ -5508,7 +5508,7 @@ thank_you_for_patience:;
if(skin->is_writing)
fprintf(stderr,"\n");
fprintf(stderr,
"\rcdrskin: thank you for being patient for %.f seconds ",
"\rcdrskin: thank you for being patient since %.f seconds ",
elapsed_total_time);
}
advance_interval= 1;

View File

@ -57,7 +57,7 @@ and to MMC-5 for DVD or BD).
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.5.6</DT>
<DT>libburn-0.5.2</DT>
<DD>(founded by Derek Foreman and Ben Jansens,
furthered since August 2006 by Thomas Schmitt from team of libburnia-project.org)</DD>
<DD>transfers data to CD, DVD, BD-RE</DD>
@ -186,8 +186,8 @@ or to do experiments on BD-R media.
<P>
<DL>
<DT>Download as source code (see README):</DT>
<DD><A HREF="cdrskin-0.5.6.pl00.tar.gz">cdrskin-0.5.6.pl00.tar.gz</A>
(740 KB).
<DD><A HREF="cdrskin-0.5.2.pl00.tar.gz">cdrskin-0.5.2.pl00.tar.gz</A>
(735 KB).
</DD>
<DD>
The cdrskin tarballs are source code identical with libburn releases
@ -236,21 +236,18 @@ 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.5.4.pl00:
Enhancements towards previous stable version cdrskin-0.5.0.pl00:
<UL>
<LI>none</LI>
<LI>It is now possible to use drives which are not found by --devices</LI>
<!--
<LI>none</LI>
-->
</UL>
Bug fixes towards cdrskin-0.5.4.pl00:
Bug fixes towards cdrskin-0.5.0.pl00:
<UL>
<LI>
libburn fifo thread was not aborted when burn run was aborted which could
lead to use of freed memory
</LI>
<!--
<LI>none</LI>
<!--
-->
</UL>
@ -260,8 +257,8 @@ lead to use of freed memory
<P>
<DL>
<DT><H3>Development snapshot, version 0.5.7 :</H3></DT>
<DD>Enhancements towards current stable version 0.5.6.pl00:
<DT><H3>Development snapshot, version 0.5.3 :</H3></DT>
<DD>Enhancements towards current stable version 0.5.2.pl00:
<UL>
<!--
-->
@ -270,10 +267,10 @@ lead to use of freed memory
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_cdrskin_devel">README 0.5.7</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.5.7 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.5.7 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.5.7)</A></DD>
<DD><A HREF="README_cdrskin_devel">README 0.5.3</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.5.3 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.5.3 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.5.3)</A></DD>
<DD>&nbsp;</DD>
<DT>Maintainers of cdrskin unstable packages please use SVN of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
@ -293,8 +290,8 @@ admins with full system souvereignty.</DT>
<A HREF="README_cdrskin_devel">upcoming README</A> ):
</DD>
<DD>
<A HREF="cdrskin-0.5.7.tar.gz">cdrskin-0.5.7.tar.gz</A>
(740 KB).
<A HREF="cdrskin-0.5.3.tar.gz">cdrskin-0.5.3.tar.gz</A>
(735 KB).
</DD>
<!-- This is not offered any more since spring 2008

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2008.11.12.120001"
#define Cdrskin_timestamP "2008.08.20.080001"

View File

@ -5741,222 +5741,16 @@ Made number transition to 0.5.2 and activated development documentation
+ cdrskin/add_ts_changes_to_libburn_0_5_3
Updated cdrskin tarball generator
20 Aug 2008 [1996]
20 Aug 2008 []
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------ release - cdrskin-0.5.2.pl00 - 2008.08.20.080001
* Larger set of possibly acceptable drive device file names
2008.08.20.100045 [1997]
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.5.3
20 Aug 2008 [1998]
- cdrskin/add_ts_changes_to_libburn_0_5_0
- cdrskin/add_ts_changes_to_libburn_0_5_1
+ cdrskin/add_ts_changes_to_libburn_0_5_2
+ cdrskin/add_ts_changes_to_libburn_0_5_3
Updated cdrskin tarball generator
20 Aug 2008 [1999]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.5.3 - 2008.08.20.110457
30 Aug 2008 [2023]
README
Mentioned release of libisoburn-0.2.4
2008.08.30.104339 [2024]
libburn/mmc.c
libburn/spc.c
Issueing many SCSI error messages in cleartext now
2008.09.09.131915 [2039]
libburn/sg-linux.c
Trying to avoid unnecessary access to sibling device objects
12 Sep 2008 [2043]
doc/cookbook.txt
Described ISO 9660 multi-session on overwriteable media
2008.09.14.174344 [2048]
libburn/util.c
Gave up problematic and unused version.h
2008.09.16.060250 [2052]
cdrskin/cdrskin.c
Corrected pacifier text (Ticket 141)
24 Sep 2008 [2079]
README
Mentioned recent releases of libisofs and libisoburn
2008.09.28.193802 [2086]
libburn/spc.c
Bug fix: Potential buffer overflow introduced with revision 2024
2008.09.28.211741 [2087]
libburn/sg-linux.c
Bug fix: /dev/sr0 was accepted as enumerable address on Linux 2.4
2008.10.04.072657 [2096]
libburn/write.c
libburn/read.c
libburn/drive.c
Prevented SIGSEGV after illegal drive operations during sync write
2008.10.04.072657 [2097]
cdrskin/cdrskin.1
Mentioned new xorriso capabilities in man cdrskin
2008.10.04.073814 [2098]
configure.ac
Incremented LT_CURRENT and LT_AGE to get libburn.so.4.18.0
------------------------------------ cycle - cdrskin-0.5.3 - 2008.10.04.072657
* Bug fix: /dev/sr0 was accepted as enumerable address on Linux 2.4
2008.10.05.073001 [2102]
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
5 Oct 2008 [2103]
- cdrskin/add_ts_changes_to_libburn_0_5_2
- cdrskin/add_ts_changes_to_libburn_0_5_3
+ cdrskin/add_ts_changes_to_libburn_0_5_4
+ cdrskin/add_ts_changes_to_libburn_0_5_5
Updated cdrskin tarball generator
5 Oct 2008 [2104]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------ release - cdrskin-0.5.4.pl00 - 2008.10.06.073001
* Bug fix: /dev/sr0 was accepted as enumerable address on Linux 2.4
* Issueing many SCSI error messages in cleartext now
2008.10.05.123737 [2106]
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 next development cycle
5 Oct 2008 [2107]
- cdrskin/add_ts_changes_to_libburn_0_5_2
- cdrskin/add_ts_changes_to_libburn_0_5_3
+ cdrskin/add_ts_changes_to_libburn_0_5_4
+ cdrskin/add_ts_changes_to_libburn_0_5_5
Updated cdrskin tarball generator
5 Oct 2008 [2108]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.5.5 - 2008.10.05.130109
2008.10.15.103224 [2126]
libburn/libburn.h
A clarification in comment about burn_disc_format()
15 Oct 2008 [2127]
cdrskin/cdrskin.1
Fixed incomplete sentence in man cdrskin
2008.11.01.121240 [2157]
libburn/libburn.h
libburn/async.c
Bug fix: Unsuitable write modes were caught silently and later than desired
------------------------------------ cycle - cdrskin-0.5.5 - 2008.11.01.121445
2008.11.08.134828 [2173]
libburn/libburn.h
Clarified behavior of burn_source with pipes
2008.11.08.141734 [2174]
libburn/file.h
libburn/file.c
libburn/async.c
Cancelling libburn fifo thread before freeing the fifo object
2008.11.08.202456 [2175]
libburn/async.c
Disabling the sigsegv provoking new debug message
2008.11.12.075111 [2180]
libburn/async.h
Avoiding warning message about implicitely declared burn_fifo_abort()
------------------------------------ cycle - cdrskin-0.5.5 - 2008.11.12.075411
* Bug fix: libburn fifo thread was not aborted when burn run was aborted
12 Nov 2008 [2181]
svn copy http://svn.libburnia-project.org/libburn/trunk
http://svn.libburnia-project.org/libburn/branches/ZeroFiveSix
Preparing for libburn-0.5.6
12 Nov 2008 [2182]
svn delete http://svn.libburnia-project.org/libburn/branches/ZeroFourSix
Removing obsolete libburn branch ZeroFourSix
2008.11.12.120001 [2183]
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.5.6
12 Nov 2008 [2184]
- cdrskin/add_ts_changes_to_libburn_0_5_4
- cdrskin/add_ts_changes_to_libburn_0_5_5
+ cdrskin/add_ts_changes_to_libburn_0_5_6
+ cdrskin/add_ts_changes_to_libburn_0_5_7
Updated cdrskin tarball generator
12 Nov 2008 []
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------ release - cdrskin-0.5.6.pl00 - 2008.10.06.073001
* Bug fix: libburn fifo thread was not aborted when burn run was aborted
which could lead to use of freed memory
------------------------------------ cycle - cdrskin-0.5.7 -
------------------------------------ cycle - cdrskin-0.5.7 -
------------------------------------ cycle - cdrskin-0.5.3 -
------------------------------------ cycle - cdrskin-0.5.3 -
===============================================================================
TODO
@ -5965,11 +5759,6 @@ which could lead to use of freed memory
--------------------------------- bugs -------------------------------------
- Do something about drive->buffer asynchronous race conditions
and dangerous use of local heap memory.
(The various asynchronous operations use the same buffer
pointer in struct burn_drive and let it point to
their private memory.)
- Why are DVD+R tracks labeled "invisible" by dvd+rw-mediainfo ?
Why does the DVD drive only show the first session ?
@ -5983,10 +5772,6 @@ READ TRACK INFORMATION[#5]:
------------------------------ end of bugs ---------------------------------
Enable profile 0x41 BD-R sequential recording (much like DVD+R)
? Enable profile 0x42 BD-R random recording
Provide DVD+R DL layer break setter
Check all SORRY and FATAL errors whether they should become FAILUREs
@ -6029,6 +5814,10 @@ http://developer.osdl.org/dev/robustmutexes/src/fusyn.hg/Documentation/ioctl/cdr
[]
Convert burn_print() into libdax_msgs_submit()
[]
Test unlocking of all drives by burn_drive_info_free()
Test unlocking of single drive by burn_drive_grab(), burn_drive_release()
[]
Clear outdated persistent read buffer after small CD image was read (ticket 57)

View File

@ -7,7 +7,7 @@
debug_opts="-O2"
def_opts=
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
libvers="-DCdrskin_libburn_0_5_6"
libvers="-DCdrskin_libburn_0_5_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_5_6"
elif test "$i" = "-libburn_0_5_2"
then
libvers="-DCdrskin_libburn_0_5_6"
libvers="-DCdrskin_libburn_0_5_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_5_7"
libvers="-DCdrskin_libburn_0_5_3"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o"
@ -76,7 +76,7 @@ do
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
echo " -compile_dewav compile program test/dewav without libburn."
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
echo " -libburn_0_5_6 set macro to match libburn-0.5.6"
echo " -libburn_0_5_2 set macro to match libburn-0.5.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."

View File

@ -1,4 +1,4 @@
AC_INIT([libburn], [0.5.6], [http://libburnia-project.org])
AC_INIT([libburn], [0.5.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 - A81111 :
dnl Notes by ts A71207 - A80126 :
dnl
dnl Regrettably the meaning of the various version types was misunderstood
dnl before version 0.4.1.
@ -63,9 +63,6 @@ dnl 0.4.4 = libburn.so.4.9.0
dnl 0.4.6 = libburn.so.4.11.0
dnl 0.4.8 = libburn.so.4.13.0
dnl 0.5.0 = libburn.so.4.15.0
dnl 0.5.2 = libburn.so.4.17.0
dnl 0.5.4 = libburn.so.4.19.0
dnl 0.5.6 = libburn.so.4.21.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.
@ -91,7 +88,7 @@ dnl
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=5
BURN_MICRO_VERSION=6
BURN_MICRO_VERSION=2
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
AC_SUBST(BURN_MAJOR_VERSION)
@ -102,15 +99,15 @@ AC_SUBST(BURN_VERSION)
dnl Libtool versioning
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
dnl
dnl ts A81111
dnl This is the release version libburn-0.5.6 = libburn.so.4.21.0
dnl ts A80820
dnl This is the release version libburn-0.5.2 = libburn.so.4.17.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 not yet happened.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl
dnl SONAME = 25 - 21 = 4 . Library name = libburn.so.4.21.0
LT_CURRENT=25
LT_AGE=21
dnl SONAME = 21 - 17 = 4 . Library name = libburn.so.4.17.0
LT_CURRENT=21
LT_AGE=17
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`

View File

@ -432,10 +432,6 @@ The recipes described here are depending on formatting state:
- DVD-RAM and BD-RE formatting
- DVD-RAM and BD-RE speed tuning
Slightly off topic are
- ISO 9660 multi-session emulation on overwriteable media
- ISO 9660 based TOC emulation on overwriteable media
-------------------------------------------------------------------------------
Overwriting in general :
@ -526,7 +522,7 @@ with Close Function 010b despite there is no session open in this scenario.)
-------------------------------------------------------------------------------
Unformatted DVD+RW :
Unformatted DVD+RW
This is the state of previously unused DVD+RW media.
@ -766,76 +762,6 @@ Nevertheless it worked on all tested drives is proper alignment was observed.
(mmc5r03c.pdf 5.4.13, 6.45)
-------------------------------------------------------------------------------
ISO 9660 multi-session emulation on overwriteable media :
Overwriteable media provide a single overwriteable track which may grow up to
the full media capacity. There is no builtin table-of-content which records
the history of write sessions.
mount -t iso9660 will use sbsector=0 as default.
The term "superblock" shall depict the first 64 KiB after the sbsector address.
ISO 9660 multi-session depends on typical TOC information in two ways:
It needs the superblock address MSC1 of the most recently recorded session and
it needs the Next Writeable Address NWA for which to prepare the adress offset.
The following is learned from growisofs and from ECMA-119:
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-119.pdf
ISO 9660 filesystems provide information about the number of sectors which
is also the lowest unused block address and thus a suitable NWA.
This block address is stored in the Primary Volume Descriptor which is supposed
to be stored in block 16 (eventually relative to MSC1).
The bytes 0 to 5 of a PVD block are
0x01 'C' 'D' '0' '0' '1'
The sector count can then be read from byte 80 to 83
sectors= pvd[80] | (pvd[81] << 8) | (pvd[82] << 16) | (pvd[83] << 24);
To support CD, DVD and BD media alike, it is advisable to round the NWA
to the next multiple of 32 (= 64 KiB).
(Ecma-119.pdf 8.4)
So one can use 0 as MSC1 and prepare a new ISO session for the computed NWA.
After writing the session it is necessary to patch the PVD at LBA 16.
The minimal change would be to update the number of image sectors.
It is stored in both notations LSB and MSB:
for(i= 0; i < 4; i++)
pvd[87 - i]= pvd[80 + i]= (sectors >> (8 * i)) & 0xff;
cdrskin --grow_overwriteable not only patches the sector fields of the
PVD block but also the blocks up to LBA 31 which begin with
0xff 'C' 'D' '0' '0' '1'
libisoburn submits 64 KiB data buffer to libisofs before image generation and
afterwards writes these 64 KiB as new superblock to LBA 0.
-------------------------------------------------------------------------------
ISO 9660 based TOC emulation on overwriteable media :
Above method of multi-session emulation yields a single session image after
each add-on session. No reliable session history can be read because the
sector size of the existing session gets overwritten by the new one.
A TOC with session history is nevertheless desirable with incremental backups
in order to access older backup states by mounting older superblocks at the
start addresses of older sessions.
All usual ISO 9660 formatter programs write a complete superblock to the
start of each session.
With a uniform NWA rounding rule it is possible to compute the address of
superblock N+1 as the NWA after session N. The only problem is N=1
because it gets overwritten by later sessions.
libisoburn preserves the information of session 1 by writing the first session
to LBA 32 rather than LBA 0. Afterwards it writes the overall superblock to
LBA 0 (up to 31).
So with all further add-on sessions the superblock at LBA 0 will enclose the
overall image, while the superblocks of the sessions form a chain beginning
at LBA 32. Each session superblock points to the next one by its sector count
rounded up to 32. The chain end is marked by the overall image size.
This chain gives the start addresses of sessions. The sector count minus start
address gives the size of a particular session. ECMA-119 explains how to
retrieve more info from the PVD (e.g. the volume id).
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

View File

@ -38,7 +38,7 @@ PROJECT_NUMBER = @PACKAGE_VERSION@
# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.
OUTPUT_DIRECTORY = @abs_top_builddir@
OUTPUT_DIRECTORY =
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
# 4096 sub-directories (in 2 levels) under the output directory of each output
@ -104,7 +104,7 @@ INLINE_INHERITED_MEMB = NO
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.
FULL_PATH_NAMES = NO
FULL_PATH_NAMES = YES
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user-defined part of the path. Stripping is
@ -113,7 +113,7 @@ FULL_PATH_NAMES = NO
# If left blank the directory from which doxygen is run is used as the
# path to strip.
STRIP_FROM_PATH =
STRIP_FROM_PATH = @top_srcdir@
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
# the path mentioned in the documentation of a class, which tells

View File

@ -25,9 +25,9 @@
#include "drive.h"
#include "write.h"
#include "options.h"
#include "file.h"
#include "async.h"
#include "init.h"
#include "file.h"
#include "back_hacks.h"
#include <pthread.h>
@ -495,7 +495,7 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
*/
strcpy(reasons, "Write job parameters are unsuitable:\n");
if (burn_precheck_write(opts, disc, reasons + strlen(reasons), 1)
<= 0) {
== BURN_WRITE_NONE) {
libdax_msgs_submit(libdax_messenger,
opts->drive->global_index, 0x00020139,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
@ -518,12 +518,6 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
static void *fifo_worker_func(struct w_list *w)
{
int old;
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old);
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &old);
/* Note: Only burn_fifo_abort() shall cancel the fifo thread */
burn_fifo_source_shoveller(w->u.fifo.source, w->u.fifo.flag);
remove_worker(pthread_self());
return NULL;
@ -553,27 +547,6 @@ int burn_fifo_start(struct burn_source *source, int flag)
}
int burn_fifo_abort(struct burn_source_fifo *fs, int flag)
{
int ret;
pthread_t pt;
if (fs->thread_is_valid <= 0 || fs->thread_handle == NULL)
return(2);
#ifdef NIX
libdax_msgs_submit(libdax_messenger, -1, 0x00000002,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
"Aborting running burn_source_fifo thread", 0, 0);
#endif /* NIX */
pt= *((pthread_t *) fs->thread_handle);
remove_worker(pt);
ret = pthread_cancel(pt);
return (ret == 0);
}
#ifdef Libburn_has_burn_async_join_alL
/* ts A71019 : never used */

View File

@ -10,9 +10,5 @@ struct burn_write_opts;
/* To be called when the first read() call comes to a fifo */
int burn_fifo_start(struct burn_source *source, int flag);
/* ts A81108 */
/* To abort a running fifo thread before the fifo object gets deleted */
int burn_fifo_abort(struct burn_source_fifo *fs, int flag);
#endif /* BURN__ASYNC_H */

View File

@ -624,7 +624,7 @@ void burn_disc_format_sync(struct burn_drive *d, off_t size, int flag)
int ret, buf_secs, err, i, stages = 1, pbase, pfill, pseudo_sector;
off_t num_bufs;
char msg[80];
struct buffer buf, *buf_mem = d->buffer;
struct buffer buf;
/* reset the progress */
d->progress.session = 0;
@ -706,7 +706,7 @@ void burn_disc_format_sync(struct burn_drive *d, off_t size, int flag)
ex:;
d->progress.sector = 0x10000;
d->busy = BURN_DRIVE_IDLE;
d->buffer = buf_mem;
d->buffer = NULL;
}

View File

@ -9,8 +9,6 @@
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <pthread.h>
#include "source.h"
#include "libburn.h"
#include "file.h"
@ -309,7 +307,6 @@ static void fifo_free(struct burn_source *source)
{
struct burn_source_fifo *fs = source->data;
burn_fifo_abort(fs, 0);
if (fs->inp != NULL)
burn_source_free(fs->inp);
if (fs->buf != NULL)
@ -323,12 +320,9 @@ int burn_fifo_source_shoveller(struct burn_source *source, int flag)
struct burn_source_fifo *fs = source->data;
int ret, bufsize, diff, wpos, rpos, trans_end, free_bytes;
char *bufpt;
pthread_t thread_handle_storage;
fs->thread_handle= &thread_handle_storage;
*((pthread_t *) fs->thread_handle)= pthread_self();
fs->thread_pid = getpid();
fs->thread_is_valid = 1;
fs->thread_pid_valid = 1;
bufsize = fs->chunksize * fs->chunks;
while (!fs->end_of_consumption) {
@ -436,8 +430,6 @@ int burn_fifo_source_shoveller(struct burn_source *source, int flag)
free(fs->buf); /* Give up fifo buffer. Next fifo might start soon. */
fs->buf = NULL;
fs->thread_handle= NULL;
fs->thread_is_valid = 0;
return (fs->input_error == 0);
}
@ -473,9 +465,8 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
if (fs == NULL)
return NULL;
fs->is_started = 0;
fs->thread_handle = NULL;
fs->thread_pid = 0;
fs->thread_is_valid = 0;
fs->thread_pid_valid = 0;
fs->inp = NULL; /* set later */
fs->chunksize = chunksize;
fs->chunks = chunks;

View File

@ -29,9 +29,8 @@ struct burn_source_fifo {
*/
int is_started;
void *thread_handle; /* actually a pointer to a thread_t */
int thread_pid;
int thread_is_valid;
int thread_pid_valid;
/* the burn_source for which this fifo is acting as proxy */
struct burn_source *inp;

View File

@ -384,13 +384,6 @@ struct burn_source {
The size of a sector depends on BURN_MODE_*. The known range is
2048 to 2352.
If this call is reading from a pipe then it will learn
about the end of data only when that pipe gets closed on the
feeder side. So if the track size is not fixed or if the pipe
delivers less than the predicted amount or if the size is not
block aligned, then burning will halt until the input process
closes the pipe.
IMPORTANT:
If this function pointer is NULL, then the struct burn_source is of
version >= 1 and the job of .(*read)() is done by .(*read_xt)().
@ -820,8 +813,7 @@ void burn_allow_untested_profiles(int yes);
If the path does not exist in the filesystem yet, it is attempted to create
it as a regular file as soon as write operations are started.
The capabilities of role 3 resemble a blank DVD-R. Nevertheless each
burn_disc_write() run may only write a single track.
The capabilities of role 3 resemble a blank DVD-R.
One may distinguish pseudo-drives from MMC drives by call
burn_drive_get_drive_role().
@ -1220,8 +1212,7 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
/** Format media for use with libburn. This currently applies to DVD-RW
in state "Sequential Recording" (profile 0014h) which get formatted to
state "Restricted Overwrite" (profile 0013h). DVD+RW can be "de-iced"
by setting bit2 of flag. DVD-RAM and BD-RE may get formatted initially
or re-formatted to adjust their Defect Managment.
by setting bit2 of flag. Other media cannot be formatted yet.
This function usually returns while the drive is still in the process
of formatting. The formatting is done, when burn_drive_get_status()
returns BURN_DRIVE_IDLE. This may be immediately after return or may
@ -1245,15 +1236,13 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
bit4= enforce re-format of (partly) formatted media
bit5= try to disable eventual defect management
bit6= try to avoid lengthy media certification
bit7, bit8 to bit15 =
bit7 enables MMC expert application mode (else libburn
tries to choose a suitable format type):
If it is set then bit8 to bit15 contain the index of
the format to use. See burn_disc_get_formats(),
burn_disc_get_format_descr().
bit7= MMC expert application mode (else libburn tries to
choose a suitable format type):
bit8 to bit15 contain the index of the format to use. See
burn_disc_get_formats(), burn_disc_get_format_descr().
Acceptable types are: 0x00, 0x01, 0x10, 0x11, 0x13,
0x15, 0x26, 0x30, 0x31.
If bit7 is set, then bit4 is set automatically.
If bit7 is set, bit4 is set automatically.
@since 0.3.0
*/
void burn_disc_format(struct burn_drive *drive, off_t size, int flag);
@ -2205,7 +2194,7 @@ void burn_version(int *major, int *minor, int *micro);
*/
#define burn_header_version_major 0
#define burn_header_version_minor 5
#define burn_header_version_micro 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.

View File

@ -773,24 +773,11 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf)
/* >>> make this scsi_notify_error() when liberated */
if (c.sense[2]!=0) {
#ifdef NIX
char msg[160];
sprintf(msg,
"SCSI error on write(%d,%d): key=%X asc=%2.2Xh ascq=%2.2Xh",
start, len,
c.sense[2],c.sense[12],c.sense[13]);
#else /* NIX */
char msg[256];
int key, asc, ascq;
sprintf(msg, "SCSI error on write(%d,%d): ",
start, len);
scsi_error_msg(d, c.sense, 14, msg + strlen(msg),
&key, &asc, &ascq);
#endif /* !NIX */
libdax_msgs_submit(libdax_messenger, d->global_index,
0x0002011d,
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
@ -1937,9 +1924,8 @@ int mmc_set_streaming(struct burn_drive *d,
struct buffer buf;
struct command c;
int b, eff_end_lba;
char msg[256];
char msg[160];
unsigned char *pd;
int key, asc, ascq;
if (mmc_function_spy(d, "mmc_set_streaming") <= 0)
return 0;
@ -2002,8 +1988,6 @@ int mmc_set_streaming(struct burn_drive *d,
d->issue_command(d, &c);
if (c.error) {
if (c.sense[2]!=0 && !d->silent_on_scsi_error) {
#ifdef NIX
sprintf(msg,
"SCSI error on set_streaming(%d): key=%X asc=%2.2Xh ascq=%2.2Xh",
w_speed,
@ -2013,15 +1997,6 @@ int mmc_set_streaming(struct burn_drive *d,
0x00020124,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
msg, 0, 0);
#else /* NIX */
sprintf(msg,
"SCSI error on set_streaming(%d): ", w_speed);
scsi_error_msg(d, c.sense, 14, msg + strlen(msg),
&key, &asc, &ascq);
#endif /* !NIX */
}
return 0;
}
@ -2723,8 +2698,7 @@ int mmc_format_unit(struct burn_drive *d, off_t size, int flag)
int index, format_sub_type = 0, format_00_index, size_mode;
int accept_count = 0;
off_t num_of_blocks = 0, diff, format_size, i_size, format_00_max_size;
char msg[256],descr[80];
int key, asc, ascq;
char msg[160],descr[80];
int full_format_type = 0x00; /* Full Format (or 0x10 for DVD-RW ?) */
if (mmc_function_spy(d, "mmc_format_unit") <= 0)
@ -3126,8 +3100,6 @@ unsuitable_media:;
d->issue_command(d, &c);
if (c.error && !tolerate_failure) {
if (c.sense[2]!=0) {
#ifdef NIX
sprintf(msg,
"SCSI error on format_unit(%s): key=%X asc=%2.2Xh ascq=%2.2Xh",
descr,
@ -3136,13 +3108,6 @@ unsuitable_media:;
0x00020122,
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
msg, 0, 0);
#else /* NIX */
sprintf(msg, "SCSI error on format_unit(%s): ", descr);
scsi_error_msg(d, c.sense, 14, msg + strlen(msg),
&key, &asc, &ascq);
#endif /* !NIX */
}
return 0;
} else if ((!c.error) && (format_type == 0x13 || format_type == 0x15))
@ -3444,24 +3409,11 @@ int mmc_read_10(struct burn_drive *d, int start,int amount, struct buffer *buf)
c.dir = FROM_DRIVE;
d->issue_command(d, &c);
if (c.error) {
#ifdef NIX
char msg[160];
sprintf(msg,
"SCSI error on read_10(%d,%d): key=%X asc=%2.2Xh ascq=%2.2Xh",
start, amount,
c.sense[2],c.sense[12],c.sense[13]);
#else /* NIX */
char msg[256];
int key, asc, ascq;
sprintf(msg, "SCSI error on read_10(%d,%d): ", start, amount);
scsi_error_msg(d, c.sense, 14, msg + strlen(msg),
&key, &asc, &ascq);
#endif /* !NIX */
if(!d->silent_on_scsi_error)
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020144,

View File

@ -323,7 +323,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
int alignment = 2048, start, upto, chunksize = 1, err, cpy_size, i;
int sose_mem = 0, fd = -1, ret;
char msg[81], *wpt;
struct buffer buf, *buffer_mem = d->buffer;
struct buffer buf;
/*
#define Libburn_read_data_adr_logginG 1
@ -485,7 +485,7 @@ ex:;
if (fd != -1)
close(fd);
*/
d->buffer = buffer_mem;
d->buffer = NULL;
d->busy = BURN_DRIVE_IDLE;
return ret;
}

View File

@ -729,17 +729,19 @@ static int is_scsi_drive(char *fname, int *bus_no, int *host_no,
}
#ifdef CDROM_DRIVE_STATUS
/* http://developer.osdl.org/dev/robustmutexes/
if (strcmp(linux_sg_device_family,"/dev/sg%d") != 0) {
/* http://developer.osdl.org/dev/robustmutexes/
src/fusyn.hg/Documentation/ioctl/cdrom.txt */
sid_ret = ioctl(fd, CDROM_DRIVE_STATUS, 0);
if(linux_sg_enumerate_debug)
fprintf(stderr,
"ioctl(CDROM_DRIVE_STATUS) = %d , ",
sid_ret);
if (sid_ret != -1 && sid_ret != CDS_NO_INFO)
sid.scsi_type = TYPE_ROM;
else
sid_ret = -1;
sid_ret = ioctl(fd, CDROM_DRIVE_STATUS, 0);
if(linux_sg_enumerate_debug)
fprintf(stderr,
"ioctl(CDROM_DRIVE_STATUS) = %d , ",
sid_ret);
if (sid_ret != -1 && sid_ret != CDS_NO_INFO)
sid.scsi_type = TYPE_ROM;
else
sid_ret = -1;
}
#endif /* CDROM_DRIVE_STATUS */
}
@ -1128,8 +1130,7 @@ static int fname_drive_is_listed(char *fname, int flag)
/* ts A80731 : Directly open the given address.
@param flag bit0= do not complain about missing file
bit1= do not check whether drive is already listed
@param flag bit0= do not compain about missing file
*/
static int fname_enumerate(char *fname, int flag)
{
@ -1138,9 +1139,8 @@ static int fname_enumerate(char *fname, int flag)
char msg[BURN_DRIVE_ADR_LEN + 80];
struct stat stbuf;
if (!(flag & 2))
if (fname_drive_is_listed(fname, 0))
return 2;
if (fname_drive_is_listed(fname, 0))
return 2;
if (stat(fname, &stbuf) == -1) {
sprintf(msg, "File object '%s' not found", fname);
if (!(flag & 1))
@ -1183,7 +1183,7 @@ static int single_enumerate(int flag)
fname= burn_drive_whitelist_item(0, 0);
if (fname == NULL)
return 0;
ret = fname_enumerate(fname, 2);
ret = fname_enumerate(fname, 0);
if (ret <= 0) {
sprintf(msg, "Cannot access '%s' as SG_IO CDROM drive", fname);
libdax_msgs_submit(libdax_messenger, -1, 0x0002000a,
@ -1216,9 +1216,6 @@ static int proc_sys_dev_cdrom_info(char ***list, int *count, int flag)
return 1;
*count = 0;
sg_evaluate_kernel();
if (sg_kernel_age < 2) /* addresses are not suitable for kernel 2.4 */
return 1;
fp = fopen("/proc/sys/dev/cdrom/info", "r");
if (fp == NULL)
return 0;

View File

@ -117,9 +117,9 @@ int spc_wait_unit_attention(struct burn_drive *d, int max_sec, char *cmd_text,
i, ret, (unsigned) key, (unsigned) asc, (unsigned) ascq);
*/
if (ret > 0) /* ready */
if(ret > 0) /* ready */
break;
if (key!=0x2 || asc!=0x4) {
if(key!=0x2 || asc!=0x4) {
if (key == 0x2 && asc == 0x3A) {
ret = 1; /* medium not present = ok */
/* <<<
@ -568,7 +568,7 @@ void spc_sense_write_params(struct burn_drive *d)
/* ts A71128 : do not interpret reply if error */
m = d->mdata;
if (!c.error) {
if(!c.error) {
size = c.page->data[0] * 256 + c.page->data[1];
page = c.page->data + 8;
burn_print(1, "write page length 0x%x\n", page[1]);
@ -845,7 +845,7 @@ int burn_scsi_setup_drive(struct burn_drive *d, int bus_no, int host_no,
d->mdata = calloc(1, sizeof(struct scsi_mode_data));
/* ts A61007 : obsolete Assert in drive_getcaps() */
if (d->idata == NULL || d->mdata == NULL) {
if(d->idata == NULL || d->mdata == NULL) {
libdax_msgs_submit(libdax_messenger, -1, 0x00020108,
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
"Could not allocate new drive object", 0, 0);
@ -854,7 +854,7 @@ int burn_scsi_setup_drive(struct burn_drive *d, int bus_no, int host_no,
d->idata->valid = 0;
d->mdata->valid = 0;
d->mdata->speed_descriptors = NULL;
if (!(flag & 1)) {
if(!(flag & 1)) {
ret = spc_setup_drive(d);
if (ret<=0)
return ret;
@ -869,14 +869,11 @@ int burn_scsi_setup_drive(struct burn_drive *d, int bus_no, int host_no,
}
/* ts A61122 - A80829 */
/* ts A61122 */
enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
int senselen, char msg_data[161],
int senselen, char msg[161],
int *key, int *asc, int *ascq)
{
char *msg;
msg= msg_data;
*key= *asc= *ascq= -1;
if (senselen<=0 || senselen>2)
@ -886,236 +883,50 @@ enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
if (senselen<=0 || senselen>13)
*ascq = sense[13];
sprintf(msg, "[%X %2.2X %2.2X] ", *key, *asc, *ascq);
msg= msg + strlen(msg);
burn_print(12, "CONDITION: 0x%x 0x%x 0x%x on %s %s\n",
*key, *asc, *ascq, d->idata->vendor, d->idata->product);
switch (*asc) {
case 0x00:
sprintf(msg, "(No error reported by SCSI transaction)");
case 0:
sprintf(msg, "(no error reported by SCSI transaction)");
return RETRY;
case 0x02:
sprintf(msg, "Not ready");
case 2:
sprintf(msg, "not ready");
return RETRY;
case 0x04:
case 4:
sprintf(msg,
"Logical unit is in the process of becoming ready");
"logical unit is in the process of becoming ready");
return RETRY;
case 0x09:
if (*key != 4)
break;
if (*ascq == 0)
sprintf(msg, "Track following error");
else if (*ascq == 1)
sprintf(msg, "Tracking servo failure");
else if (*ascq == 2)
sprintf(msg, "Focus servo failure");
else if (*ascq == 3)
sprintf(msg, "Spindle servo failure");
else if (*ascq == 4)
sprintf(msg, "Head select fault");
else
break;
return FAIL;
case 0x0C:
if (*key == 2 && *ascq == 7)
sprintf(msg, "Write error, recovery needed");
else if (*key == 2 && *ascq == 0x0f)
sprintf(msg, "Defects in error window");
else if (*key == 3 && *ascq == 2)
sprintf(msg, "Write error, auto reallocation failed");
else if (*key == 3 && *ascq == 9)
sprintf(msg, "Write error, loss of streaming");
else if (*key == 3)
sprintf(msg, "Write error");
else
break;
return FAIL;
case 0x11:
if (*key != 3)
break;
if (*ascq == 0)
sprintf(msg, "Unrecovered read error");
else if (*ascq == 1)
sprintf(msg, "Read retries exhausted");
else if (*ascq == 2)
sprintf(msg, "Error too long to correct");
else if (*ascq == 5)
sprintf(msg, "L-EC uncorrectable error");
else if (*ascq == 6)
sprintf(msg, "CIRC uncorrectable error");
else
break;
return FAIL;
case 0x15:
if (*key != 3 && *key != 4)
break;
sprintf(msg, "Random positioning error");
return FAIL;
case 0x1a:
if (*key != 5)
break;
sprintf(msg, "Parameter list length error");
return FAIL;
case 0x1b:
if (*key != 4)
break;
sprintf(msg, "Synchronous data transfer error");
return FAIL;
case 0x20:
if (*key != 5)
break;
sprintf(msg, "Invalid command operation code");
if (*key == 5)
sprintf(msg, "bad opcode");
return FAIL;
case 0x21:
if (*key != 5)
break;
if (*ascq == 0)
sprintf(msg, "Lba out of range");
else if (*ascq == 3)
sprintf(msg, "Invalid write crossing layer jump");
else
sprintf(msg, "Invalid address");
sprintf(msg, "invalid address");
return FAIL;
case 0x24:
if (*key != 5)
if (*key == 5)
sprintf(msg, "invalid field in cdb");
else
break;
sprintf(msg, "Invalid field in cdb");
return FAIL;
case 0x26:
if (*key != 5)
break;
if (*ascq == 1)
sprintf(msg, "Parameter not supported");
else if (*ascq == 2)
sprintf(msg, "Parameter value invalid");
else
sprintf(msg, "Invalid field in parameter list");
return FAIL;
case 0x27:
if (*key != 7)
break;
sprintf(msg, "Write protected");
if (*key == 5 )
sprintf(msg, "invalid field in parameter list" );
return FAIL;
case 0x28:
if (*key != 6)
break;
if (*ascq == 0)
if (*key == 6)
sprintf(msg, "Medium may have changed");
else if (*ascq == 2)
sprintf(msg, "Format layer may have changed");
else
break;
return RETRY;
case 0x29:
if (*key != 6)
break;
if (*ascq == 0)
sprintf(msg,
"Power on, reset, or bus device reset occured");
else if (*ascq == 1)
sprintf(msg, "Power on occured");
else if (*ascq == 2)
sprintf(msg, "Bus reset occured");
else if (*ascq == 3)
sprintf(msg, "Bus device reset function occured");
else if (*ascq == 4)
sprintf(msg, "Device internal reset");
else
break;
return RETRY;
case 0x2c:
if (*key != 5)
break;
if (*ascq == 0)
sprintf(msg, "Command sequence error");
else
break;
return FAIL;
case 0x2e:
if (*key != 6)
break;
if (*ascq == 0)
sprintf(msg,
"Insufficient time for operation");
else
break;
return FAIL;
case 0x30:
if (*key != 2 && *key != 5)
break;
if (*ascq == 1)
sprintf(msg, "Cannot read medium, unknown format");
else if (*ascq == 2)
sprintf(msg,
"Cannot read medium, incompatible format");
else if (*ascq == 4)
sprintf(msg, "Cannot write medium, unknown format");
else if (*ascq == 5)
sprintf(msg,
"Cannot write medium, incompatible format");
else if (*ascq == 6)
sprintf(msg,
"Cannot format medium, incompatible medium");
else if (*ascq == 7)
sprintf(msg, "Cleaning failure");
else
sprintf(msg, "Incompatible medium installed");
return FAIL;
case 0x3A:
if (*key != 2)
break;
if (*ascq == 1)
sprintf(msg, "Medium not present, tray closed");
else if (*ascq == 2)
sprintf(msg, "Medium not present, tray open");
else if (*ascq == 3)
sprintf(msg, "Medium not present, loadable");
else
sprintf(msg, "Medium not present");
sprintf(msg, "Medium not present");
d->status = BURN_DISC_EMPTY;
return FAIL;
case 0x63:
if (*key != 5)
break;
if (*ascq == 0)
sprintf(msg,
"End of user area encountered on this track");
else if (*ascq == 1)
sprintf(msg, "Packet does not fit in available space");
else
break;
return FAIL;
case 0x64:
if (*key != 5)
break;
if (*ascq == 0)
sprintf(msg, "Illegal mode for this track");
else if (*ascq == 1)
sprintf(msg, "Invalid packet size");
else
break;
return FAIL;
case 0x72:
if (*key == 3)
sprintf(msg, "Session fixation error");
else if (*key == 5 && *ascq == 3)
sprintf(msg,
"Session fixation error, incomplete track in session");
else if (*key == 5 && *ascq == 4)
sprintf(msg,
"Empty or partially written reserved track");
else if (*key == 5 && *ascq == 5)
sprintf(msg,
"No more track reservations allowed");
else
break;
return FAIL;
}
sprintf(msg_data,
sprintf(msg,
"Failure. See mmc3r10g.pdf: Sense Key %X ASC %2.2X ASCQ %2.2X",
*key, *asc, *ascq);
return FAIL;
@ -1151,9 +962,12 @@ int scsi_notify_error(struct burn_drive *d, struct command *c,
if (d->silent_on_scsi_error)
return 1;
scsi_error_msg(d, sense, senselen, scsi_msg, &key, &asc, &ascq);
strcpy(scsi_msg, " \"");
scsi_error_msg(d, sense, senselen, scsi_msg + strlen(scsi_msg),
&key, &asc, &ascq);
strcat(scsi_msg, "\"");
if (!(flag & 1)) {
if(!(flag & 1)) {
/* SPC : TEST UNIT READY command */
if (c->opcode[0] == 0)
return 1;
@ -1164,9 +978,7 @@ int scsi_notify_error(struct burn_drive *d, struct command *c,
return 1;
}
sprintf(msg,"SCSI error condition on command %2.2Xh : ", c->opcode[0]);
#ifdef NIX
sprintf(msg,"SCSI error condition on command %2.2Xh :", c->opcode[0]);
if (key>=0)
sprintf(msg+strlen(msg), " key=%Xh", key);
if (asc>=0)
@ -1180,13 +992,6 @@ int scsi_notify_error(struct burn_drive *d, struct command *c,
ret = libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002010f,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
scsi_msg,0,0);
#else
strcat(msg, scsi_msg);
ret = libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002010f,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, msg,0,0);
#endif /* NIX */
return ret;
}

View File

@ -4,11 +4,7 @@
/* #include <a ssert.h> */
#include <stdlib.h>
/* ts A80914 : This is unneeded. Version info comes from libburn.h.
#include "v ersion.h"
*/
#include "../version.h"
#include "util.h"
#include "libburn.h"
@ -52,7 +48,13 @@ char *burn_strndup(char *s, int n)
void burn_version(int *major, int *minor, int *micro)
{
/* ts A80408 : switched from configure.ac versioning to libburn.h versioning */
*major = burn_header_version_major;
*minor = burn_header_version_minor;
*micro = burn_header_version_micro;
#ifdef burn_header_version_major
*major = burn_header_version_major;
*minor = burn_header_version_minor;
*micro = burn_header_version_micro;
#else
*major = BURN_MAJOR_VERSION;
*minor = BURN_MINOR_VERSION;
*micro = BURN_MICRO_VERSION;
#endif
}

View File

@ -1996,7 +1996,7 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
{
struct cue_sheet *sheet;
struct burn_drive *d = o->drive;
struct buffer buf, *buffer_mem = o->drive->buffer;
struct buffer buf;
struct burn_track *lt, *t;
int first = 1, i, ret, lba, nwa = 0;
off_t default_size;
@ -2206,7 +2206,6 @@ fail_wo_sync:;
d->busy = BURN_DRIVE_IDLE;
ex:;
d->do_stream_recording = 0;
d->buffer = buffer_mem;
return;
}
@ -2216,7 +2215,7 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address,
{
int alignment = 0, start, upto, chunksize, err, fd = -1, ret;
char msg[81], *rpt;
struct buffer buf, *buffer_mem = d->buffer;
struct buffer buf;
if (d->released) {
libdax_msgs_submit(libdax_messenger,
@ -2327,7 +2326,7 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address,
if(fd >= 0)
close(fd);
d->buffer = buffer_mem;
d->buffer = NULL;
d->busy = BURN_DRIVE_IDLE;
return 1;
}