Compare commits
41 Commits
ZeroFiveTw
...
ZeroFiveEi
Author | SHA1 | Date | |
---|---|---|---|
35904f5421 | |||
868310c687 | |||
57a9ad89e9 | |||
6d2b06ac0c | |||
175061615e | |||
717ad0f412 | |||
f3ea35b9b8 | |||
bb9ef6b988 | |||
aa606552eb | |||
9d99e7874a | |||
d1483a15da | |||
ed60d9a644 | |||
bd5d8e8991 | |||
bf64271c67 | |||
b0c8bbd48d | |||
2fb19dd08e | |||
2ce3199241 | |||
6fe53827da | |||
6053f3a6e3 | |||
de274ddaff | |||
92b0e145d5 | |||
4a5083739d | |||
7a8040fe9f | |||
57df15054f | |||
a57cf121d8 | |||
935239b4f9 | |||
e50cc04374 | |||
89c12404d0 | |||
78642d08ae | |||
c2c2499862 | |||
32252122b8 | |||
63a48571af | |||
006fb98aee | |||
afded80e10 | |||
fb3d2de5df | |||
c640c7954b | |||
bc30c4201a | |||
50b587a22c | |||
cd99716ab5 | |||
13bdbd3555 | |||
711c055730 |
@ -101,9 +101,9 @@ test_structest_CPPFLAGS = -Ilibburn
|
|||||||
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
test_structest_SOURCES = test/structest.c
|
test_structest_SOURCES = test/structest.c
|
||||||
|
|
||||||
## cdrskin construction site - ts A60816 - A80716
|
## cdrskin construction site - ts A60816 - A81207
|
||||||
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
||||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_5_1
|
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_5_8
|
||||||
|
|
||||||
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
||||||
|
58
README
58
README
@ -12,12 +12,6 @@ Still containing parts of
|
|||||||
Libburn. By Derek Foreman <derek@signalmarketing.com> and
|
Libburn. By Derek Foreman <derek@signalmarketing.com> and
|
||||||
Ben Jansens <xor@orodu.net>
|
Ben Jansens <xor@orodu.net>
|
||||||
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
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
|
This libburnia-project.org toplevel README (C) 2006-2008 Thomas Schmitt
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
@ -71,8 +65,11 @@ The project comprises of several more or less interdependent parts which
|
|||||||
together strive to be a usable foundation for application development.
|
together strive to be a usable foundation for application development.
|
||||||
These are libraries, language bindings, and middleware binaries which emulate
|
These are libraries, language bindings, and middleware binaries which emulate
|
||||||
classical (and valuable) Linux tools.
|
classical (and valuable) Linux tools.
|
||||||
|
Currently it is supported on Linux with kernels >= 2.4 and on FreeBSD versions
|
||||||
|
with ATAPI/CAM support enabled in the kernel, see atapicam(4).
|
||||||
|
|
||||||
Our scope is currently Linux 2.4 and 2.6 only. For ports to other systems
|
Our scope is currently Linux 2.4 or 2.6 and FreeBSD versions with ATAPI/CAM
|
||||||
|
support enabled in the kernel, see atapicam(4). For ports to other systems
|
||||||
we would need : login on a development machine resp. a live OS on CD or DVD,
|
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,
|
advise from a system person about the equivalent of Linux sg or FreeBSD CAM,
|
||||||
volunteers for testing of realistic use cases.
|
volunteers for testing of realistic use cases.
|
||||||
@ -142,8 +139,8 @@ any way and even may revoke such new features before the next release of
|
|||||||
x.y.*[02468]. As soon as it is released, a feature is promised to persist.
|
x.y.*[02468]. As soon as it is released, a feature is promised to persist.
|
||||||
|
|
||||||
SONAMES:
|
SONAMES:
|
||||||
libburn.so.4 (since 0.3.4, March 2007),
|
libburn.so.4 (since 0.3.4, March 2007),
|
||||||
libisofs.so.6 (since 0.6.2, February 2008),
|
libisofs.so.6 (since 0.6.2, February 2008),
|
||||||
libisoburn.so.1 (since 0.1.0, February 2008).
|
libisoburn.so.1 (since 0.1.0, February 2008).
|
||||||
|
|
||||||
|
|
||||||
@ -173,7 +170,7 @@ Project history as far as known to me:
|
|||||||
discontent.
|
discontent.
|
||||||
The situation first caused me to publically regret it and then - after i
|
The situation first caused me to publically regret it and then - after i
|
||||||
got the opportunity to move in with cdrskin - gave me true reason to
|
got the opportunity to move in with cdrskin - gave me true reason to
|
||||||
personally apologize to Derek Foreman, Ben Jansens and the contibutors at
|
personally apologize to Derek Foreman, Ben Jansens and the contributors at
|
||||||
icculus.org/burn. Posted to both projects:
|
icculus.org/burn. Posted to both projects:
|
||||||
http://lists.freedesktop.org/archives/libburn/2006-August/000446.html
|
http://lists.freedesktop.org/archives/libburn/2006-August/000446.html
|
||||||
http://mailman-mail1.webfaction.com/pipermail/libburn-hackers/2006-August/000024.html
|
http://mailman-mail1.webfaction.com/pipermail/libburn-hackers/2006-August/000024.html
|
||||||
@ -277,7 +274,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.
|
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
|
xorriso makes use of new libisofs features by performing incremental
|
||||||
updates of directory trees and by cutting oversized data files into
|
updates of directory trees and by cutting oversized data files into
|
||||||
pieces. A primitive single session emulation of cdrcord and mkisofs is
|
pieces. A primitive single session emulation of cdrecord and mkisofs is
|
||||||
provided.
|
provided.
|
||||||
|
|
||||||
- 10th May 2008 libburn-0.4.6 supports formatting and writing of BD-RE,
|
- 10th May 2008 libburn-0.4.6 supports formatting and writing of BD-RE,
|
||||||
@ -300,6 +297,45 @@ Project history as far as known to me:
|
|||||||
- 16th Jul 2008 libburn-0.5.0 handles systems with no /dev/sr* but only
|
- 16th Jul 2008 libburn-0.5.0 handles systems with no /dev/sr* but only
|
||||||
/dev/scd*.
|
/dev/scd*.
|
||||||
|
|
||||||
|
- 19th Jul 2008 libisoburn/xorriso-0.2.2 can do multi-session in mkisofs
|
||||||
|
and cdrecord style. xorriso now can serve underneath growisofs.
|
||||||
|
|
||||||
|
- 20th Aug 2008 libburn-0.5.2 revokes the necessity that a drive must be
|
||||||
|
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.
|
||||||
|
|
||||||
|
- 26th Nov 2008 libisofs-0.6.12 can produce a ISOLINUX isohybrid MBR on the fly
|
||||||
|
and allows to produce ISO images which resemble old mkisofs images.
|
||||||
|
|
||||||
|
- 2nd Dec 2008 libisoburn-0.3.0. xorriso now is ready for exotic character
|
||||||
|
sets, for legacy FreeBSD systems which expect an outdated Rock Ridge
|
||||||
|
signature, and for producing ISO images with MBR which boot from hard disk
|
||||||
|
or USB stick. Three minor bugs were fixed.
|
||||||
|
|
||||||
|
- 7th Dec 2008 libburn-0.5.8 prevents a SIGSEGV with wierd CD table-of-content
|
||||||
|
and improves BD-RE formatting.
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
|
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Integrated sub project of libburnia-project.org but also published via:
|
Integrated sub project of libburnia-project.org but also published via:
|
||||||
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
||||||
http://scdbackup.sourceforge.net/cdrskin-0.5.1.tar.gz
|
http://scdbackup.sourceforge.net/cdrskin-0.5.8.pl00.tar.gz
|
||||||
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -12,7 +12,8 @@ Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
|||||||
cdrskin is a limited cdrecord compatibility wrapper which allows to use
|
cdrskin is a limited cdrecord compatibility wrapper which allows to use
|
||||||
most of the libburn features from the command line.
|
most of the libburn features from the command line.
|
||||||
|
|
||||||
Currently it is only supported on Linux with kernels >= 2.4.
|
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).
|
||||||
|
|
||||||
By using this software you agree to the disclaimer at the end of this text
|
By using this software you agree to the disclaimer at the end of this text
|
||||||
"This software is provided as is. There is no warranty implied and ..."
|
"This software is provided as is. There is no warranty implied and ..."
|
||||||
@ -20,10 +21,10 @@ By using this software you agree to the disclaimer at the end of this text
|
|||||||
|
|
||||||
Compilation, First Glimpse, Installation
|
Compilation, First Glimpse, Installation
|
||||||
|
|
||||||
Obtain cdrskin-0.5.1.tar.gz, take it to a directory of your choice and do:
|
Obtain cdrskin-0.5.8.pl00.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf cdrskin-0.5.1.tar.gz
|
tar xzf cdrskin-0.5.8.pl00.tar.gz
|
||||||
cd cdrskin-0.5.1
|
cd cdrskin-0.5.8
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
|
|||||||
# My changes are in $changes , mainly in $changes/cdrskin
|
# My changes are in $changes , mainly in $changes/cdrskin
|
||||||
changes="./libburn-release"
|
changes="./libburn-release"
|
||||||
|
|
||||||
skin_release="0.5.0"
|
skin_release="0.5.8"
|
||||||
patch_level=".pl00"
|
patch_level=".pl00"
|
||||||
skin_rev="$skin_release""$patch_level"
|
skin_rev="$skin_release""$patch_level"
|
||||||
|
|
@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
|
|||||||
# My changes are in $changes , mainly in $changes/cdrskin
|
# My changes are in $changes , mainly in $changes/cdrskin
|
||||||
changes="./libburn-develop"
|
changes="./libburn-develop"
|
||||||
|
|
||||||
skin_release="0.5.1"
|
skin_release="0.5.9"
|
||||||
patch_level=""
|
patch_level=""
|
||||||
skin_rev="$skin_release""$patch_level"
|
skin_rev="$skin_release""$patch_level"
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH CDRSKIN 1 "Aug 05, 2008"
|
.TH CDRSKIN 1 "Oct 15, 2008"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -108,8 +108,9 @@ While audio tracks just contain a given time span of acoustic vibrations,
|
|||||||
data tracks may have an arbitray meaning. Nevertheless, ISO-9660 filesystems
|
data tracks may have an arbitray meaning. Nevertheless, ISO-9660 filesystems
|
||||||
are established as a format which can represent a tree of directories and
|
are established as a format which can represent a tree of directories and
|
||||||
files on all major operating systems. Such filesystem images can be
|
files on all major operating systems. Such filesystem images can be
|
||||||
produced by programs mkisofs or genisoimage. They can also be extended by
|
produced by programs mkisofs or genisoimage or xorriso.
|
||||||
follow-up tracks if prepared properly. See the man pages of said programs.
|
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.
|
cdrskin is able to fulfill the needs about their option -C.
|
||||||
.br
|
.br
|
||||||
Another type of data track content are archive formats which originally
|
Another type of data track content are archive formats which originally
|
||||||
@ -160,7 +161,8 @@ round of overwriting. Usually
|
|||||||
is the appropriate option.
|
is the appropriate option.
|
||||||
Blanking damages the previous content but does not
|
Blanking damages the previous content but does not
|
||||||
make it completely unreadable. It is no effective privacy precaution.
|
make it completely unreadable. It is no effective privacy precaution.
|
||||||
Multiple cycles of blanking and overwriting with random numbers might be.
|
Multiple cycles of blanking and overwriting with random numbers might be
|
||||||
|
needed.
|
||||||
.SS
|
.SS
|
||||||
.B Sequentially Recordable DVD Media:
|
.B Sequentially Recordable DVD Media:
|
||||||
.br
|
.br
|
||||||
@ -617,7 +619,8 @@ Note: msifile=path is actually an option of wodim and not of cdrecord.
|
|||||||
.TP
|
.TP
|
||||||
.BI \-msinfo
|
.BI \-msinfo
|
||||||
Retrieve multi-session info for preparing a follow-up session by option -C
|
Retrieve multi-session info for preparing a follow-up session by option -C
|
||||||
of programs mkisofs or genisoimage. Print result to standard output.
|
of programs mkisofs, genisoimage, or xorriso -as mkisofs.
|
||||||
|
Print result to standard output.
|
||||||
This option redirects to stderr all message output except the one of option
|
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.
|
--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.
|
The result string shall be used as argument of option -C with said programs.
|
||||||
|
@ -88,7 +88,7 @@ or
|
|||||||
|
|
||||||
/** The official program version */
|
/** The official program version */
|
||||||
#ifndef Cdrskin_prog_versioN
|
#ifndef Cdrskin_prog_versioN
|
||||||
#define Cdrskin_prog_versioN "0.5.1"
|
#define Cdrskin_prog_versioN "0.5.8"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** The official libburn interface revision to use.
|
/** The official libburn interface revision to use.
|
||||||
@ -101,7 +101,7 @@ or
|
|||||||
#define Cdrskin_libburn_minoR 5
|
#define Cdrskin_libburn_minoR 5
|
||||||
#endif
|
#endif
|
||||||
#ifndef Cdrskin_libburn_micrO
|
#ifndef Cdrskin_libburn_micrO
|
||||||
#define Cdrskin_libburn_micrO 0
|
#define Cdrskin_libburn_micrO 8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -135,44 +135,44 @@ or
|
|||||||
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
||||||
|
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_5_0
|
#ifdef Cdrskin_libburn_0_5_8
|
||||||
#define Cdrskin_libburn_versioN "0.5.0"
|
#define Cdrskin_libburn_versioN "0.5.8"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif /* Cdrskin_libburn_0_5_0 */
|
#endif /* Cdrskin_libburn_0_5_8 */
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_5_1
|
#ifdef Cdrskin_libburn_0_5_9
|
||||||
#define Cdrskin_libburn_versioN "0.5.1"
|
#define Cdrskin_libburn_versioN "0.5.9"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
|
|
||||||
/* Place novelty switch macros here.
|
/* Place novelty switch macros here.
|
||||||
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
|
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* there are no libburn novelties in 0.5.1 yet */
|
/* there are no libburn novelties in 0.5.9 yet */
|
||||||
|
|
||||||
#endif /* Cdrskin_libburn_0_5_1 */
|
#endif /* Cdrskin_libburn_0_5_9 */
|
||||||
|
|
||||||
#ifndef Cdrskin_libburn_versioN
|
#ifndef Cdrskin_libburn_versioN
|
||||||
#define Cdrskin_libburn_0_5_0
|
#define Cdrskin_libburn_0_5_8
|
||||||
#define Cdrskin_libburn_versioN "0.5.0"
|
#define Cdrskin_libburn_versioN "0.5.8"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_5_0
|
#ifdef Cdrskin_libburn_0_5_8
|
||||||
#undef Cdrskin_libburn_majoR
|
#undef Cdrskin_libburn_majoR
|
||||||
#undef Cdrskin_libburn_minoR
|
#undef Cdrskin_libburn_minoR
|
||||||
#undef Cdrskin_libburn_micrO
|
#undef Cdrskin_libburn_micrO
|
||||||
#define Cdrskin_libburn_majoR 0
|
#define Cdrskin_libburn_majoR 0
|
||||||
#define Cdrskin_libburn_minoR 5
|
#define Cdrskin_libburn_minoR 5
|
||||||
#define Cdrskin_libburn_micrO 0
|
#define Cdrskin_libburn_micrO 8
|
||||||
#endif
|
#endif
|
||||||
#ifdef Cdrskin_libburn_0_5_1
|
#ifdef Cdrskin_libburn_0_5_9
|
||||||
#undef Cdrskin_libburn_majoR
|
#undef Cdrskin_libburn_majoR
|
||||||
#undef Cdrskin_libburn_minoR
|
#undef Cdrskin_libburn_minoR
|
||||||
#undef Cdrskin_libburn_micrO
|
#undef Cdrskin_libburn_micrO
|
||||||
#define Cdrskin_libburn_majoR 0
|
#define Cdrskin_libburn_majoR 0
|
||||||
#define Cdrskin_libburn_minoR 5
|
#define Cdrskin_libburn_minoR 5
|
||||||
#define Cdrskin_libburn_micrO 1
|
#define Cdrskin_libburn_micrO 9
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ or
|
|||||||
/* 0.4.8 */
|
/* 0.4.8 */
|
||||||
/* Bug fix release for write_start_address=... on DVD-RAM and BD-RE */
|
/* Bug fix release for write_start_address=... on DVD-RAM and BD-RE */
|
||||||
|
|
||||||
/* 0.5.0 */
|
/* 0.5.0 , 0.5.2 , 0.5.4 , 0.5.6 , 0.5.8 */
|
||||||
/* novel libburn features are transparent to cdrskin */
|
/* novel libburn features are transparent to cdrskin */
|
||||||
|
|
||||||
|
|
||||||
@ -3150,7 +3150,7 @@ struct CdrskiN {
|
|||||||
bit10= format to maximum available size
|
bit10= format to maximum available size
|
||||||
bit11= - reserved -
|
bit11= - reserved -
|
||||||
bit12= - reserved -
|
bit12= - reserved -
|
||||||
bit13= - reserved -
|
bit13= try to disable eventual defect management
|
||||||
bit14= - reserved -
|
bit14= - reserved -
|
||||||
bit15= format by index
|
bit15= format by index
|
||||||
2=deformat_sequential (blank_fast might matter)
|
2=deformat_sequential (blank_fast might matter)
|
||||||
@ -5508,7 +5508,7 @@ thank_you_for_patience:;
|
|||||||
if(skin->is_writing)
|
if(skin->is_writing)
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\rcdrskin: thank you for being patient since %.f seconds ",
|
"\rcdrskin: thank you for being patient for %.f seconds ",
|
||||||
elapsed_total_time);
|
elapsed_total_time);
|
||||||
}
|
}
|
||||||
advance_interval= 1;
|
advance_interval= 1;
|
||||||
|
@ -47,6 +47,8 @@ and to MMC-5 for DVD or BD).
|
|||||||
<DT>Linux with kernel 2.4 or higher (and libc, of course) :</DT>
|
<DT>Linux with kernel 2.4 or higher (and libc, of course) :</DT>
|
||||||
<DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD>
|
<DD>With kernel 2.4 an ATA drive has to be under ide-scsi emulation.</DD>
|
||||||
<DD>With kernel 2.6 the drive should not be under ide-scsi.</DD>
|
<DD>With kernel 2.6 the drive should not be under ide-scsi.</DD>
|
||||||
|
<DT>or FreeBSD (with libc, of course) :</DT>
|
||||||
|
<DD>ATAPI/CAM support has to be enabled in the kernel, see atapicam(4).</DD>
|
||||||
<DT>libpthread</DT>
|
<DT>libpthread</DT>
|
||||||
<DD>is supposed to be a standard system component.</DD>
|
<DD>is supposed to be a standard system component.</DD>
|
||||||
</DL>
|
</DL>
|
||||||
@ -57,15 +59,18 @@ and to MMC-5 for DVD or BD).
|
|||||||
GPL software included:<BR>
|
GPL software included:<BR>
|
||||||
</H2>
|
</H2>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>libburn-0.5.0</DT>
|
<DT>libburn-0.5.8</DT>
|
||||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||||
furthered since August 2006 by Thomas Schmitt from team of libburnia-project.org)</DD>
|
developed and maintained since August 2006 by
|
||||||
|
Thomas Schmitt from team of libburnia-project.org)
|
||||||
|
</DD>
|
||||||
<DD>transfers data to CD, DVD, BD-RE</DD>
|
<DD>transfers data to CD, DVD, BD-RE</DD>
|
||||||
</DL>
|
</DL>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
This program system has been tested on Intel/AMD Linux systems only.<BR>
|
This program system has been tested on Intel/AMD Linux and FreeBSD systems
|
||||||
|
only.<BR>
|
||||||
Ports to other usable systems are appreciated. Reports are welcome.
|
Ports to other usable systems are appreciated. Reports are welcome.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
@ -186,8 +191,8 @@ or to do experiments on BD-R media.
|
|||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>Download as source code (see README):</DT>
|
<DT>Download as source code (see README):</DT>
|
||||||
<DD><A HREF="cdrskin-0.5.0.pl00.tar.gz">cdrskin-0.5.0.pl00.tar.gz</A>
|
<DD><A HREF="cdrskin-0.5.8.pl00.tar.gz">cdrskin-0.5.8.pl00.tar.gz</A>
|
||||||
(730 KB).
|
(740 KB).
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
The cdrskin tarballs are source code identical with libburn releases
|
The cdrskin tarballs are source code identical with libburn releases
|
||||||
@ -236,17 +241,22 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
|||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Enhancements towards previous stable version cdrskin-0.4.8.pl00:
|
Enhancements towards previous stable version cdrskin-0.5.6.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>Ability to use /dev/scdN as fallback if /dev/srN does not exist</LI>
|
<LI>Improvements about BD-RE formatting</LI>
|
||||||
<!--
|
<!--
|
||||||
<LI>none</LI>
|
<LI>none</LI>
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
Bug fixes towards cdrskin-0.4.8.pl00:
|
Bug fixes towards cdrskin-0.5.6.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>Option drive_scsi_dev_family=scd lead to buffer overflow</LI>
|
<LI>
|
||||||
|
A session without leadout entry on CD caused a SIGSEGV by NULL
|
||||||
|
</LI>
|
||||||
|
<!--
|
||||||
|
<LI>none</LI>
|
||||||
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
</P>
|
</P>
|
||||||
@ -255,21 +265,20 @@ Bug fixes towards cdrskin-0.4.8.pl00:
|
|||||||
|
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Development snapshot, version 0.5.1 :</H3></DT>
|
<DT><H3>Development snapshot, version 0.5.9 :</H3></DT>
|
||||||
<DD>Enhancements towards current stable version 0.5.0.pl00:
|
<DD>Enhancements towards current stable version 0.5.8.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<!--
|
<!--
|
||||||
<LI>none yet</LI>
|
|
||||||
-->
|
-->
|
||||||
<LI>Larger set of possibly acceptable drive device file names</LI>
|
<LI>none yet</LI>
|
||||||
|
|
||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DD><A HREF="README_cdrskin_devel">README 0.5.1</A>
|
<DD><A HREF="README_cdrskin_devel">README 0.5.9</A>
|
||||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.5.1 --help</A></DD>
|
<DD><A HREF="cdrskin__help_devel">cdrskin_0.5.9 --help</A></DD>
|
||||||
<DD><A HREF="cdrskin_help_devel">cdrskin_0.5.1 -help</A></DD>
|
<DD><A HREF="cdrskin_help_devel">cdrskin_0.5.9 -help</A></DD>
|
||||||
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.5.1)</A></DD>
|
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.5.9)</A></DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
||||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
||||||
@ -289,8 +298,8 @@ admins with full system souvereignty.</DT>
|
|||||||
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
<A HREF="cdrskin-0.5.1.tar.gz">cdrskin-0.5.1.tar.gz</A>
|
<A HREF="cdrskin-0.5.9.tar.gz">cdrskin-0.5.9.tar.gz</A>
|
||||||
(730 KB).
|
(740 KB).
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<!-- This is not offered any more since spring 2008
|
<!-- This is not offered any more since spring 2008
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2008.08.19.123513"
|
#define Cdrskin_timestamP "2008.12.07.140001"
|
||||||
|
@ -5646,13 +5646,13 @@ Updated cdrskin tarball generator
|
|||||||
cdrskin/changelog.txt
|
cdrskin/changelog.txt
|
||||||
Documented changes and release timestamp
|
Documented changes and release timestamp
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.5.0 - 2008.07.16.070001
|
------------------------------ release - cdrskin-0.5.0.pl00 - 2008.07.16.070001
|
||||||
* Ability to use /dev/scd as fallback if /dev/sr does not exist
|
* Ability to use /dev/scd as fallback if /dev/sr does not exist
|
||||||
* Bug fix: option drive_scsi_dev_family=scd lead to buffer overflow
|
* Bug fix: option drive_scsi_dev_family=scd lead to buffer overflow
|
||||||
* New API call burn_fifo_peek_data()
|
* New API call burn_fifo_peek_data()
|
||||||
|
|
||||||
|
|
||||||
[]
|
2008.07.16.090816 [1930]
|
||||||
Makefile.am
|
Makefile.am
|
||||||
configure.ac
|
configure.ac
|
||||||
README
|
README
|
||||||
@ -5664,20 +5664,417 @@ cdrskin/cdrskin_timestamp.h
|
|||||||
cdrskin/cdrskin_eng.html
|
cdrskin/cdrskin_eng.html
|
||||||
Made number transition to 0.5.1 and activated development documentation
|
Made number transition to 0.5.1 and activated development documentation
|
||||||
|
|
||||||
[]
|
16 Jul 2008 [1931]
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_4_8
|
- cdrskin/add_ts_changes_to_libburn_0_4_8
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_4_9
|
- cdrskin/add_ts_changes_to_libburn_0_4_9
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_5_0
|
+ 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_1
|
||||||
Updated cdrskin tarball generator
|
Updated cdrskin tarball generator
|
||||||
|
|
||||||
[]
|
16 Jul 2008 [1932]
|
||||||
cdrskin/changelog.txt
|
cdrskin/changelog.txt
|
||||||
Documented changes and release timestamp
|
Documented changes and release timestamp
|
||||||
|
|
||||||
|
------------------------------------ cycle - cdrskin-0.5.1 - 2008.07.14.164528
|
||||||
|
|
||||||
|
|
||||||
|
2008.08.01.101053 [1954]
|
||||||
|
libburn/drive.h
|
||||||
|
libburn/drive.c
|
||||||
|
libburn/sg-linux.c
|
||||||
|
Avoiding drive scan if single drive is given
|
||||||
|
|
||||||
|
2008.08.05.175930 [1963]
|
||||||
|
libburn/os-linux.h
|
||||||
|
libburn/drive.h
|
||||||
|
libburn/drive.c
|
||||||
|
libburn/sg-linux.c
|
||||||
|
libburn/libdax_msgs.h
|
||||||
|
cdrskin/cdrskin.1
|
||||||
|
Taking into respect drive list from /proc/sys/dev/cdrom/info
|
||||||
|
|
||||||
|
5 Aug 2008 [1964]
|
||||||
|
cdrskin/cdrskin_eng.html
|
||||||
|
Updated for next 0.5.1 cycle
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.5.1 -
|
------------------------------------ cycle - cdrskin-0.5.1 -
|
||||||
------------------------------------ cycle - cdrskin-0.5.1 -
|
* Larger set of possibly acceptable drive device file names
|
||||||
|
|
||||||
|
|
||||||
|
2008.08.09.071742 [1975]
|
||||||
|
libburn/mmc.c
|
||||||
|
libburn/structure.h
|
||||||
|
libburn/structure.c
|
||||||
|
CD burn_toc_entries now bear extension_valid data
|
||||||
|
|
||||||
|
2008.08.09.071854 [1976]
|
||||||
|
libburn/libburn.h
|
||||||
|
libburn/read.c
|
||||||
|
New flag bit2 with burn_read_data()
|
||||||
|
|
||||||
|
2008.08.19.122535 [1991]
|
||||||
|
libburn/libburn.h
|
||||||
|
API clarification about CD burn_toc_entries
|
||||||
|
|
||||||
|
2008.08.19.123513 [1992]
|
||||||
|
libburn/structure.c
|
||||||
|
Reacted on harmless compiler warning
|
||||||
|
|
||||||
|
------------------------------------ cycle - cdrskin-0.5.1 - 2008.08.19.123513
|
||||||
|
|
||||||
|
2008.08.20.080001 [1994]
|
||||||
|
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.2 and activated development documentation
|
||||||
|
|
||||||
|
20 Aug 2008 [1995]
|
||||||
|
- 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 [1996]
|
||||||
|
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 [2185]
|
||||||
|
cdrskin/changelog.txt
|
||||||
|
Documented changes and release timestamp
|
||||||
|
|
||||||
|
12 Nov 2008 [2186]
|
||||||
|
cdrskin/cdrskin.c
|
||||||
|
Corrected wrong version number of cdrskin
|
||||||
|
|
||||||
|
------------------------------ release - cdrskin-0.5.6.pl00 - 2008.11.12.120001
|
||||||
|
* Bug fix: libburn fifo thread was not aborted when burn run was aborted
|
||||||
|
which could lead to use of freed memory
|
||||||
|
|
||||||
|
|
||||||
|
2008.11.12.121832 [2187]
|
||||||
|
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.7
|
||||||
|
|
||||||
|
12 Nov 2008 [2188]
|
||||||
|
- 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 [2189]
|
||||||
|
cdrskin/changelog.txt
|
||||||
|
Documented changes and release timestamp
|
||||||
|
|
||||||
|
------------------------------------ cycle - cdrskin-0.5.7 - 2008.11.12.130026
|
||||||
|
|
||||||
|
12 Nov 2008 [2191]
|
||||||
|
svn move \
|
||||||
|
http://svn.libburnia-project.org/libburn/"$svn_name" \
|
||||||
|
http://svn.libburnia-project.org/libburn/"$tag_name"
|
||||||
|
libburn release 0.5.6 is ready
|
||||||
|
|
||||||
|
2008.11.15.220652 [2197]
|
||||||
|
libburn/sg-freebsd.c
|
||||||
|
libburn/sg-freebsd-port.c
|
||||||
|
Removed remark that use of statvfs() was untested with FreeBSD
|
||||||
|
|
||||||
|
21 Nov 2008 [2208]
|
||||||
|
README
|
||||||
|
cdrskin/README
|
||||||
|
cdrskin/cdrskin_eng.html
|
||||||
|
Mentioned FreeBSD peculiarities in our docs
|
||||||
|
|
||||||
|
2008.11.26.210608 [2213]
|
||||||
|
libburn/structure.c
|
||||||
|
Added tests against the SIGSEGV of ticket 146
|
||||||
|
|
||||||
|
2008.11.27.081027 [2214]
|
||||||
|
libburn/libdax_msgs.h
|
||||||
|
libburn/structure.c
|
||||||
|
Truncating eventually detected damaged CD table-of-content
|
||||||
|
|
||||||
|
------------------------------------ cycle - cdrskin-0.5.7 - 2008.11.27.081027
|
||||||
|
* Bug fix: Session without leadout entry on CD caused SIGSEGV
|
||||||
|
|
||||||
|
|
||||||
|
2008.11.27.172124 [2215]
|
||||||
|
libburn/libdax_msgs.h
|
||||||
|
libburn/structure.c
|
||||||
|
Changed error severity with TOC truncation to MISHAP
|
||||||
|
|
||||||
|
2008.11.29.140115 [2217]
|
||||||
|
libburn/spc.c
|
||||||
|
Translating ASC=0x31 formatting error messages, reporting command names
|
||||||
|
|
||||||
|
2008.11.29.140404 [2218]
|
||||||
|
libburn/mmc.c
|
||||||
|
Circumventing BD-RE Quick Certification refusal of LG GGW-H20L YL03
|
||||||
|
|
||||||
|
------------------------------------ cycle - cdrskin-0.5.7 - 2008.11.29.140404
|
||||||
|
|
||||||
|
|
||||||
|
2008.12.03.085219 [2239]
|
||||||
|
libburn/mmc.c
|
||||||
|
libburn/structure.c
|
||||||
|
libburn/libdax_msgs.h
|
||||||
|
Defaulting sessions without leadout entry
|
||||||
|
|
||||||
|
------------------------------------ cycle - cdrskin-0.5.7 - 2008.12.03.085219
|
||||||
|
|
||||||
|
|
||||||
|
Dec 07 2008 [2248]
|
||||||
|
svn copy http://svn.libburnia-project.org/libburn/trunk
|
||||||
|
http://svn.libburnia-project.org/libburn/branches/ZeroFiveEight
|
||||||
|
Preparing for libburn-0.5.8
|
||||||
|
|
||||||
|
2008.12.07.140001 [2249]
|
||||||
|
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.8
|
||||||
|
|
||||||
|
Dec 07 2008 [2250]
|
||||||
|
- cdrskin/add_ts_changes_to_libburn_0_5_6
|
||||||
|
- cdrskin/add_ts_changes_to_libburn_0_5_7
|
||||||
|
+ cdrskin/add_ts_changes_to_libburn_0_5_8
|
||||||
|
+ cdrskin/add_ts_changes_to_libburn_0_5_9
|
||||||
|
Updated cdrskin tarball generator
|
||||||
|
|
||||||
|
Dec 07 2008 []
|
||||||
|
cdrskin/changelog.txt
|
||||||
|
Documented changes and release timestamp
|
||||||
|
|
||||||
|
------------------------------------ cycle - cdrskin-0.5.8 - 2008.12.07.140001
|
||||||
|
* Bug fix: A session without leadout entry on CD caused a SIGSEGV by NULL
|
||||||
|
* Improvements about BD-RE formatting
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------ cycle - cdrskin-0.5.9 -
|
||||||
|
------------------------------------ cycle - cdrskin-0.5.9 -
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
TODO
|
TODO
|
||||||
@ -5686,6 +6083,15 @@ Documented changes and release timestamp
|
|||||||
|
|
||||||
--------------------------------- bugs -------------------------------------
|
--------------------------------- 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
|
||||||
|
pointer in struct burn_drive and let it point to
|
||||||
|
their private memory.
|
||||||
|
Of course, any problem is due to faulty application
|
||||||
|
... but then it is really hard to detect.)
|
||||||
|
|
||||||
- Why are DVD+R tracks labeled "invisible" by dvd+rw-mediainfo ?
|
- Why are DVD+R tracks labeled "invisible" by dvd+rw-mediainfo ?
|
||||||
Why does the DVD drive only show the first session ?
|
Why does the DVD drive only show the first session ?
|
||||||
@ -5699,7 +6105,14 @@ READ TRACK INFORMATION[#5]:
|
|||||||
|
|
||||||
------------------------------ end of bugs ---------------------------------
|
------------------------------ end of bugs ---------------------------------
|
||||||
|
|
||||||
Overhaul libburn drive scan and single drive opening
|
? Provide an option to open track source file O_DIRECT ?
|
||||||
|
(needs read chunks much larger than 2 kB)
|
||||||
|
|
||||||
|
interpret feature 0023h byte 4 for BD-RE formatting capabilities
|
||||||
|
|
||||||
|
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
|
Provide DVD+R DL layer break setter
|
||||||
|
|
||||||
@ -5743,10 +6156,6 @@ http://developer.osdl.org/dev/robustmutexes/src/fusyn.hg/Documentation/ioctl/cdr
|
|||||||
[]
|
[]
|
||||||
Convert burn_print() into libdax_msgs_submit()
|
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)
|
Clear outdated persistent read buffer after small CD image was read (ticket 57)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
debug_opts="-O2"
|
debug_opts="-O2"
|
||||||
def_opts=
|
def_opts=
|
||||||
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
||||||
libvers="-DCdrskin_libburn_0_5_1"
|
libvers="-DCdrskin_libburn_0_5_8"
|
||||||
cleanup_src_or_obj="libburn/cleanup.o"
|
cleanup_src_or_obj="libburn/cleanup.o"
|
||||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||||
@ -33,15 +33,15 @@ do
|
|||||||
libdax_audioxtr_o=
|
libdax_audioxtr_o=
|
||||||
libdax_msgs_o="libburn/message.o"
|
libdax_msgs_o="libburn/message.o"
|
||||||
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
||||||
elif test "$i" = "-libburn_0_5_0"
|
elif test "$i" = "-libburn_0_5_8"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_0_5_0"
|
libvers="-DCdrskin_libburn_0_5_8"
|
||||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||||
cleanup_src_or_obj="libburn/cleanup.o"
|
cleanup_src_or_obj="libburn/cleanup.o"
|
||||||
elif test "$i" = "-libburn_svn"
|
elif test "$i" = "-libburn_svn"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_0_5_1"
|
libvers="-DCdrskin_libburn_0_5_9"
|
||||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||||
cleanup_src_or_obj="libburn/cleanup.o"
|
cleanup_src_or_obj="libburn/cleanup.o"
|
||||||
@ -76,7 +76,7 @@ do
|
|||||||
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
||||||
echo " -compile_dewav compile program test/dewav without libburn."
|
echo " -compile_dewav compile program test/dewav without libburn."
|
||||||
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
|
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
|
||||||
echo " -libburn_0_5_0 set macro to match libburn-0.5.0"
|
echo " -libburn_0_5_8 set macro to match libburn-0.5.8"
|
||||||
echo " -libburn_svn set macro to match current libburn-SVN."
|
echo " -libburn_svn set macro to match current libburn-SVN."
|
||||||
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
|
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
|
||||||
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
||||||
|
22
configure.ac
22
configure.ac
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([libburn], [0.5.1], [http://libburnia-project.org])
|
AC_INIT([libburn], [0.5.8], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -7,7 +7,7 @@ AC_CANONICAL_TARGET
|
|||||||
|
|
||||||
AM_INIT_AUTOMAKE([subdir-objects])
|
AM_INIT_AUTOMAKE([subdir-objects])
|
||||||
|
|
||||||
dnl Notes by ts A71207 - A80126 :
|
dnl Notes by ts A71207 - A81111 :
|
||||||
dnl
|
dnl
|
||||||
dnl Regrettably the meaning of the various version types was misunderstood
|
dnl Regrettably the meaning of the various version types was misunderstood
|
||||||
dnl before version 0.4.1.
|
dnl before version 0.4.1.
|
||||||
@ -63,6 +63,10 @@ dnl 0.4.4 = libburn.so.4.9.0
|
|||||||
dnl 0.4.6 = libburn.so.4.11.0
|
dnl 0.4.6 = libburn.so.4.11.0
|
||||||
dnl 0.4.8 = libburn.so.4.13.0
|
dnl 0.4.8 = libburn.so.4.13.0
|
||||||
dnl 0.5.0 = libburn.so.4.15.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 0.5.8 = libburn.so.4.23.0
|
||||||
dnl
|
dnl
|
||||||
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
|
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
|
||||||
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
|
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
|
||||||
@ -88,7 +92,7 @@ dnl
|
|||||||
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
|
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
|
||||||
BURN_MAJOR_VERSION=0
|
BURN_MAJOR_VERSION=0
|
||||||
BURN_MINOR_VERSION=5
|
BURN_MINOR_VERSION=5
|
||||||
BURN_MICRO_VERSION=1
|
BURN_MICRO_VERSION=8
|
||||||
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||||
|
|
||||||
AC_SUBST(BURN_MAJOR_VERSION)
|
AC_SUBST(BURN_MAJOR_VERSION)
|
||||||
@ -99,15 +103,15 @@ AC_SUBST(BURN_VERSION)
|
|||||||
dnl Libtool versioning
|
dnl Libtool versioning
|
||||||
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||||
dnl
|
dnl
|
||||||
dnl ts A80716
|
dnl ts A81207
|
||||||
dnl ### This is the release version libburn-0.5.0 = libburn.so.4.15.0
|
dnl This is the release version libburn-0.5.8 = libburn.so.4.23.0
|
||||||
dnl This is the development version after above release version
|
dnl ### This is the development version after above release version
|
||||||
dnl LT_CURRENT++, LT_AGE++ has not yet happened.
|
dnl LT_CURRENT++, LT_AGE++ has not yet happened.
|
||||||
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||||
dnl
|
dnl
|
||||||
dnl SONAME = 19 - 15 = 4 . Library name = libburn.so.4.15.0
|
dnl SONAME = 27 - 23 = 4 . Library name = libburn.so.4.23.0
|
||||||
LT_CURRENT=19
|
LT_CURRENT=27
|
||||||
LT_AGE=15
|
LT_AGE=23
|
||||||
LT_REVISION=0
|
LT_REVISION=0
|
||||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||||
|
|
||||||
|
@ -432,6 +432,10 @@ The recipes described here are depending on formatting state:
|
|||||||
- DVD-RAM and BD-RE formatting
|
- DVD-RAM and BD-RE formatting
|
||||||
- DVD-RAM and BD-RE speed tuning
|
- 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 :
|
Overwriting in general :
|
||||||
|
|
||||||
@ -522,7 +526,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.
|
This is the state of previously unused DVD+RW media.
|
||||||
|
|
||||||
@ -762,6 +766,76 @@ Nevertheless it worked on all tested drives is proper alignment was observed.
|
|||||||
(mmc5r03c.pdf 5.4.13, 6.45)
|
(mmc5r03c.pdf 5.4.13, 6.45)
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
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).
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
@ -38,7 +38,7 @@ PROJECT_NUMBER = @PACKAGE_VERSION@
|
|||||||
# If a relative path is entered, it will be relative to the location
|
# 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.
|
# where doxygen was started. If left blank the current directory will be used.
|
||||||
|
|
||||||
OUTPUT_DIRECTORY =
|
OUTPUT_DIRECTORY = @abs_top_builddir@
|
||||||
|
|
||||||
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
|
# 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
|
# 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
|
# 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.
|
# to NO the shortest path that makes the file name unique will be used.
|
||||||
|
|
||||||
FULL_PATH_NAMES = YES
|
FULL_PATH_NAMES = NO
|
||||||
|
|
||||||
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
|
# 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
|
# can be used to strip a user-defined part of the path. Stripping is
|
||||||
@ -113,7 +113,7 @@ FULL_PATH_NAMES = YES
|
|||||||
# If left blank the directory from which doxygen is run is used as the
|
# If left blank the directory from which doxygen is run is used as the
|
||||||
# path to strip.
|
# path to strip.
|
||||||
|
|
||||||
STRIP_FROM_PATH = @top_srcdir@
|
STRIP_FROM_PATH =
|
||||||
|
|
||||||
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
|
# 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
|
# the path mentioned in the documentation of a class, which tells
|
||||||
|
@ -25,9 +25,9 @@
|
|||||||
#include "drive.h"
|
#include "drive.h"
|
||||||
#include "write.h"
|
#include "write.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
#include "file.h"
|
||||||
#include "async.h"
|
#include "async.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "file.h"
|
|
||||||
#include "back_hacks.h"
|
#include "back_hacks.h"
|
||||||
|
|
||||||
#include <pthread.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");
|
strcpy(reasons, "Write job parameters are unsuitable:\n");
|
||||||
if (burn_precheck_write(opts, disc, reasons + strlen(reasons), 1)
|
if (burn_precheck_write(opts, disc, reasons + strlen(reasons), 1)
|
||||||
== BURN_WRITE_NONE) {
|
<= 0) {
|
||||||
libdax_msgs_submit(libdax_messenger,
|
libdax_msgs_submit(libdax_messenger,
|
||||||
opts->drive->global_index, 0x00020139,
|
opts->drive->global_index, 0x00020139,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
@ -518,6 +518,12 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
|||||||
|
|
||||||
static void *fifo_worker_func(struct w_list *w)
|
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);
|
burn_fifo_source_shoveller(w->u.fifo.source, w->u.fifo.flag);
|
||||||
remove_worker(pthread_self());
|
remove_worker(pthread_self());
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -547,6 +553,27 @@ 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
|
#ifdef Libburn_has_burn_async_join_alL
|
||||||
|
|
||||||
/* ts A71019 : never used */
|
/* ts A71019 : never used */
|
||||||
|
@ -10,5 +10,9 @@ struct burn_write_opts;
|
|||||||
/* To be called when the first read() call comes to a fifo */
|
/* To be called when the first read() call comes to a fifo */
|
||||||
int burn_fifo_start(struct burn_source *source, int flag);
|
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 */
|
#endif /* BURN__ASYNC_H */
|
||||||
|
@ -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;
|
int ret, buf_secs, err, i, stages = 1, pbase, pfill, pseudo_sector;
|
||||||
off_t num_bufs;
|
off_t num_bufs;
|
||||||
char msg[80];
|
char msg[80];
|
||||||
struct buffer buf;
|
struct buffer buf, *buf_mem = d->buffer;
|
||||||
|
|
||||||
/* reset the progress */
|
/* reset the progress */
|
||||||
d->progress.session = 0;
|
d->progress.session = 0;
|
||||||
@ -706,7 +706,7 @@ void burn_disc_format_sync(struct burn_drive *d, off_t size, int flag)
|
|||||||
ex:;
|
ex:;
|
||||||
d->progress.sector = 0x10000;
|
d->progress.sector = 0x10000;
|
||||||
d->busy = BURN_DRIVE_IDLE;
|
d->busy = BURN_DRIVE_IDLE;
|
||||||
d->buffer = NULL;
|
d->buffer = buf_mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "source.h"
|
#include "source.h"
|
||||||
#include "libburn.h"
|
#include "libburn.h"
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
@ -307,6 +309,7 @@ static void fifo_free(struct burn_source *source)
|
|||||||
{
|
{
|
||||||
struct burn_source_fifo *fs = source->data;
|
struct burn_source_fifo *fs = source->data;
|
||||||
|
|
||||||
|
burn_fifo_abort(fs, 0);
|
||||||
if (fs->inp != NULL)
|
if (fs->inp != NULL)
|
||||||
burn_source_free(fs->inp);
|
burn_source_free(fs->inp);
|
||||||
if (fs->buf != NULL)
|
if (fs->buf != NULL)
|
||||||
@ -320,9 +323,12 @@ int burn_fifo_source_shoveller(struct burn_source *source, int flag)
|
|||||||
struct burn_source_fifo *fs = source->data;
|
struct burn_source_fifo *fs = source->data;
|
||||||
int ret, bufsize, diff, wpos, rpos, trans_end, free_bytes;
|
int ret, bufsize, diff, wpos, rpos, trans_end, free_bytes;
|
||||||
char *bufpt;
|
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_pid = getpid();
|
||||||
fs->thread_pid_valid = 1;
|
fs->thread_is_valid = 1;
|
||||||
|
|
||||||
bufsize = fs->chunksize * fs->chunks;
|
bufsize = fs->chunksize * fs->chunks;
|
||||||
while (!fs->end_of_consumption) {
|
while (!fs->end_of_consumption) {
|
||||||
@ -430,6 +436,8 @@ int burn_fifo_source_shoveller(struct burn_source *source, int flag)
|
|||||||
free(fs->buf); /* Give up fifo buffer. Next fifo might start soon. */
|
free(fs->buf); /* Give up fifo buffer. Next fifo might start soon. */
|
||||||
fs->buf = NULL;
|
fs->buf = NULL;
|
||||||
|
|
||||||
|
fs->thread_handle= NULL;
|
||||||
|
fs->thread_is_valid = 0;
|
||||||
return (fs->input_error == 0);
|
return (fs->input_error == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,8 +473,9 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
|
|||||||
if (fs == NULL)
|
if (fs == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
fs->is_started = 0;
|
fs->is_started = 0;
|
||||||
|
fs->thread_handle = NULL;
|
||||||
fs->thread_pid = 0;
|
fs->thread_pid = 0;
|
||||||
fs->thread_pid_valid = 0;
|
fs->thread_is_valid = 0;
|
||||||
fs->inp = NULL; /* set later */
|
fs->inp = NULL; /* set later */
|
||||||
fs->chunksize = chunksize;
|
fs->chunksize = chunksize;
|
||||||
fs->chunks = chunks;
|
fs->chunks = chunks;
|
||||||
|
@ -29,8 +29,9 @@ struct burn_source_fifo {
|
|||||||
*/
|
*/
|
||||||
int is_started;
|
int is_started;
|
||||||
|
|
||||||
|
void *thread_handle; /* actually a pointer to a thread_t */
|
||||||
int thread_pid;
|
int thread_pid;
|
||||||
int thread_pid_valid;
|
int thread_is_valid;
|
||||||
|
|
||||||
/* the burn_source for which this fifo is acting as proxy */
|
/* the burn_source for which this fifo is acting as proxy */
|
||||||
struct burn_source *inp;
|
struct burn_source *inp;
|
||||||
|
@ -384,6 +384,13 @@ struct burn_source {
|
|||||||
The size of a sector depends on BURN_MODE_*. The known range is
|
The size of a sector depends on BURN_MODE_*. The known range is
|
||||||
2048 to 2352.
|
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:
|
IMPORTANT:
|
||||||
If this function pointer is NULL, then the struct burn_source is of
|
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)().
|
version >= 1 and the job of .(*read)() is done by .(*read_xt)().
|
||||||
@ -813,7 +820,8 @@ void burn_allow_untested_profiles(int yes);
|
|||||||
If the path does not exist in the filesystem yet, it is attempted to create
|
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.
|
it as a regular file as soon as write operations are started.
|
||||||
|
|
||||||
The capabilities of role 3 resemble a blank DVD-R.
|
The capabilities of role 3 resemble a blank DVD-R. Nevertheless each
|
||||||
|
burn_disc_write() run may only write a single track.
|
||||||
|
|
||||||
One may distinguish pseudo-drives from MMC drives by call
|
One may distinguish pseudo-drives from MMC drives by call
|
||||||
burn_drive_get_drive_role().
|
burn_drive_get_drive_role().
|
||||||
@ -1212,7 +1220,8 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
|
|||||||
/** Format media for use with libburn. This currently applies to DVD-RW
|
/** Format media for use with libburn. This currently applies to DVD-RW
|
||||||
in state "Sequential Recording" (profile 0014h) which get formatted to
|
in state "Sequential Recording" (profile 0014h) which get formatted to
|
||||||
state "Restricted Overwrite" (profile 0013h). DVD+RW can be "de-iced"
|
state "Restricted Overwrite" (profile 0013h). DVD+RW can be "de-iced"
|
||||||
by setting bit2 of flag. Other media cannot be formatted yet.
|
by setting bit2 of flag. DVD-RAM and BD-RE may get formatted initially
|
||||||
|
or re-formatted to adjust their Defect Managment.
|
||||||
This function usually returns while the drive is still in the process
|
This function usually returns while the drive is still in the process
|
||||||
of formatting. The formatting is done, when burn_drive_get_status()
|
of formatting. The formatting is done, when burn_drive_get_status()
|
||||||
returns BURN_DRIVE_IDLE. This may be immediately after return or may
|
returns BURN_DRIVE_IDLE. This may be immediately after return or may
|
||||||
@ -1236,13 +1245,15 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
|
|||||||
bit4= enforce re-format of (partly) formatted media
|
bit4= enforce re-format of (partly) formatted media
|
||||||
bit5= try to disable eventual defect management
|
bit5= try to disable eventual defect management
|
||||||
bit6= try to avoid lengthy media certification
|
bit6= try to avoid lengthy media certification
|
||||||
bit7= MMC expert application mode (else libburn tries to
|
bit7, bit8 to bit15 =
|
||||||
choose a suitable format type):
|
bit7 enables MMC expert application mode (else libburn
|
||||||
bit8 to bit15 contain the index of the format to use. See
|
tries to choose a suitable format type):
|
||||||
burn_disc_get_formats(), burn_disc_get_format_descr().
|
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().
|
||||||
Acceptable types are: 0x00, 0x01, 0x10, 0x11, 0x13,
|
Acceptable types are: 0x00, 0x01, 0x10, 0x11, 0x13,
|
||||||
0x15, 0x26, 0x30, 0x31.
|
0x15, 0x26, 0x30, 0x31.
|
||||||
If bit7 is set, bit4 is set automatically.
|
If bit7 is set, then bit4 is set automatically.
|
||||||
@since 0.3.0
|
@since 0.3.0
|
||||||
*/
|
*/
|
||||||
void burn_disc_format(struct burn_drive *drive, off_t size, int flag);
|
void burn_disc_format(struct burn_drive *drive, off_t size, int flag);
|
||||||
@ -2194,7 +2205,7 @@ void burn_version(int *major, int *minor, int *micro);
|
|||||||
*/
|
*/
|
||||||
#define burn_header_version_major 0
|
#define burn_header_version_major 0
|
||||||
#define burn_header_version_minor 5
|
#define burn_header_version_minor 5
|
||||||
#define burn_header_version_micro 1
|
#define burn_header_version_micro 8
|
||||||
/** Note:
|
/** Note:
|
||||||
Above version numbers are also recorded in configure.ac because libtool
|
Above version numbers are also recorded in configure.ac because libtool
|
||||||
wants them as parameters at build time.
|
wants them as parameters at build time.
|
||||||
|
@ -531,6 +531,9 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
|||||||
0x0002015c (FAILURE,HIGH) = Fifo size is smaller than desired peek buffer
|
0x0002015c (FAILURE,HIGH) = Fifo size is smaller than desired peek buffer
|
||||||
0x0002015d (FAILURE,HIGH) = Fifo input ended short of desired peek buffer size
|
0x0002015d (FAILURE,HIGH) = Fifo input ended short of desired peek buffer size
|
||||||
0x0002015e (FATAL,HIGH) = Fifo is already under consumption when peeking
|
0x0002015e (FATAL,HIGH) = Fifo is already under consumption when peeking
|
||||||
|
0x0002015f (MISHAP,HIGH) = Damaged CD table-of-content detected and truncated
|
||||||
|
0x00020160 (WARNING,HIGH) = Session without leadout encountered
|
||||||
|
0x00020161 (WARNING,HIGH) = Empty session deleted
|
||||||
|
|
||||||
libdax_audioxtr:
|
libdax_audioxtr:
|
||||||
0x00020200 (SORRY,HIGH) = Cannot open audio source file
|
0x00020200 (SORRY,HIGH) = Cannot open audio source file
|
||||||
|
106
libburn/mmc.c
106
libburn/mmc.c
@ -773,11 +773,24 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf)
|
|||||||
|
|
||||||
/* >>> make this scsi_notify_error() when liberated */
|
/* >>> make this scsi_notify_error() when liberated */
|
||||||
if (c.sense[2]!=0) {
|
if (c.sense[2]!=0) {
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
char msg[160];
|
char msg[160];
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"SCSI error on write(%d,%d): key=%X asc=%2.2Xh ascq=%2.2Xh",
|
"SCSI error on write(%d,%d): key=%X asc=%2.2Xh ascq=%2.2Xh",
|
||||||
start, len,
|
start, len,
|
||||||
c.sense[2],c.sense[12],c.sense[13]);
|
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,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
0x0002011d,
|
0x0002011d,
|
||||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
@ -1130,8 +1143,9 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
|
|||||||
struct buffer buf;
|
struct buffer buf;
|
||||||
struct command c;
|
struct command c;
|
||||||
int dlen;
|
int dlen;
|
||||||
int i, bpl= 12, old_alloc_len;
|
int i, bpl= 12, old_alloc_len, t_idx;
|
||||||
unsigned char *tdata;
|
unsigned char *tdata;
|
||||||
|
char msg[321];
|
||||||
|
|
||||||
if (*alloc_len < 4)
|
if (*alloc_len < 4)
|
||||||
return 0;
|
return 0;
|
||||||
@ -1207,7 +1221,9 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
|
|||||||
ts A61007 : if re-enabled then not via Assert.
|
ts A61007 : if re-enabled then not via Assert.
|
||||||
a ssert(((dlen - 2) % 11) == 0);
|
a ssert(((dlen - 2) % 11) == 0);
|
||||||
*/
|
*/
|
||||||
d->toc_entry = calloc(d->toc_entries, sizeof(struct burn_toc_entry));
|
/* ts A81202: plus number of sessions as reserve for leadout default */
|
||||||
|
d->toc_entry = calloc(d->toc_entries + (unsigned char) c.page->data[3],
|
||||||
|
sizeof(struct burn_toc_entry));
|
||||||
if(d->toc_entry == NULL) /* ts A70825 */
|
if(d->toc_entry == NULL) /* ts A70825 */
|
||||||
return 0;
|
return 0;
|
||||||
tdata = c.page->data + 4;
|
tdata = c.page->data + 4;
|
||||||
@ -1294,6 +1310,42 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
|
|||||||
d->status = BURN_DISC_FULL;
|
d->status = BURN_DISC_FULL;
|
||||||
toc_find_modes(d);
|
toc_find_modes(d);
|
||||||
|
|
||||||
|
/* ts A81202 ticket 146 : a drive reported a session with no leadout */
|
||||||
|
for (i = 0; i < d->disc->sessions; i++) {
|
||||||
|
if (d->disc->session[i]->leadout_entry != NULL)
|
||||||
|
continue;
|
||||||
|
sprintf(msg, "Session %d of %d encountered without leadout",
|
||||||
|
i + 1, d->disc->sessions);
|
||||||
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
|
0x00020160,
|
||||||
|
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
|
msg, 0, 0);
|
||||||
|
|
||||||
|
/* Produce default leadout entry from last track of session
|
||||||
|
which will thus get its size set to 0 */;
|
||||||
|
if (d->disc->session[i]->track != NULL &&
|
||||||
|
d->disc->session[i]->tracks > 0) {
|
||||||
|
t_idx = d->toc_entries++;
|
||||||
|
memcpy(d->toc_entry + t_idx,
|
||||||
|
d->disc->session[i]->track[
|
||||||
|
d->disc->session[i]->tracks - 1]->entry,
|
||||||
|
sizeof(struct burn_toc_entry));
|
||||||
|
d->toc_entry[t_idx].point = 0xA2;
|
||||||
|
d->disc->session[i]->leadout_entry =
|
||||||
|
d->toc_entry + t_idx;
|
||||||
|
} else {
|
||||||
|
burn_disc_remove_session(d->disc, d->disc->session[i]);
|
||||||
|
sprintf(msg,
|
||||||
|
"Empty session %d deleted. Now %d sessions.",
|
||||||
|
i + 1, d->disc->sessions);
|
||||||
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
|
0x00020161,
|
||||||
|
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
|
msg, 0, 0);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* A80808 */
|
/* A80808 */
|
||||||
burn_disc_cd_toc_extensions(d->disc, 0);
|
burn_disc_cd_toc_extensions(d->disc, 0);
|
||||||
|
|
||||||
@ -1924,8 +1976,9 @@ int mmc_set_streaming(struct burn_drive *d,
|
|||||||
struct buffer buf;
|
struct buffer buf;
|
||||||
struct command c;
|
struct command c;
|
||||||
int b, eff_end_lba;
|
int b, eff_end_lba;
|
||||||
char msg[160];
|
char msg[256];
|
||||||
unsigned char *pd;
|
unsigned char *pd;
|
||||||
|
int key, asc, ascq;
|
||||||
|
|
||||||
if (mmc_function_spy(d, "mmc_set_streaming") <= 0)
|
if (mmc_function_spy(d, "mmc_set_streaming") <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
@ -1988,6 +2041,8 @@ int mmc_set_streaming(struct burn_drive *d,
|
|||||||
d->issue_command(d, &c);
|
d->issue_command(d, &c);
|
||||||
if (c.error) {
|
if (c.error) {
|
||||||
if (c.sense[2]!=0 && !d->silent_on_scsi_error) {
|
if (c.sense[2]!=0 && !d->silent_on_scsi_error) {
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"SCSI error on set_streaming(%d): key=%X asc=%2.2Xh ascq=%2.2Xh",
|
"SCSI error on set_streaming(%d): key=%X asc=%2.2Xh ascq=%2.2Xh",
|
||||||
w_speed,
|
w_speed,
|
||||||
@ -1997,6 +2052,15 @@ int mmc_set_streaming(struct burn_drive *d,
|
|||||||
0x00020124,
|
0x00020124,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
msg, 0, 0);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2698,7 +2762,8 @@ 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 index, format_sub_type = 0, format_00_index, size_mode;
|
||||||
int accept_count = 0;
|
int accept_count = 0;
|
||||||
off_t num_of_blocks = 0, diff, format_size, i_size, format_00_max_size;
|
off_t num_of_blocks = 0, diff, format_size, i_size, format_00_max_size;
|
||||||
char msg[160],descr[80];
|
char msg[256],descr[80];
|
||||||
|
int key, asc, ascq;
|
||||||
int full_format_type = 0x00; /* Full Format (or 0x10 for DVD-RW ?) */
|
int full_format_type = 0x00; /* Full Format (or 0x10 for DVD-RW ?) */
|
||||||
|
|
||||||
if (mmc_function_spy(d, "mmc_format_unit") <= 0)
|
if (mmc_function_spy(d, "mmc_format_unit") <= 0)
|
||||||
@ -3004,6 +3069,17 @@ no_suitable_formatting_type:;
|
|||||||
} else if(size_mode == 3) { /* default payload size */
|
} else if(size_mode == 3) { /* default payload size */
|
||||||
if (accept_count < 1)
|
if (accept_count < 1)
|
||||||
index = 0; /* this cannot certify */
|
index = 0; /* this cannot certify */
|
||||||
|
|
||||||
|
/* ts A81129
|
||||||
|
LG GGW-H20L YL03 refuses on 0x30 with
|
||||||
|
"Quick certification". dvd+rw-format
|
||||||
|
does 0x00 by default and succeeds quickly.
|
||||||
|
*/
|
||||||
|
if ((flag & 64) && format_type == 0x00) {
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(format_type != 0x30)
|
if(format_type != 0x30)
|
||||||
continue;
|
continue;
|
||||||
accept_count++;
|
accept_count++;
|
||||||
@ -3100,6 +3176,8 @@ unsuitable_media:;
|
|||||||
d->issue_command(d, &c);
|
d->issue_command(d, &c);
|
||||||
if (c.error && !tolerate_failure) {
|
if (c.error && !tolerate_failure) {
|
||||||
if (c.sense[2]!=0) {
|
if (c.sense[2]!=0) {
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"SCSI error on format_unit(%s): key=%X asc=%2.2Xh ascq=%2.2Xh",
|
"SCSI error on format_unit(%s): key=%X asc=%2.2Xh ascq=%2.2Xh",
|
||||||
descr,
|
descr,
|
||||||
@ -3108,6 +3186,13 @@ unsuitable_media:;
|
|||||||
0x00020122,
|
0x00020122,
|
||||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
msg, 0, 0);
|
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;
|
return 0;
|
||||||
} else if ((!c.error) && (format_type == 0x13 || format_type == 0x15))
|
} else if ((!c.error) && (format_type == 0x13 || format_type == 0x15))
|
||||||
@ -3409,11 +3494,24 @@ int mmc_read_10(struct burn_drive *d, int start,int amount, struct buffer *buf)
|
|||||||
c.dir = FROM_DRIVE;
|
c.dir = FROM_DRIVE;
|
||||||
d->issue_command(d, &c);
|
d->issue_command(d, &c);
|
||||||
if (c.error) {
|
if (c.error) {
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
char msg[160];
|
char msg[160];
|
||||||
|
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"SCSI error on read_10(%d,%d): key=%X asc=%2.2Xh ascq=%2.2Xh",
|
"SCSI error on read_10(%d,%d): key=%X asc=%2.2Xh ascq=%2.2Xh",
|
||||||
start, amount,
|
start, amount,
|
||||||
c.sense[2],c.sense[12],c.sense[13]);
|
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)
|
if(!d->silent_on_scsi_error)
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
0x00020144,
|
0x00020144,
|
||||||
|
@ -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 alignment = 2048, start, upto, chunksize = 1, err, cpy_size, i;
|
||||||
int sose_mem = 0, fd = -1, ret;
|
int sose_mem = 0, fd = -1, ret;
|
||||||
char msg[81], *wpt;
|
char msg[81], *wpt;
|
||||||
struct buffer buf;
|
struct buffer buf, *buffer_mem = d->buffer;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#define Libburn_read_data_adr_logginG 1
|
#define Libburn_read_data_adr_logginG 1
|
||||||
@ -485,7 +485,7 @@ ex:;
|
|||||||
if (fd != -1)
|
if (fd != -1)
|
||||||
close(fd);
|
close(fd);
|
||||||
*/
|
*/
|
||||||
d->buffer = NULL;
|
d->buffer = buffer_mem;
|
||||||
d->busy = BURN_DRIVE_IDLE;
|
d->busy = BURN_DRIVE_IDLE;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ Send feedback to libburn-hackers@pykix.org .
|
|||||||
#include <err.h> /* XXX */
|
#include <err.h> /* XXX */
|
||||||
|
|
||||||
|
|
||||||
/* ts A70909 : >>> untestet yet wether this compiles */
|
/* ts A70909 */
|
||||||
#include <sys/statvfs.h>
|
#include <sys/statvfs.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include <err.h> /* XXX */
|
#include <err.h> /* XXX */
|
||||||
|
|
||||||
|
|
||||||
/* ts A70909 : >>> untestet yet wether this compiles */
|
/* ts A70909 */
|
||||||
#include <sys/statvfs.h>
|
#include <sys/statvfs.h>
|
||||||
|
|
||||||
|
|
||||||
@ -622,7 +622,6 @@ int burn_os_stdio_capacity(char *path, off_t *bytes)
|
|||||||
struct statvfs vfsbuf;
|
struct statvfs vfsbuf;
|
||||||
char testpath[4096], *cpt;
|
char testpath[4096], *cpt;
|
||||||
long blocks;
|
long blocks;
|
||||||
int open_mode = O_RDWR, fd, ret;
|
|
||||||
off_t add_size = 0;
|
off_t add_size = 0;
|
||||||
|
|
||||||
testpath[0] = 0;
|
testpath[0] = 0;
|
||||||
@ -642,6 +641,8 @@ int burn_os_stdio_capacity(char *path, off_t *bytes)
|
|||||||
#ifdef Libburn_if_this_was_linuX
|
#ifdef Libburn_if_this_was_linuX
|
||||||
|
|
||||||
} else if(S_ISBLK(stbuf.st_mode)) {
|
} else if(S_ISBLK(stbuf.st_mode)) {
|
||||||
|
int open_mode = O_RDWR, fd, ret;
|
||||||
|
|
||||||
if(burn_sg_open_o_excl)
|
if(burn_sg_open_o_excl)
|
||||||
open_mode |= O_EXCL;
|
open_mode |= O_EXCL;
|
||||||
fd = open(path, open_mode);
|
fd = open(path, open_mode);
|
||||||
|
@ -729,19 +729,17 @@ static int is_scsi_drive(char *fname, int *bus_no, int *host_no,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CDROM_DRIVE_STATUS
|
#ifdef CDROM_DRIVE_STATUS
|
||||||
if (strcmp(linux_sg_device_family,"/dev/sg%d") != 0) {
|
/* http://developer.osdl.org/dev/robustmutexes/
|
||||||
/* http://developer.osdl.org/dev/robustmutexes/
|
|
||||||
src/fusyn.hg/Documentation/ioctl/cdrom.txt */
|
src/fusyn.hg/Documentation/ioctl/cdrom.txt */
|
||||||
sid_ret = ioctl(fd, CDROM_DRIVE_STATUS, 0);
|
sid_ret = ioctl(fd, CDROM_DRIVE_STATUS, 0);
|
||||||
if(linux_sg_enumerate_debug)
|
if(linux_sg_enumerate_debug)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"ioctl(CDROM_DRIVE_STATUS) = %d , ",
|
"ioctl(CDROM_DRIVE_STATUS) = %d , ",
|
||||||
sid_ret);
|
sid_ret);
|
||||||
if (sid_ret != -1 && sid_ret != CDS_NO_INFO)
|
if (sid_ret != -1 && sid_ret != CDS_NO_INFO)
|
||||||
sid.scsi_type = TYPE_ROM;
|
sid.scsi_type = TYPE_ROM;
|
||||||
else
|
else
|
||||||
sid_ret = -1;
|
sid_ret = -1;
|
||||||
}
|
|
||||||
#endif /* CDROM_DRIVE_STATUS */
|
#endif /* CDROM_DRIVE_STATUS */
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1130,7 +1128,8 @@ static int fname_drive_is_listed(char *fname, int flag)
|
|||||||
|
|
||||||
|
|
||||||
/* ts A80731 : Directly open the given address.
|
/* ts A80731 : Directly open the given address.
|
||||||
@param flag bit0= do not compain about missing file
|
@param flag bit0= do not complain about missing file
|
||||||
|
bit1= do not check whether drive is already listed
|
||||||
*/
|
*/
|
||||||
static int fname_enumerate(char *fname, int flag)
|
static int fname_enumerate(char *fname, int flag)
|
||||||
{
|
{
|
||||||
@ -1139,8 +1138,9 @@ static int fname_enumerate(char *fname, int flag)
|
|||||||
char msg[BURN_DRIVE_ADR_LEN + 80];
|
char msg[BURN_DRIVE_ADR_LEN + 80];
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
|
|
||||||
if (fname_drive_is_listed(fname, 0))
|
if (!(flag & 2))
|
||||||
return 2;
|
if (fname_drive_is_listed(fname, 0))
|
||||||
|
return 2;
|
||||||
if (stat(fname, &stbuf) == -1) {
|
if (stat(fname, &stbuf) == -1) {
|
||||||
sprintf(msg, "File object '%s' not found", fname);
|
sprintf(msg, "File object '%s' not found", fname);
|
||||||
if (!(flag & 1))
|
if (!(flag & 1))
|
||||||
@ -1183,7 +1183,7 @@ static int single_enumerate(int flag)
|
|||||||
fname= burn_drive_whitelist_item(0, 0);
|
fname= burn_drive_whitelist_item(0, 0);
|
||||||
if (fname == NULL)
|
if (fname == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
ret = fname_enumerate(fname, 0);
|
ret = fname_enumerate(fname, 2);
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
sprintf(msg, "Cannot access '%s' as SG_IO CDROM drive", fname);
|
sprintf(msg, "Cannot access '%s' as SG_IO CDROM drive", fname);
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x0002000a,
|
libdax_msgs_submit(libdax_messenger, -1, 0x0002000a,
|
||||||
@ -1216,6 +1216,9 @@ static int proc_sys_dev_cdrom_info(char ***list, int *count, int flag)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
*count = 0;
|
*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");
|
fp = fopen("/proc/sys/dev/cdrom/info", "r");
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
327
libburn/spc.c
327
libburn/spc.c
@ -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);
|
i, ret, (unsigned) key, (unsigned) asc, (unsigned) ascq);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(ret > 0) /* ready */
|
if (ret > 0) /* ready */
|
||||||
break;
|
break;
|
||||||
if(key!=0x2 || asc!=0x4) {
|
if (key!=0x2 || asc!=0x4) {
|
||||||
if (key == 0x2 && asc == 0x3A) {
|
if (key == 0x2 && asc == 0x3A) {
|
||||||
ret = 1; /* medium not present = ok */
|
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 */
|
/* ts A71128 : do not interpret reply if error */
|
||||||
m = d->mdata;
|
m = d->mdata;
|
||||||
if(!c.error) {
|
if (!c.error) {
|
||||||
size = c.page->data[0] * 256 + c.page->data[1];
|
size = c.page->data[0] * 256 + c.page->data[1];
|
||||||
page = c.page->data + 8;
|
page = c.page->data + 8;
|
||||||
burn_print(1, "write page length 0x%x\n", page[1]);
|
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));
|
d->mdata = calloc(1, sizeof(struct scsi_mode_data));
|
||||||
|
|
||||||
/* ts A61007 : obsolete Assert in drive_getcaps() */
|
/* 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_submit(libdax_messenger, -1, 0x00020108,
|
||||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
"Could not allocate new drive object", 0, 0);
|
"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->idata->valid = 0;
|
||||||
d->mdata->valid = 0;
|
d->mdata->valid = 0;
|
||||||
d->mdata->speed_descriptors = NULL;
|
d->mdata->speed_descriptors = NULL;
|
||||||
if(!(flag & 1)) {
|
if (!(flag & 1)) {
|
||||||
ret = spc_setup_drive(d);
|
ret = spc_setup_drive(d);
|
||||||
if (ret<=0)
|
if (ret<=0)
|
||||||
return ret;
|
return ret;
|
||||||
@ -869,11 +869,14 @@ int burn_scsi_setup_drive(struct burn_drive *d, int bus_no, int host_no,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ts A61122 */
|
/* ts A61122 - A80829 */
|
||||||
enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
|
enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
|
||||||
int senselen, char msg[161],
|
int senselen, char msg_data[161],
|
||||||
int *key, int *asc, int *ascq)
|
int *key, int *asc, int *ascq)
|
||||||
{
|
{
|
||||||
|
char *msg;
|
||||||
|
|
||||||
|
msg= msg_data;
|
||||||
*key= *asc= *ascq= -1;
|
*key= *asc= *ascq= -1;
|
||||||
|
|
||||||
if (senselen<=0 || senselen>2)
|
if (senselen<=0 || senselen>2)
|
||||||
@ -883,50 +886,244 @@ enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
|
|||||||
if (senselen<=0 || senselen>13)
|
if (senselen<=0 || senselen>13)
|
||||||
*ascq = sense[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",
|
burn_print(12, "CONDITION: 0x%x 0x%x 0x%x on %s %s\n",
|
||||||
*key, *asc, *ascq, d->idata->vendor, d->idata->product);
|
*key, *asc, *ascq, d->idata->vendor, d->idata->product);
|
||||||
|
|
||||||
switch (*asc) {
|
switch (*asc) {
|
||||||
case 0:
|
case 0x00:
|
||||||
sprintf(msg, "(no error reported by SCSI transaction)");
|
sprintf(msg, "(No error reported by SCSI transaction)");
|
||||||
return RETRY;
|
return RETRY;
|
||||||
|
|
||||||
case 2:
|
case 0x02:
|
||||||
sprintf(msg, "not ready");
|
sprintf(msg, "Not ready");
|
||||||
return RETRY;
|
return RETRY;
|
||||||
case 4:
|
case 0x04:
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"logical unit is in the process of becoming ready");
|
"Logical unit is in the process of becoming ready");
|
||||||
return RETRY;
|
return RETRY;
|
||||||
|
case 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:
|
case 0x20:
|
||||||
if (*key == 5)
|
if (*key != 5)
|
||||||
sprintf(msg, "bad opcode");
|
break;
|
||||||
|
sprintf(msg, "Invalid command operation code");
|
||||||
return FAIL;
|
return FAIL;
|
||||||
case 0x21:
|
case 0x21:
|
||||||
sprintf(msg, "invalid address");
|
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");
|
||||||
return FAIL;
|
return FAIL;
|
||||||
case 0x24:
|
case 0x24:
|
||||||
if (*key == 5)
|
if (*key != 5)
|
||||||
sprintf(msg, "invalid field in cdb");
|
|
||||||
else
|
|
||||||
break;
|
break;
|
||||||
|
sprintf(msg, "Invalid field in cdb");
|
||||||
return FAIL;
|
return FAIL;
|
||||||
case 0x26:
|
case 0x26:
|
||||||
if (*key == 5 )
|
if (*key != 5)
|
||||||
sprintf(msg, "invalid field in parameter list" );
|
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");
|
||||||
return FAIL;
|
return FAIL;
|
||||||
case 0x28:
|
case 0x28:
|
||||||
if (*key == 6)
|
if (*key != 6)
|
||||||
|
break;
|
||||||
|
if (*ascq == 0)
|
||||||
sprintf(msg, "Medium may have changed");
|
sprintf(msg, "Medium may have changed");
|
||||||
|
else if (*ascq == 2)
|
||||||
|
sprintf(msg, "Format layer may have changed");
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
return RETRY;
|
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 0x31:
|
||||||
|
if (*key != 3)
|
||||||
|
break;
|
||||||
|
if (*ascq == 0)
|
||||||
|
sprintf(msg, "Medium unformatted or format corrupted");
|
||||||
|
else if (*ascq == 1)
|
||||||
|
sprintf(msg, "Format command failed");
|
||||||
|
return FAIL;
|
||||||
case 0x3A:
|
case 0x3A:
|
||||||
sprintf(msg, "Medium not present");
|
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");
|
||||||
d->status = BURN_DISC_EMPTY;
|
d->status = BURN_DISC_EMPTY;
|
||||||
return FAIL;
|
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,
|
sprintf(msg_data,
|
||||||
"Failure. See mmc3r10g.pdf: Sense Key %X ASC %2.2X ASCQ %2.2X",
|
"Failure. See mmc3r10g.pdf: Sense Key %X ASC %2.2X ASCQ %2.2X",
|
||||||
*key, *asc, *ascq);
|
*key, *asc, *ascq);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@ -951,6 +1148,68 @@ enum response scsi_error(struct burn_drive *d, unsigned char *sense,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char *scsi_command_name(unsigned int c, int flag)
|
||||||
|
{
|
||||||
|
switch (c) {
|
||||||
|
case 0x00:
|
||||||
|
return "TEST UNIT READY";
|
||||||
|
case 0x03:
|
||||||
|
return "REQUEST SENSE";
|
||||||
|
case 0x04:
|
||||||
|
return "FORMAT UNIT";
|
||||||
|
case 0x1b:
|
||||||
|
return "START/STOP UNIT";
|
||||||
|
case 0x1e:
|
||||||
|
return "PREVENT/ALLOW MEDIA REMOVAL";
|
||||||
|
case 0x23:
|
||||||
|
return "READ FORMAT CAPACITIES";
|
||||||
|
case 0x28:
|
||||||
|
return "READ(10)";
|
||||||
|
case 0x2a:
|
||||||
|
return "WRITE(10)";
|
||||||
|
case 0x35:
|
||||||
|
return "SYNCHRONIZE CACHE";
|
||||||
|
case 0x43:
|
||||||
|
return "READ TOC/PMA/ATIP";
|
||||||
|
case 0x46:
|
||||||
|
return "GET CONFIGURATION";
|
||||||
|
case 0x4a:
|
||||||
|
return "GET EVENT STATUS NOTIFICATION";
|
||||||
|
case 0x51:
|
||||||
|
return "READ DISC INFORMATION";
|
||||||
|
case 0x52:
|
||||||
|
return "READ TRACK INFORMATION";
|
||||||
|
case 0x53:
|
||||||
|
return "RESERVE TRACK";
|
||||||
|
case 0x54:
|
||||||
|
return "SEND OPC INFORMATION";
|
||||||
|
case 0x55:
|
||||||
|
return "MODE SELECT";
|
||||||
|
case 0x5a:
|
||||||
|
return "SEND OPC INFORMATION";
|
||||||
|
case 0x5b:
|
||||||
|
return "CLOSE TRACK/SESSION";
|
||||||
|
case 0x5c:
|
||||||
|
return "READ BUFFER CAPACITY";
|
||||||
|
case 0x5d:
|
||||||
|
return "SEND CUE SHEET";
|
||||||
|
case 0xa1:
|
||||||
|
return "BLANK";
|
||||||
|
case 0xaa:
|
||||||
|
return "WRITE(12)";
|
||||||
|
case 0xac:
|
||||||
|
return "GET PERFORMANCE";
|
||||||
|
case 0xb6:
|
||||||
|
return "SET STREAMING";
|
||||||
|
case 0xbb:
|
||||||
|
return "SET CD SPEED";
|
||||||
|
case 0xbe:
|
||||||
|
return "READ CD";
|
||||||
|
}
|
||||||
|
return "(NOT IN COMMAND LIST)";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ts A61030 - A61115 */
|
/* ts A61030 - A61115 */
|
||||||
/* @param flag bit0=do report conditions which are considered not an error */
|
/* @param flag bit0=do report conditions which are considered not an error */
|
||||||
int scsi_notify_error(struct burn_drive *d, struct command *c,
|
int scsi_notify_error(struct burn_drive *d, struct command *c,
|
||||||
@ -962,12 +1221,9 @@ int scsi_notify_error(struct burn_drive *d, struct command *c,
|
|||||||
if (d->silent_on_scsi_error)
|
if (d->silent_on_scsi_error)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
strcpy(scsi_msg, " \"");
|
scsi_error_msg(d, sense, senselen, scsi_msg, &key, &asc, &ascq);
|
||||||
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 */
|
/* SPC : TEST UNIT READY command */
|
||||||
if (c->opcode[0] == 0)
|
if (c->opcode[0] == 0)
|
||||||
return 1;
|
return 1;
|
||||||
@ -978,7 +1234,11 @@ int scsi_notify_error(struct burn_drive *d, struct command *c,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(msg,"SCSI error condition on command %2.2Xh :", c->opcode[0]);
|
sprintf(msg, "SCSI error condition on command %2.2Xh %s: ",
|
||||||
|
c->opcode[0],
|
||||||
|
scsi_command_name((unsigned int) c->opcode[0], 0));
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
if (key>=0)
|
if (key>=0)
|
||||||
sprintf(msg+strlen(msg), " key=%Xh", key);
|
sprintf(msg+strlen(msg), " key=%Xh", key);
|
||||||
if (asc>=0)
|
if (asc>=0)
|
||||||
@ -992,6 +1252,13 @@ int scsi_notify_error(struct burn_drive *d, struct command *c,
|
|||||||
ret = libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002010f,
|
ret = libdax_msgs_submit(libdax_messenger, d->global_index, 0x0002010f,
|
||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
scsi_msg,0,0);
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,6 +104,30 @@ int burn_disc_add_session(struct burn_disc *d, struct burn_session *s,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ts A81202: this function was in the API but not implemented.
|
||||||
|
*/
|
||||||
|
int burn_disc_remove_session(struct burn_disc *d, struct burn_session *s)
|
||||||
|
{
|
||||||
|
int i, skip = 0;
|
||||||
|
|
||||||
|
if (d->session == NULL)
|
||||||
|
return 0;
|
||||||
|
for (i = 0; i < d->sessions; i++) {
|
||||||
|
if (s == d->session[i]) {
|
||||||
|
skip++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
d->session[i - skip] = d->session[i];
|
||||||
|
}
|
||||||
|
if (!skip)
|
||||||
|
return 0;
|
||||||
|
burn_session_free(s);
|
||||||
|
d->sessions--;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct burn_track *burn_track_create(void)
|
struct burn_track *burn_track_create(void)
|
||||||
{
|
{
|
||||||
struct burn_track *t;
|
struct burn_track *t;
|
||||||
@ -529,14 +553,53 @@ int burn_session_get_hidefirst(struct burn_session *session)
|
|||||||
/* ts A80808 : Enhance CD toc to DVD toc */
|
/* ts A80808 : Enhance CD toc to DVD toc */
|
||||||
int burn_disc_cd_toc_extensions(struct burn_disc *d, int flag)
|
int burn_disc_cd_toc_extensions(struct burn_disc *d, int flag)
|
||||||
{
|
{
|
||||||
int sidx, tidx;
|
int sidx= 0, tidx= 0;
|
||||||
struct burn_toc_entry *entry, *prev_entry= NULL;
|
struct burn_toc_entry *entry, *prev_entry= NULL;
|
||||||
|
/* ts A81126 : ticket 146 : There was a SIGSEGV in here */
|
||||||
|
char msg_data[321], *msg;
|
||||||
|
|
||||||
|
strcpy(msg_data,
|
||||||
|
"Damaged CD table-of-content detected and truncated.");
|
||||||
|
strcat(msg_data, " In burn_disc_cd_toc_extensions: ");
|
||||||
|
msg = msg_data + strlen(msg_data);
|
||||||
|
if (d->session == NULL) {
|
||||||
|
strcpy(msg, "d->session == NULL");
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
for (sidx = 0; sidx < d->sessions; sidx++) {
|
for (sidx = 0; sidx < d->sessions; sidx++) {
|
||||||
|
if (d->session[sidx] == NULL) {
|
||||||
|
sprintf(msg, "d->session[%d of %d] == NULL",
|
||||||
|
sidx, d->sessions);
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
if (d->session[sidx]->track == NULL) {
|
||||||
|
sprintf(msg, "d->session[%d of %d]->track == NULL",
|
||||||
|
sidx, d->sessions);
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
if (d->session[sidx]->leadout_entry == NULL) {
|
||||||
|
sprintf(msg,
|
||||||
|
" Session %d of %d: Leadout entry missing.",
|
||||||
|
sidx, d->sessions);
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
for (tidx = 0; tidx < d->session[sidx]->tracks + 1; tidx++) {
|
for (tidx = 0; tidx < d->session[sidx]->tracks + 1; tidx++) {
|
||||||
if (tidx < d->session[sidx]->tracks)
|
if (tidx < d->session[sidx]->tracks) {
|
||||||
|
if (d->session[sidx]->track[tidx] == NULL) {
|
||||||
|
sprintf(msg,
|
||||||
|
"d->session[%d of %d]->track[%d of %d] == NULL",
|
||||||
|
sidx, d->sessions, tidx, d->session[sidx]->tracks);
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
entry = d->session[sidx]->track[tidx]->entry;
|
entry = d->session[sidx]->track[tidx]->entry;
|
||||||
else
|
if (entry == NULL) {
|
||||||
|
sprintf(msg,
|
||||||
|
"session %d of %d, track %d of %d, entry == NULL",
|
||||||
|
sidx, d->sessions, tidx,
|
||||||
|
d->session[sidx]->tracks);
|
||||||
|
goto failure;
|
||||||
|
}
|
||||||
|
} else
|
||||||
entry = d->session[sidx]->leadout_entry;
|
entry = d->session[sidx]->leadout_entry;
|
||||||
entry->session_msb = 0;
|
entry->session_msb = 0;
|
||||||
entry->point_msb = 0;
|
entry->point_msb = 0;
|
||||||
@ -558,6 +621,11 @@ int burn_disc_cd_toc_extensions(struct burn_disc *d, int flag)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
failure:
|
||||||
|
libdax_msgs_submit(libdax_messenger, -1, 0x0002015f,
|
||||||
|
LIBDAX_MSGS_SEV_MISHAP, LIBDAX_MSGS_PRIO_HIGH, msg_data, 0, 0);
|
||||||
|
d->sessions= sidx;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,7 +4,11 @@
|
|||||||
/* #include <a ssert.h> */
|
/* #include <a ssert.h> */
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "../version.h"
|
|
||||||
|
/* ts A80914 : This is unneeded. Version info comes from libburn.h.
|
||||||
|
#include "v ersion.h"
|
||||||
|
*/
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "libburn.h"
|
#include "libburn.h"
|
||||||
|
|
||||||
@ -48,13 +52,7 @@ char *burn_strndup(char *s, int n)
|
|||||||
void burn_version(int *major, int *minor, int *micro)
|
void burn_version(int *major, int *minor, int *micro)
|
||||||
{
|
{
|
||||||
/* ts A80408 : switched from configure.ac versioning to libburn.h versioning */
|
/* ts A80408 : switched from configure.ac versioning to libburn.h versioning */
|
||||||
#ifdef burn_header_version_major
|
*major = burn_header_version_major;
|
||||||
*major = burn_header_version_major;
|
*minor = burn_header_version_minor;
|
||||||
*minor = burn_header_version_minor;
|
*micro = burn_header_version_micro;
|
||||||
*micro = burn_header_version_micro;
|
|
||||||
#else
|
|
||||||
*major = BURN_MAJOR_VERSION;
|
|
||||||
*minor = BURN_MINOR_VERSION;
|
|
||||||
*micro = BURN_MICRO_VERSION;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
@ -1996,7 +1996,7 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc)
|
|||||||
{
|
{
|
||||||
struct cue_sheet *sheet;
|
struct cue_sheet *sheet;
|
||||||
struct burn_drive *d = o->drive;
|
struct burn_drive *d = o->drive;
|
||||||
struct buffer buf;
|
struct buffer buf, *buffer_mem = o->drive->buffer;
|
||||||
struct burn_track *lt, *t;
|
struct burn_track *lt, *t;
|
||||||
int first = 1, i, ret, lba, nwa = 0;
|
int first = 1, i, ret, lba, nwa = 0;
|
||||||
off_t default_size;
|
off_t default_size;
|
||||||
@ -2206,6 +2206,7 @@ fail_wo_sync:;
|
|||||||
d->busy = BURN_DRIVE_IDLE;
|
d->busy = BURN_DRIVE_IDLE;
|
||||||
ex:;
|
ex:;
|
||||||
d->do_stream_recording = 0;
|
d->do_stream_recording = 0;
|
||||||
|
d->buffer = buffer_mem;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2215,7 +2216,7 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address,
|
|||||||
{
|
{
|
||||||
int alignment = 0, start, upto, chunksize, err, fd = -1, ret;
|
int alignment = 0, start, upto, chunksize, err, fd = -1, ret;
|
||||||
char msg[81], *rpt;
|
char msg[81], *rpt;
|
||||||
struct buffer buf;
|
struct buffer buf, *buffer_mem = d->buffer;
|
||||||
|
|
||||||
if (d->released) {
|
if (d->released) {
|
||||||
libdax_msgs_submit(libdax_messenger,
|
libdax_msgs_submit(libdax_messenger,
|
||||||
@ -2326,7 +2327,7 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address,
|
|||||||
|
|
||||||
if(fd >= 0)
|
if(fd >= 0)
|
||||||
close(fd);
|
close(fd);
|
||||||
d->buffer = NULL;
|
d->buffer = buffer_mem;
|
||||||
d->busy = BURN_DRIVE_IDLE;
|
d->busy = BURN_DRIVE_IDLE;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user