Compare commits
73 Commits
ZeroFourZe
...
ZeroFourFo
Author | SHA1 | Date | |
---|---|---|---|
4175023fcd | |||
80c16a3b48 | |||
e1cc10b42e | |||
0b23bfc764 | |||
f3bef987ed | |||
94069733e9 | |||
e75e5e04b8 | |||
86d5bdfef8 | |||
c1298d82a6 | |||
5c6366ecbd | |||
616454c737 | |||
ea6957ef68 | |||
f9398c08e6 | |||
b4617c679c | |||
42bb74881a | |||
61671b41d7 | |||
1e74d7a04e | |||
c48244abfc | |||
13492efe4b | |||
bccb39efd8 | |||
6fc60be93c | |||
d69b856b6a | |||
b5e2d60c68 | |||
ff1ad50119 | |||
4cb6706307 | |||
6e74c8bc2e | |||
fdbed06f84 | |||
67e4282b82 | |||
bd8d4bb49f | |||
623edf9d9d | |||
d4fe8c75be | |||
9ebd020847 | |||
a93d18231a | |||
ec8b75217f | |||
99767afe1f | |||
024076ad54 | |||
c39e7d8ce4 | |||
95609061f1 | |||
d498003515 | |||
b1630a3b33 | |||
eddf4e6b13 | |||
654e25d40a | |||
69e1d4a51f | |||
305917fe86 | |||
b3b42ff649 | |||
63d1f5dcbf | |||
77a9a1fc92 | |||
beb1c1d2d1 | |||
e449654c7b | |||
d66a40bc0e | |||
bed900f3f4 | |||
922fc6c90b | |||
adac21d6ee | |||
d9e056c3ac | |||
32a6bd1f82 | |||
9f7be91aba | |||
fec4fd864f | |||
e48014caea | |||
82c6e92da0 | |||
206910da4e | |||
0a27b188a3 | |||
6705389f14 | |||
5c8d6865b5 | |||
2d6d2679a0 | |||
5432612965 | |||
9b1a57d84a | |||
e5ea580e3b | |||
981a1bf5e1 | |||
49925ad2ba | |||
fc5f2a4745 | |||
903a12c90b | |||
0f50c21888 | |||
f3739013fa |
@ -1,13 +1,12 @@
|
||||
Derek Foreman <derek@signalmarketing.com> and Ben Jansens <xor@orodu.net>
|
||||
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
||||
Mario Danic <mario.danic@gmail.com>, Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (C) 2006-2007 Mario Danic, Thomas Schmitt
|
||||
Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
|
||||
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
it under the terms of the GNU General Public License version 2 as
|
||||
published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
14
Makefile.am
14
Makefile.am
@ -101,10 +101,14 @@ test_structest_CPPFLAGS = -Ilibburn
|
||||
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||
test_structest_SOURCES = test/structest.c
|
||||
|
||||
## cdrskin construction site - ts A60816 - A71024
|
||||
## cdrskin construction site - ts A60816 - A80408
|
||||
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_4_0
|
||||
cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_4_4
|
||||
|
||||
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
||||
cdrskin_cdrskin_LDADD = libburn/libburn.la $(THREAD_LIBS)
|
||||
|
||||
cdrskin_cdrskin_SOURCES = cdrskin/cdrskin.c cdrskin/cdrfifo.c cdrskin/cdrfifo.h cdrskin/cdrskin_timestamp.h
|
||||
##
|
||||
## Open questions: how to compute $timestamp and express -DX="$timestamp"
|
||||
@ -163,13 +167,13 @@ indent: $(indent_files)
|
||||
|
||||
# Extra things
|
||||
nodist_pkgconfig_DATA = \
|
||||
libburn-5.pc
|
||||
libburn-1.pc
|
||||
|
||||
# http://www.nada.kth.se/cgi-bin/info?(automake.info)Man%20pages
|
||||
man_MANS = cdrskin/cdrskin.1
|
||||
|
||||
EXTRA_DIST = \
|
||||
libburn-5.pc.in \
|
||||
libburn-1.pc.in \
|
||||
version.h.in \
|
||||
doc/comments \
|
||||
doc/doxygen.conf.in \
|
||||
|
94
README
94
README
@ -6,7 +6,7 @@ This all is under GPL.
|
||||
------------------------------------------------------------------------------
|
||||
libburnia-project.org
|
||||
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (C) 2006-2007 Mario Danic, Thomas Schmitt
|
||||
Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
|
||||
|
||||
Still containing parts of
|
||||
Libburn. By Derek Foreman <derek@signalmarketing.com> and
|
||||
@ -19,7 +19,7 @@ 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-2007 Thomas Schmitt
|
||||
This libburnia-project.org toplevel README (C) 2006-2008 Thomas Schmitt
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
Build and Installation
|
||||
@ -39,13 +39,19 @@ into its toplevel directory (here: "libburn") and execute
|
||||
./configure --prefix=/usr
|
||||
make
|
||||
|
||||
To make the libraries accessible for running resp. developing applications
|
||||
To make the libraries accessible for running resp. developing applications
|
||||
and to install the cdrecord compatibility binary cdrskin, do:
|
||||
make install
|
||||
|
||||
|
||||
The other half of the project, libisofs, is hosted in the libburnia SVN, too:
|
||||
svn co http://svn.libburnia-project.org/libisofs/trunk libisofs
|
||||
See README file there.
|
||||
An important part of the project, libisofs, is hosted in a bzr repository at
|
||||
launchpad.net :
|
||||
bzr branch lp:libisofs
|
||||
|
||||
Another part the project, libisoburn, is hosted in the libburnia SVN, too:
|
||||
svn co http://svn.libburnia-project.org/libisoburn/trunk libisoburn
|
||||
|
||||
See README files there.
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
@ -67,29 +73,39 @@ we would need : login on a development machine resp. a live OS on CD or DVD,
|
||||
advise from a system person about the equivalent of Linux sg or FreeBSD CAM,
|
||||
volunteers for testing of realistic use cases.
|
||||
|
||||
We have a workable code base for burning CD and most single layer DVD.
|
||||
The burn API is quite comprehensively documented and can be used to build a
|
||||
presentable application.
|
||||
We have a functional binary which emulates parts of cdrecord in order to
|
||||
prove that usability, and in order to allow you to explore libburnia's scope
|
||||
by help of existing cdrecord frontends.
|
||||
We have a well tested code base for burning data and audio CDs and many DVD
|
||||
types. The burn API is quite comprehensively documented and can be used to
|
||||
build a presentable application.
|
||||
We have a functional binary which emulates the core use cases of cdrecord in
|
||||
order to prove that usability, and in order to allow you to explore libburn's
|
||||
scope by help of existing cdrecord frontends.
|
||||
|
||||
ISO 9660 filesystems with Rock Ridge and Joliet extensions can be created
|
||||
and manipulated quite freely. This capability together with our burn capability
|
||||
makes possible a single binary application which covers all steps of image
|
||||
composition, updating and writing. Quite unique in the Linux world.
|
||||
|
||||
The project components (list subject to growth, hopefully):
|
||||
|
||||
- libburn is the library by which preformatted data get onto optical media.
|
||||
It uses either /dev/sgN (e.g. on kernel 2.4 with ide-scsi) or
|
||||
/dev/hdX (e.g. on kernel 2.6).
|
||||
/dev/srM or /dev/hdX (e.g. on kernel 2.6).
|
||||
libburn is the foundation of our cdrecord emulation. Its code is
|
||||
independent of cdrecord. Its DVD capabilities are learned from
|
||||
studying the code of dvd+rw-tools and MMC-5 specs. No code but only
|
||||
the pure SCSI knowledge has been taken from dvd+rw-tools, though.
|
||||
|
||||
- libisofs is the library to pack up hard disk files and directories into a
|
||||
ISO 9660 disk image. This may then be brought to media via libburn.
|
||||
ISO 9660 disk image. This may then be brought to CD via libburn.
|
||||
libisofs is to be the foundation of our upcoming mkisofs emulation.
|
||||
|
||||
- libisoburn is an add-on to libburn and libisofs which coordinates both and
|
||||
also allows to grow ISO-9660 filesystem images on multi-session
|
||||
media as well as on overwriteable media via the same API.
|
||||
All media peculiarities are handled automatically.
|
||||
|
||||
- cdrskin is a limited cdrecord compatibility wrapper for libburn.
|
||||
Cdrecord is a powerful GPL'ed burn program included in Joerg
|
||||
cdrecord is a powerful GPL'ed burn program included in Joerg
|
||||
Schilling's cdrtools. cdrskin strives to be a second source for
|
||||
the services traditionally provided by cdrecord. Additionally it
|
||||
provides libburn's DVD capabilities, where only -sao is compatible
|
||||
@ -97,14 +113,34 @@ The project components (list subject to growth, hopefully):
|
||||
cdrskin does not contain any bytes copied from cdrecord's sources.
|
||||
Many bytes have been copied from the message output of cdrecord
|
||||
runs, though.
|
||||
See cdrskin/README and man cdrskin/cdrskin.1 for more.
|
||||
See cdrskin/README for more.
|
||||
|
||||
- test is a collection of application gestures and examples given by the
|
||||
authors of the library features. The main API example for libburn
|
||||
is test/libburner.c .
|
||||
- xorriso is an application of all three libraries which creates, loads,
|
||||
manipulates and writes ISO 9660 filesystem images with
|
||||
Rock Ridge extensions. Manipulation is not only adding or
|
||||
overwriting of files but also deletion, renaming, and attribute
|
||||
changing.
|
||||
See xorriso/README for more.
|
||||
|
||||
- "test" is a collection of application gestures and examples given by the
|
||||
authors of the library features. The burn API example of libburn
|
||||
is named test/libburner.c . The API for media information inquiry is
|
||||
demonstrated in test/telltoc.c .
|
||||
Explore these examples if you look for inspiration.
|
||||
|
||||
We plan to be a responsive upstream. Bear with us. We are still practicing.
|
||||
We strive to be a responsive upstream.
|
||||
|
||||
Our libraries are committed to maintain older feature sets in newer versions.
|
||||
This applies to source code headers (API) as well as to linkable objects (ABI).
|
||||
The only exception from this rule is about non-release versions x.y.*[13579]
|
||||
which are allowed to introduce new features, change those new features in
|
||||
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.
|
||||
|
||||
SONAMES:
|
||||
libburn.so.4 (since 0.3.4, March 2007),
|
||||
libisofs.so.6 (since 0.6.2, February 2008),
|
||||
libisoburn.so.1 (since 0.1.0, February 2008).
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
@ -210,6 +246,24 @@ Project history as far as known to me:
|
||||
by these enhancements: growing of overwriteable media and disk files.
|
||||
Taking again a bow towards Andy Polyakov.
|
||||
|
||||
- 26th Januar 2008 version 0.4.2 rectifies the version numbering so that we
|
||||
reliably release libburn.so.4 as should have been done since libburn-0.3.2.
|
||||
cdrskin now is by default linked dynamically and does a runtime check
|
||||
to ensure not to be started with a libburn which is older than itself.
|
||||
|
||||
- 3rd Feb 2008 libisofs-0.2.x (.so.5) has been deprecated.
|
||||
|
||||
- 14th Feb 2008 libisofs-0.6.2 permanently replaces the old libisofs-0.2.x.
|
||||
It is the first release of new libisofs.so.6 which will guarantee future
|
||||
API/ABI compatibility for its whole feature set.
|
||||
|
||||
- 15th Feb 2008 libisoburn-0.1.0 (.so.1) coordinates libisofs and libburn for
|
||||
the purpose of ISO image reading and writing. It emulates multi-session on
|
||||
overwriteable media. Application xorriso makes use of all three libraries.
|
||||
|
||||
- 8th Apr 2008 libburn-0.4.4 has proven to be capable of burning to DVD+R/DL
|
||||
and read performance on disk file pseudo-drives has been improved.
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
@ -4,8 +4,8 @@
|
||||
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
|
||||
Integrated sub project of libburnia-project.org but also published via:
|
||||
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
||||
http://scdbackup.sourceforge.net/cdrskin-0.4.0.pl00.tar.gz
|
||||
Copyright (C) 2006-2007 Thomas Schmitt, provided under GPL version 2.
|
||||
http://scdbackup.sourceforge.net/cdrskin-0.4.4.pl00.tar.gz
|
||||
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -20,17 +20,17 @@ By using this software you agree to the disclaimer at the end of this text
|
||||
|
||||
Compilation, First Glimpse, Installation
|
||||
|
||||
Obtain cdrskin-0.4.0.pl00.tar.gz, take it to a directory of your choice and do:
|
||||
Obtain cdrskin-0.4.4.pl00.tar.gz, take it to a directory of your choice and do:
|
||||
|
||||
tar xzf cdrskin-0.4.0.pl00.tar.gz
|
||||
cd cdrskin-0.4.0
|
||||
tar xzf cdrskin-0.4.4.pl00.tar.gz
|
||||
cd cdrskin-0.4.4
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
./configure --prefix=/usr
|
||||
make
|
||||
|
||||
This will already produce a cdrskin binary. But it might be necessary to
|
||||
This will already produce a cdrskin binary. But it will be necessary to
|
||||
install libburn in order to use this binary. Installation of libburn is
|
||||
beyond the scope of cdrskin. For this, see included libburn docs.
|
||||
|
||||
@ -44,11 +44,21 @@ Version identification and help texts available afterwards:
|
||||
cdrskin/cdrskin -help
|
||||
man cdrskin/cdrskin.1
|
||||
|
||||
|
||||
Install (eventually as superuser) cdrskin to a directory where it can be found:
|
||||
If cdrskin was already installed by a previous version, or by "make install"
|
||||
in the course of this installation, then find out where:
|
||||
The command for global installation of both, libburn and cdrskin is
|
||||
make install
|
||||
If the library libburn.so.4 is not found with a test run of cdrskin, then
|
||||
try whether command
|
||||
ldconfig
|
||||
makes it accessible. With the statically linked binary this should not matter.
|
||||
|
||||
You may as well do the few necessary actions manually. If cdrskin was
|
||||
already installed by a previous version, or by "make install" in the course
|
||||
of this installation, then find out where:
|
||||
which cdrskin
|
||||
Copy your standalone binary to exactly the address which you get as reply
|
||||
Copy your standalone binary to exactly the address which you get as reply.
|
||||
E.g.:
|
||||
|
||||
cp cdrskin/cdrskin /usr/bin/cdrskin
|
||||
|
||||
@ -142,7 +152,7 @@ Burn image file my_image.iso to media
|
||||
cdrskin -v dev=0,1,0 speed=12 fs=8m driveropts=burnfree padsize=300k \
|
||||
-eject my_image.iso
|
||||
|
||||
Write multi-session to the same CD , DVD-R[W] or DVD+R
|
||||
Write multi-session to the same CD , DVD-R[W] or DVD+R[/DL]
|
||||
cdrskin dev=/dev/hdc padsize=300k -multi 1.iso
|
||||
cdrskin dev=/dev/hdc padsize=300k -multi -tao 2.iso
|
||||
cdrskin dev=/dev/hdc padsize=300k -multi -tao 3.iso
|
||||
@ -331,10 +341,13 @@ Incremental Streaming afterwards. So blank=fast will do full blanking.
|
||||
blank=deformat_sequential_quickest is faster but might yield DAO-only media.
|
||||
|
||||
|
||||
DVD+R
|
||||
DVD+R and DVD+R/DL
|
||||
|
||||
From the view of cdrskin they behave much like DVD-R. Each track gets wrapped
|
||||
into an own session, though.
|
||||
DVD+R/DL appear as extra large DVD+R. cdrskin does not allow to set the address
|
||||
of the layer break where ia reading drive might show some delay while switching
|
||||
between both media layers.
|
||||
|
||||
|
||||
Emulated Drives
|
||||
@ -398,9 +411,8 @@ contributions in a due way.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
it under the terms of the GNU General Public License version 2
|
||||
as published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -415,7 +427,7 @@ contributions in a due way.
|
||||
Based on and sub project of:
|
||||
libburnia-project.org
|
||||
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (C) 2006-2007 Mario Danic, Thomas Schmitt
|
||||
Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
|
||||
|
||||
libburnia-project.org is inspired by and in other components still containing
|
||||
parts of
|
||||
|
@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
|
||||
# My changes are in $changes , mainly in $changes/cdrskin
|
||||
changes="./libburn-release"
|
||||
|
||||
skin_release="0.4.0"
|
||||
skin_release="0.4.4"
|
||||
patch_level=".pl00"
|
||||
skin_rev="$skin_release""$patch_level"
|
||||
|
||||
@ -58,7 +58,8 @@ compile_result="cdrskin/cdrskin"
|
||||
man_to_html_cmd="./cdrskin/convert_man_to_html.sh"
|
||||
man_page_html="cdrskin/man_1_cdrskin.html"
|
||||
|
||||
bintarget_dynamic="cdrskin_${skin_rev}-x86-suse9_0"
|
||||
# bintarget_dynamic="cdrskin_${skin_rev}-x86-suse9_0"
|
||||
bintarget_dynamic="cdrskin_${skin_rev}-amd64-suse10_2"
|
||||
bintarget_static="$bintarget_dynamic"-static
|
||||
|
||||
if test -d "$changes"
|
@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
|
||||
# My changes are in $changes , mainly in $changes/cdrskin
|
||||
changes="./libburn-develop"
|
||||
|
||||
skin_release="0.4.1"
|
||||
skin_release="0.4.5"
|
||||
patch_level=""
|
||||
skin_rev="$skin_release""$patch_level"
|
||||
|
||||
@ -58,7 +58,7 @@ compile_result="cdrskin/cdrskin"
|
||||
man_to_html_cmd="./cdrskin/convert_man_to_html.sh"
|
||||
man_page_html="cdrskin/man_1_cdrskin.html"
|
||||
|
||||
bintarget_dynamic="cdrskin_${skin_rev}-x86-suse9_0"
|
||||
bintarget_dynamic="cdrskin_${skin_rev}-amd64-suse10_2"
|
||||
bintarget_static="$bintarget_dynamic"-static
|
||||
|
||||
if test -d "$changes"
|
@ -16,8 +16,8 @@
|
||||
.\" .sp <n> insert n+1 empty lines
|
||||
.\" for manpage-specific macros, see man(7)
|
||||
.SH NAME
|
||||
cdrskin \- burns preformatted data to CD-R[W], DVD-R[W], DVD+R[W], DVD-RAM
|
||||
via libburn.
|
||||
cdrskin \- burns preformatted data to CD-R[W], DVD-R[W], DVD+R[W], DVD+R/DL,
|
||||
DVD-RAM via libburn.
|
||||
.SH SYNOPSIS
|
||||
.B cdrskin
|
||||
.RI [ options | track_source_addresses ]
|
||||
@ -44,7 +44,7 @@ or in Session at Once mode for seamless tracks.
|
||||
.br
|
||||
Multi session on CD (follow-up sessions in TAO only)
|
||||
.br
|
||||
or on DVD-R[W] (in Incremental mode) or on DVD+R.
|
||||
or on DVD-R[W] (in Incremental mode) or on DVD+R[/DL].
|
||||
.br
|
||||
Single session on DVD-RW or DVD-R (Disk-at-once).
|
||||
.br
|
||||
@ -148,8 +148,8 @@ read-only. Closing is done automatically unless option
|
||||
is given which keeps the media appendable.
|
||||
.br
|
||||
Write mode
|
||||
-tao allows to use track source of unpredictable length (like stdin) and allows
|
||||
to write further sessions to appendable media.
|
||||
-tao allows to use track sources of unpredictable length (like stdin) and
|
||||
allows to write further sessions to appendable media.
|
||||
-sao produces audio sessions with seamless tracks but needs predicted track
|
||||
sizes and cannot append sessions to media.
|
||||
.br
|
||||
@ -163,7 +163,7 @@ Multiple cycles of blanking and overwriting with random numbers might be.
|
||||
.SS
|
||||
.B Sequentially Recordable DVD Media:
|
||||
.br
|
||||
Currently DVD-RW, DVD-R and DVD+R can be used for the Sequential recording
|
||||
Currently DVD-RW, DVD-R and DVD+R[/DL] can be used for the Sequential recording
|
||||
model.
|
||||
.br
|
||||
DVD-RW must be in state "Sequential Recording".
|
||||
@ -198,9 +198,9 @@ unpredicted length and to keep media appendable by option
|
||||
The only restriction towards CD-R[W] is the lack of support for -audio tracks.
|
||||
Multiple tracks per session are permissible.
|
||||
.br
|
||||
The write modes for DVD+R resemble those with DVD-R except that with DVD+R
|
||||
The write modes for DVD+R[/DL] resemble those with DVD-R except that with +R
|
||||
each track gets wrapped in an own session. There is no -dummy writing with
|
||||
DVD+R.
|
||||
DVD+R[/DL].
|
||||
.br
|
||||
Quite deliberately write mode -sao insists in the tradition of a predicted
|
||||
track size and blank media, whereas -tao writes the tracks open ended and
|
||||
@ -278,7 +278,9 @@ and device files which have the same SCSI address parameters (e.g. /dev/sg0).
|
||||
.SS
|
||||
.B Emulated drives:
|
||||
.br
|
||||
Option --allow_emulated_drives enables addressing of pseudo-drives
|
||||
Option
|
||||
.B --allow_emulated_drives
|
||||
enables addressing of pseudo-drives
|
||||
which get emulated on top of filesystem objects. Regular data files and
|
||||
block devices result in pseudo-drives which behave much like DVD-RAM.
|
||||
If the given address does not exist yet but its directory exists, then
|
||||
@ -596,7 +598,7 @@ One should use it only if inavoidable.
|
||||
.TP
|
||||
.BI \-sao
|
||||
Write CD in Session At Once mode, a sequential DVD-R[W] in Disc-at-once
|
||||
(DAO) mode, or a DVD+R.
|
||||
(DAO) mode, or a DVD+R[/DL].
|
||||
.br
|
||||
With CD this mode is able to put several audio tracks on media without
|
||||
producing audible gaps between them.
|
||||
@ -604,8 +606,8 @@ producing audible gaps between them.
|
||||
With DVD-R[W] this mode can only write a single track.
|
||||
No -multi is allowed with DVD-R[W] -sao.
|
||||
.br
|
||||
-sao is permissible with overwriteable DVD and with DVD+R but actually only
|
||||
imposes restrictions without providing known advantages.
|
||||
-sao is permissible with overwriteable DVD and with DVD+R[/DL] but actually
|
||||
only imposes restrictions without providing known advantages.
|
||||
.br
|
||||
-sao can only be used for tracks of fixely predicted size. This implies that
|
||||
track arguments which depict stdin or named pipes need to be preceeded by
|
||||
@ -645,7 +647,7 @@ suffix ".wav".
|
||||
.TP
|
||||
.BI \-tao
|
||||
Write CD in Track At Once (TAO) mode, sequential DVD-R[W] in Incremental
|
||||
Streaming mode, or DVD+R without traditional -sao restrictions.
|
||||
Streaming mode, or DVD+R[/DL] without traditional -sao restrictions.
|
||||
This mode also applies pro-forma to overwriteable DVD media.
|
||||
.br
|
||||
Mode -tao can be used with track sources of unpredictable size, like standard
|
||||
@ -949,7 +951,7 @@ tested. Currently this applies to :
|
||||
.br
|
||||
Profile 0015h , DVD-R/DL Sequential (will not allow -multi).
|
||||
.br
|
||||
Profile 002Bh , DVD+R/DL.
|
||||
Profile 0043h , BD-RE.
|
||||
.br
|
||||
If you really test such media, then please report the outcome on
|
||||
libburn-hackers@pykix.org
|
||||
@ -1129,7 +1131,7 @@ cdrskin -v dev=0,1,0 fs=32m speed=8 \\
|
||||
.br
|
||||
-tao padsize=300k -
|
||||
.SS
|
||||
.B Write multi-session to the same CD, DVD-R[W] or DVD+R:
|
||||
.B Write multi-session to the same CD, DVD-R[W] or DVD+R[/DL]:
|
||||
.br
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 1.iso
|
||||
.br
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
/*
|
||||
cdrskin.c , Copyright 2006-2007 Thomas Schmitt <scdbackup@gmx.net>
|
||||
cdrskin.c , Copyright 2006-2008 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2. See future commitment below.
|
||||
|
||||
A cdrecord compatible command line interface for libburn.
|
||||
@ -88,9 +88,23 @@ or
|
||||
|
||||
/** The official program version */
|
||||
#ifndef Cdrskin_prog_versioN
|
||||
#define Cdrskin_prog_versioN "0.4.0"
|
||||
#define Cdrskin_prog_versioN "0.4.4"
|
||||
#endif
|
||||
|
||||
/** The official libburn interface revision to use.
|
||||
(May get changed further below)
|
||||
*/
|
||||
#ifndef Cdrskin_libburn_majoR
|
||||
#define Cdrskin_libburn_majoR 0
|
||||
#endif
|
||||
#ifndef Cdrskin_libburn_minoR
|
||||
#define Cdrskin_libburn_minoR 4
|
||||
#endif
|
||||
#ifndef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_micrO 4
|
||||
#endif
|
||||
|
||||
|
||||
/** The source code release timestamp */
|
||||
#include "cdrskin_timestamp.h"
|
||||
#ifndef Cdrskin_timestamP
|
||||
@ -121,28 +135,48 @@ or
|
||||
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
||||
|
||||
|
||||
#ifdef Cdrskin_libburn_0_4_0
|
||||
#define Cdrskin_libburn_versioN "0.4.0"
|
||||
#ifdef Cdrskin_libburn_0_4_4
|
||||
#define Cdrskin_libburn_versioN "0.4.4"
|
||||
#define Cdrskin_libburn_from_pykix_svN 1
|
||||
#endif /* Cdrskin_libburn_0_4_0 */
|
||||
#endif /* Cdrskin_libburn_0_4_2 */
|
||||
|
||||
#ifdef Cdrskin_libburn_0_4_1
|
||||
#define Cdrskin_libburn_versioN "0.4.1"
|
||||
#ifdef Cdrskin_libburn_0_4_5
|
||||
#define Cdrskin_libburn_versioN "0.4.5"
|
||||
#define Cdrskin_libburn_from_pykix_svN 1
|
||||
|
||||
/* Place novelty switch macros here.
|
||||
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
|
||||
*/
|
||||
|
||||
/* there are no novelties in 0.4.1 yet */
|
||||
/* there are no novelties in 0.4.5 yet */
|
||||
|
||||
#endif /* Cdrskin_libburn_0_4_1 */
|
||||
#endif /* Cdrskin_libburn_0_4_5 */
|
||||
|
||||
#ifndef Cdrskin_libburn_versioN
|
||||
#define Cdrskin_libburn_versioN "0.4.0"
|
||||
#define Cdrskin_libburn_0_4_4
|
||||
#define Cdrskin_libburn_versioN "0.4.4"
|
||||
#define Cdrskin_libburn_from_pykix_svN 1
|
||||
#endif
|
||||
|
||||
#ifdef Cdrskin_libburn_0_4_4
|
||||
#undef Cdrskin_libburn_majoR
|
||||
#undef Cdrskin_libburn_minoR
|
||||
#undef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_majoR 0
|
||||
#define Cdrskin_libburn_minoR 4
|
||||
#define Cdrskin_libburn_micrO 4
|
||||
#endif
|
||||
#ifdef Cdrskin_libburn_0_4_5
|
||||
#undef Cdrskin_libburn_majoR
|
||||
#undef Cdrskin_libburn_minoR
|
||||
#undef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_majoR 0
|
||||
#define Cdrskin_libburn_minoR 4
|
||||
#define Cdrskin_libburn_micrO 5
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef Cdrskin_libburn_from_pykix_svN
|
||||
#ifndef Cdrskin_oldfashioned_api_usE
|
||||
|
||||
@ -205,6 +239,11 @@ or
|
||||
#define Cdrskin_libburn_has_get_drive_rolE 1
|
||||
#define Cdrskin_libburn_has_drive_equals_adR 1
|
||||
|
||||
/* 0.4.2 */
|
||||
/* no novel features but rather organizational changes */
|
||||
|
||||
/* 0.4.4 */
|
||||
/* support for DVD+R/DL media is now official, BD-RE is experimental */
|
||||
|
||||
#ifdef Cdrskin_new_api_tesT
|
||||
|
||||
@ -1870,13 +1909,60 @@ int Cdrpreskin_set_severities(struct CdrpreskiN *preskin, char *queue_severity,
|
||||
|
||||
int Cdrpreskin_initialize_lib(struct CdrpreskiN *preskin, int flag)
|
||||
{
|
||||
int ret;
|
||||
int ret, major, minor, micro;
|
||||
|
||||
/* This is the minimum requirement of cdrskin towards the libburn header
|
||||
at compile time.
|
||||
It gets compared against the version macros in libburn/libburn.h :
|
||||
burn_header_version_major
|
||||
burn_header_version_minor
|
||||
burn_header_version_micro
|
||||
If the header is too old then the following code shall cause failure of
|
||||
cdrskin compilation rather than to allow production of a program with
|
||||
unpredictable bugs or memory corruption.
|
||||
The compiler message supposed to appear in this case is:
|
||||
error: 'LIBBURN_MISCONFIGURATION' undeclared (first use in this function)
|
||||
error: 'INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libburn_dot_h_TOO_OLD__SEE_cdrskin_dot_c' undeclared (first use in this function)
|
||||
error: 'LIBBURN_MISCONFIGURATION_' undeclared (first use in this function)
|
||||
*/
|
||||
|
||||
/* The indendation is an advise of man gcc to help old compilers ignoring */
|
||||
#if Cdrskin_libburn_majoR > burn_header_version_major
|
||||
#define Cdrskin_libburn_dot_h_too_olD 1
|
||||
#endif
|
||||
#if Cdrskin_libburn_majoR == burn_header_version_major && Cdrskin_libburn_minoR > burn_header_version_minor
|
||||
#define Cdrskin_libburn_dot_h_too_olD 1
|
||||
#endif
|
||||
#if Cdrskin_libburn_minoR == burn_header_version_minor && Cdrskin_libburn_micrO > burn_header_version_micro
|
||||
#define Cdrskin_libburn_dot_h_too_olD 1
|
||||
#endif
|
||||
|
||||
#ifdef Cdrskin_libburn_dot_h_too_olD
|
||||
LIBBURN_MISCONFIGURATION = 0;
|
||||
INTENTIONAL_ABORT_OF_COMPILATION__HEADERFILE_libburn_dot_h_TOO_OLD__SEE_cdrskin_dot_c = 0;
|
||||
LIBBURN_MISCONFIGURATION_ = 0;
|
||||
#endif
|
||||
|
||||
ret= burn_initialize();
|
||||
if(ret==0) {
|
||||
fprintf(stderr,"cdrskin : FATAL : Initialization of libburn failed\n");
|
||||
fprintf(stderr,"cdrskin: FATAL : Initialization of libburn failed\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* This is the runtime check towards eventual dynamically linked libburn.
|
||||
cdrskin deliberately does not to allow the library to be older than
|
||||
the header file which was seen at compile time. More liberal would be
|
||||
to use here Cdrskin_libburn_* instead of burn_header_version_* .
|
||||
*/
|
||||
burn_version(&major, &minor, µ);
|
||||
if(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)))) {
|
||||
fprintf(stderr,"cdrskin: FATAL : libburn version too old: %d.%d.%d . Need at least: %d.%d.%d .\n",
|
||||
major, minor, micro,
|
||||
Cdrskin_libburn_majoR, Cdrskin_libburn_minoR, Cdrskin_libburn_micrO);
|
||||
return(-1);
|
||||
}
|
||||
Cdrpreskin_set_severities(preskin,NULL,NULL,0);
|
||||
return(1);
|
||||
}
|
||||
@ -2502,7 +2588,7 @@ set_dev:;
|
||||
|
||||
printf("\n");
|
||||
printf("Usage: %s [options|source_addresses]\n", argv[0]);
|
||||
printf("Burns preformatted data to CD-R, CD-RW or DVD+RW via libburn.\n");
|
||||
printf("Burns preformatted data to CD or DVD via libburn.\n");
|
||||
printf("For the cdrecord compatible options which control the work of\n");
|
||||
printf(
|
||||
"blanking and burning see output of option -help rather than --help.\n");
|
||||
@ -2773,9 +2859,15 @@ set_severities:;
|
||||
goto set_severities;
|
||||
|
||||
} else if(strcmp(argv[i],"-version")==0) {
|
||||
int major, minor, micro;
|
||||
|
||||
printf(
|
||||
"Cdrecord 2.01-Emulation Copyright (C) 2006-2007, see libburnia-project.org\n");
|
||||
printf("libburn version : %s\n",Cdrskin_libburn_versioN);
|
||||
"Cdrecord 2.01-Emulation Copyright (C) 2006-2008, see libburnia-project.org\n");
|
||||
printf("libburn interface : %d.%d.%d\n",
|
||||
burn_header_version_major, burn_header_version_minor,
|
||||
burn_header_version_micro);
|
||||
burn_version(&major, &minor, µ);
|
||||
printf("libburn in use : %d.%d.%d\n", major, minor, micro);
|
||||
|
||||
#ifndef Cdrskin_extra_leaN
|
||||
printf("cdrskin version : %s\n",Cdrskin_prog_versioN);
|
||||
@ -2861,7 +2953,7 @@ final_checks:;
|
||||
dev_too_long:;
|
||||
fprintf(stderr,
|
||||
"cdrskin: FATAL : dev=... too long (max. %d characters)\n",
|
||||
sizeof(o->device_adr)-1);
|
||||
(int) sizeof(o->device_adr)-1);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
strcpy(o->device_adr,adr);
|
||||
@ -6975,7 +7067,7 @@ set_driveropts:;
|
||||
if(strlen(argv[i]+13)>=sizeof(skin->eject_device)) {
|
||||
fprintf(stderr,
|
||||
"cdrskin: FATAL : eject_device=... too long. (max: %d, given: %d)\n",
|
||||
sizeof(skin->eject_device)-1,strlen(argv[i]+13));
|
||||
(int) sizeof(skin->eject_device)-1,(int) strlen(argv[i]+13));
|
||||
return(0);
|
||||
}
|
||||
strcpy(skin->eject_device,argv[i]+13);
|
||||
@ -7238,7 +7330,7 @@ msifile_equals:;
|
||||
if(strlen(value_pt)>=sizeof(skin->msifile)) {
|
||||
fprintf(stderr,
|
||||
"cdrskin: FATAL : msifile=... too long. (max: %d, given: %d)\n",
|
||||
sizeof(skin->msifile)-1,strlen(value_pt));
|
||||
(int) sizeof(skin->msifile)-1,(int) strlen(value_pt));
|
||||
return(0);
|
||||
}
|
||||
strcpy(skin->msifile, value_pt);
|
||||
@ -7423,7 +7515,7 @@ track_too_large:;
|
||||
if(strlen(argv[i])>=sizeof(skin->source_path)) {
|
||||
fprintf(stderr,
|
||||
"cdrskin: FATAL : Source address too long. (max: %d, given: %d)\n",
|
||||
sizeof(skin->source_path)-1,strlen(argv[i]));
|
||||
(int) sizeof(skin->source_path)-1,(int) strlen(argv[i]));
|
||||
return(0);
|
||||
}
|
||||
source_has_size= 0;
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<HEAD>
|
||||
<META NAME="description" CONTENT="cdrskin, a limited cdrecord compatibility wrapper for libburn">
|
||||
<META NAME="keywords" CONTENT="cdrskin, libburn, libburnia, burn, CD, DVD, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, cdrecord, compatible, scdbackup">
|
||||
<META NAME="keywords" CONTENT="cdrskin, libburn, libburnia, burn, CD, DVD, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, DVD+R/DL, DVD-RAM, cdrecord, compatible, scdbackup">
|
||||
<META NAME="robots" CONTENT="follow">
|
||||
<TITLE>cdrskin homepage english</TITLE>
|
||||
</HEAD>
|
||||
@ -24,8 +24,8 @@
|
||||
|
||||
<P>
|
||||
<H2>Purpose:</H2>
|
||||
Burns preformatted data to CD and single layer DVD media:<BR>
|
||||
CD-R, DVD-R, DVD+R, CD-RW, DVD-RW, DVD-RAM, DVD+RW
|
||||
Burns preformatted data to CD and DVD media:<BR>
|
||||
CD-R, DVD-R, DVD+R, DVD+R/DL, CD-RW, DVD-RW, DVD-RAM, DVD+RW
|
||||
</P>
|
||||
<P>
|
||||
|
||||
@ -56,7 +56,7 @@ and to MMC-5 for DVD).
|
||||
GPL software included:<BR>
|
||||
</H2>
|
||||
<DL>
|
||||
<DT>libburn-0.4.0</DT>
|
||||
<DT>libburn-0.4.4</DT>
|
||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||
furthered by team of libburnia-project.org)</DD>
|
||||
<DD>transfers data to CD and DVD</DD>
|
||||
@ -125,7 +125,7 @@ as listed by option --devices.</DT>
|
||||
<DD><KBD> cdrskin -v dev=0,1,0 fs=32m speed=8 \</KBD></DD>
|
||||
<DD><KBD> -tao padsize=300k -</KBD></DD>
|
||||
|
||||
<DT>Write several sessions to the same CD, DVD-R[W] or DVD+R:</DT>
|
||||
<DT>Write several sessions to the same CD, DVD-R[W] or DVD+R[/DL]:</DT>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 1.iso</KBD>
|
||||
</DD>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 2.iso</KBD>
|
||||
@ -166,8 +166,16 @@ man cdrecord</A></KBD></DD>
|
||||
this "don't bother Joerg" demand.)
|
||||
</DD>
|
||||
</DL>
|
||||
<DL>
|
||||
<DT>Learn to know a more versatile way to burn ISO 9660 formatted data</DT>
|
||||
<DD>
|
||||
Standalone ISO 9660 multi-session CD/DVD tool
|
||||
<A HREF="http://scdbackup.sourceforge.net/xorriso_eng.html">xorriso</A>.
|
||||
</DD>
|
||||
</DL>
|
||||
|
||||
Testers wanted who are willing to risk some double layer DVD media.
|
||||
Testers wanted who are willing to risk some double layer DVD-R media
|
||||
or to do experiments on BD-RE.
|
||||
|
||||
</P>
|
||||
|
||||
@ -176,8 +184,8 @@ Testers wanted who are willing to risk some double layer DVD media.
|
||||
<P>
|
||||
<DL>
|
||||
<DT>Download as source code (see README):</DT>
|
||||
<DD><A HREF="cdrskin-0.4.0.pl00.tar.gz">cdrskin-0.4.0.pl00.tar.gz</A>
|
||||
(680 KB).
|
||||
<DD><A HREF="cdrskin-0.4.4.pl00.tar.gz">cdrskin-0.4.4.pl00.tar.gz</A>
|
||||
(715 KB).
|
||||
</DD>
|
||||
<DD>
|
||||
The cdrskin tarballs are source code identical with libburn releases
|
||||
@ -185,20 +193,25 @@ of the same version number.
|
||||
They get produced via a different procedure, though.<BR>
|
||||
cdrskin is part of libburn - full libburn is provided with cdrskin releases.
|
||||
</DD>
|
||||
|
||||
<!-- This is not offered any more for 0.4.4 and 0.4.5
|
||||
<DD> </DD>
|
||||
<DT>Download as single x86 binaries (untar and move to /usr/bin/cdrskin):</DT>
|
||||
<DD><A HREF="cdrskin_0.4.0.pl00-x86-suse9_0.tar.gz">
|
||||
cdrskin_0.4.0.pl00-x86-suse9_0.tar.gz</A>, (106 KB),
|
||||
<DD><A HREF="cdrskin_0.4.2.pl00-x86-suse9_0.tar.gz">
|
||||
cdrskin_0.4.2.pl00-x86-suse9_0.tar.gz</A>, (110 KB),
|
||||
<DL>
|
||||
<DD>runs on SuSE 9.0 (2.4.21) , RIP-14.4 (2.6.14) ,
|
||||
Gentoo (2.6.15 x86_64 Athlon).</DD>
|
||||
</DL>
|
||||
<DD><A HREF="cdrskin_0.4.0.pl00-x86-suse9_0-static.tar.gz">
|
||||
cdrskin_0.4.0.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
||||
<DD><A HREF="cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz">
|
||||
cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
||||
<DL>
|
||||
<DD>runs on SuSE 7.2 (2.4.4), and on the systems above.</DD>
|
||||
</DL>
|
||||
</DD>
|
||||
-->
|
||||
|
||||
|
||||
</DL>
|
||||
<DL><DT>Documentation:</DT>
|
||||
<DD><A HREF="README_cdrskin">README</A> an introduction</DD>
|
||||
@ -221,18 +234,14 @@ cdrskin_0.4.0.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
||||
<HR>
|
||||
|
||||
<P>
|
||||
Enhancements towards previous stable version cdrskin-0.3.8:
|
||||
Enhancements towards previous stable version cdrskin-0.4.2:
|
||||
<UL>
|
||||
<LI>New option direct_write_amount=</LI>
|
||||
<LI>New option --grow_overwriteable_iso</LI>
|
||||
<LI>New option --allow_emulated_drives dev=stdio:<path></LI>
|
||||
<LI>More cdrecord options supported:
|
||||
-format, -inq, -load, -lock, -immed, -waiti</LI>
|
||||
<LI>New option fallback_program=</LI>
|
||||
<LI>Support for DVD+R/DL media is now official</LI>
|
||||
<LI>Experimental code for BD-RE with --allow_untested_media</LI>
|
||||
</UL>
|
||||
|
||||
<!--
|
||||
Bug fixes towards cdrskin-0.4.0.pl00:
|
||||
Bug fixes towards cdrskin-0.4.2.pl00:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
</UL>
|
||||
@ -244,25 +253,25 @@ Enhancements towards previous stable version cdrskin-0.3.8:
|
||||
|
||||
<P>
|
||||
<DL>
|
||||
<DT><H3>Development snapshot, version 0.4.1 :</H3></DT>
|
||||
<DD>Enhancements towards stable version 0.4.0.pl00:
|
||||
<DT><H3>Development snapshot, version 0.4.5 :</H3></DT>
|
||||
<DD>Enhancements towards stable version 0.4.4.pl00:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
<!--
|
||||
-->
|
||||
<LI>none yet</LI>
|
||||
</UL>
|
||||
</DD>
|
||||
<DD> </DD>
|
||||
<DD><A HREF="README_cdrskin_devel">README 0.4.1</A>
|
||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.4.1 --help</A></DD>
|
||||
<DD><A HREF="cdrskin_help_devel">cdrskin_0.4.1 -help</A></DD>
|
||||
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.4.1)</A></DD>
|
||||
<DD><A HREF="README_cdrskin_devel">README 0.4.5</A>
|
||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.4.5 --help</A></DD>
|
||||
<DD><A HREF="cdrskin_help_devel">cdrskin_0.4.5 -help</A></DD>
|
||||
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.4.5)</A></DD>
|
||||
<DD> </DD>
|
||||
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
||||
<DD>Download: <KBD><B>svn co http://svn.libburnia-project.org/libburn/trunk libburn</B>
|
||||
</KBD></DD>
|
||||
<DD>Build: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make</B>
|
||||
<DD>Build: <KBD><B>cd libburn ; ./bootstrap ; ./configure --prefix /usr ; make ; cdrskin/compile_cdrskin.sh</B>
|
||||
</KBD></DD>
|
||||
<DD>Build of SVN versions needs <A HREF="http://sources.redhat.com/autobook/">
|
||||
autotools</A> of at least version 1.7 installed.
|
||||
@ -270,22 +279,29 @@ But after the run of <KBD>./bootstrap</KBD>, only
|
||||
vanilla tools like make and gcc are needed.</DD>
|
||||
</DD>
|
||||
<DD> </DD>
|
||||
<DT>The following downloads are intended for adventurous end users or
|
||||
<DT>The following download is intended for adventurous end users or
|
||||
admins with full system souvereignty.</DT>
|
||||
<DD>Source (./bootstrap is already applied, build tested, for more see
|
||||
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
||||
</DD>
|
||||
<DD>
|
||||
<A HREF="cdrskin-0.4.1.tar.gz">cdrskin-0.4.1.tar.gz</A>
|
||||
(680 KB).
|
||||
<A HREF="cdrskin-0.4.5.tar.gz">cdrskin-0.4.5.tar.gz</A>
|
||||
(715 KB).
|
||||
</DD>
|
||||
|
||||
<!-- This is not offered any more for 0.4.4 and 0.4.5
|
||||
|
||||
<DT>The following downloads are intended for adventurous end users or
|
||||
admins with full system souvereignty.</DT>
|
||||
<DD>Binary (untar and move to /usr/bin/cdrskin):</DD>
|
||||
<DD><A HREF="cdrskin_0.4.1-x86-suse9_0.tar.gz">
|
||||
cdrskin_0.4.1-x86-suse9_0.tar.gz</A>, (105 KB).
|
||||
<DD><A HREF="cdrskin_0.4.3-x86-suse9_0.tar.gz">
|
||||
cdrskin_0.4.3-x86-suse9_0.tar.gz</A>, (110 KB).
|
||||
</DD>
|
||||
<DD><A HREF="cdrskin_0.4.1-x86-suse9_0-static.tar.gz">
|
||||
cdrskin_0.4.1-x86-suse9_0-static.tar.gz</A>, (310 KB)
|
||||
<DD><A HREF="cdrskin_0.4.3-x86-suse9_0-static.tar.gz">
|
||||
cdrskin_0.4.3-x86-suse9_0-static.tar.gz</A>, (310 KB)
|
||||
</DD>
|
||||
-->
|
||||
|
||||
</DL>
|
||||
</P>
|
||||
|
||||
@ -333,6 +349,8 @@ Example how to setup K3b to use cdrskin for burning data CD projects.
|
||||
is a GUI frontend which uses cdrecord for CD burning.)
|
||||
</P>
|
||||
|
||||
<!--
|
||||
|
||||
<HR>
|
||||
|
||||
<A NAME="scdbackup">
|
||||
@ -387,6 +405,8 @@ and try again.
|
||||
</DL>
|
||||
</P>
|
||||
|
||||
-->
|
||||
|
||||
<HR>
|
||||
|
||||
<A NAME="cdrecord">
|
||||
@ -446,13 +466,25 @@ and by <A HREF="http://sourceforge.net">sourceforge.net</A><BR>
|
||||
<HR>
|
||||
<DL>
|
||||
<DT>Links to my other published software projects :
|
||||
<DD><A HREF="http://scdbackup.webframe.org/xorriso_eng.html">
|
||||
xorriso, a standalone ISO 9660 multi-session CD/DVD burn tool.
|
||||
No mkisofs needed.
|
||||
<DL>
|
||||
<DD>
|
||||
<A HREF="http://scdbackup.sourceforge.net/xorriso_eng.html">
|
||||
(a second source of above)</A>
|
||||
</DD>
|
||||
</DL>
|
||||
</DD>
|
||||
<DD><A HREF=http://scdbackup.webframe.org/main_eng.html>
|
||||
scdbackup, multi volume CD backup</A>
|
||||
<DL><DD><A HREF=http://scdbackup.sourceforge.net/main_eng.html>
|
||||
(a second source of above)</A></DL>
|
||||
(a second source of above)</A></DD></DL></DD>
|
||||
<DD><A HREF=http://stic.sourceforge.net>Some Tools for Image Collectors</A>
|
||||
</DD>
|
||||
<DD><A HREF=http://scdbackup.webframe.org/pppoem>
|
||||
pppoem, a DSL throughput monitor (mainly for Linux kernel 2.4)</A>
|
||||
</DD>
|
||||
</DL>
|
||||
<BR><BR>
|
||||
Legal statement: This website does not serve any commercial purpose.<BR>
|
||||
|
@ -1 +1 @@
|
||||
#define Cdrskin_timestamP "2007.10.27.090421"
|
||||
#define Cdrskin_timestamP "2008.04.08.100001"
|
||||
|
@ -4768,23 +4768,468 @@ Removed useless alternative after zombies turned out to be caused by gdb
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.3.9 - 2007.10.23.150436
|
||||
|
||||
2007.10.23.150436 []
|
||||
2007.10.23.150436 [1240]
|
||||
cdrskin/changelog.txt
|
||||
Next cdrskin-0.3.9 cycle
|
||||
|
||||
23 Oct 2007 [1241]
|
||||
libcevap/main.c
|
||||
Preparations for lowercase class and function names
|
||||
|
||||
----------------------------- release - cdrskin-0.4.0.pl00 - 2007.10.
|
||||
23 Oct 2007 [1242]
|
||||
libcevap/libdax_model.txt
|
||||
Work goes on
|
||||
|
||||
23 Oct 2007 [1243]
|
||||
libcevap/cgen.c
|
||||
libcevap/ctyp.c
|
||||
Fixed a bug about arrays
|
||||
|
||||
2007.10.24.184233 [1248] branch/ZeroFourZero
|
||||
Makefile.am
|
||||
configure.ac
|
||||
README
|
||||
cdrskin/cdrskin.c
|
||||
cdrskin/README
|
||||
cdrskin/compile_cdrskin.sh
|
||||
cdrskin/cdrskin_timestamp.h
|
||||
cdrskin/wiki_plain.txt
|
||||
cdrskin/cdrskin_eng.html
|
||||
doc/comments
|
||||
Made number transition to 0.4.0
|
||||
|
||||
25 Oct 2007 [1249] branch/ZeroFourZero
|
||||
- cdrskin/add_ts_changes_to_libburn_0_3_8
|
||||
- cdrskin/add_ts_changes_to_libburn_0_3_9
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_4_0
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_4_1
|
||||
Updated cdrskin tarball generator
|
||||
|
||||
2007.10.25.091106 [1250]
|
||||
Makefile.am
|
||||
configure.ac
|
||||
README
|
||||
cdrskin/cdrskin.c
|
||||
cdrskin/README
|
||||
cdrskin/compile_cdrskin.sh
|
||||
cdrskin/cdrskin_timestamp.h
|
||||
cdrskin/wiki_plain.txt
|
||||
cdrskin/cdrskin_eng.html
|
||||
doc/comments
|
||||
Made number transition to 0.4.1
|
||||
|
||||
25 Oct 2007 [1251]
|
||||
- cdrskin/add_ts_changes_to_libburn_0_3_8
|
||||
- cdrskin/add_ts_changes_to_libburn_0_3_9
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_4_0
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_4_1
|
||||
Updated cdrskin tarball generator
|
||||
|
||||
25 Oct 2007 [1252] branch/ZeroFourZero
|
||||
cdrskin/cdrskin.c
|
||||
Added forgotten help text lines
|
||||
|
||||
2007.10.25.131841 [1253]
|
||||
cdrskin/cdrskin.c
|
||||
Added forgotten help text lines
|
||||
|
||||
2007.10.27.090421 [1254] [1256] branch/ZeroFourZero
|
||||
libburn/sg-linux.c
|
||||
Reacted on cdwrite@ message about INT_MAX in cdrom.h of kernel 2.6.23
|
||||
|
||||
2007.10.27.075309 [1255]
|
||||
libburn/sg-linux.c
|
||||
Reacted on cdwrite@ message about INT_MAX in cdrom.h of kernel 2.6.23
|
||||
|
||||
29 Oct 2007 [1272]
|
||||
- cdrskin/add_ts_changes_to_libburn_0_3_9
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_4_0
|
||||
Updated cdrskin release generator scripts
|
||||
|
||||
----------------------------- release - cdrskin-0.4.0.pl00 - 2007.10.27.090421
|
||||
* New option direct_write_amount=
|
||||
* New option --grow_overwriteable_iso
|
||||
* New option --allow_emulated_drives dev=stdio:<path>
|
||||
* More cdrecord options supported: -format, -inq, -load, -lock, -immed, -waiti
|
||||
* New option fallback_program=
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.4.1 - 2007.10.27.114207
|
||||
|
||||
2007.11.18.093952 [1307]
|
||||
libburn/libburn.h
|
||||
Marked loss of binary backward compatibility back in rev 655, libburn-0.3.1
|
||||
|
||||
18 Nov 2007 [1308]
|
||||
cdrskin/cdrskin.1
|
||||
Corrected a typo in cdrskin man page
|
||||
|
||||
2007.11.18.094209 [1309]
|
||||
cdrskin/cdrskin.c
|
||||
Reacted on build warnings on a 64 Bit system
|
||||
|
||||
2007.11.26.154817 [1310]
|
||||
libburn/libdax_audioxtr.c
|
||||
Reacted on build warnings on another system
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.4.1 - 2007.11.27.214003
|
||||
|
||||
2007.11.29.185342 [1312]
|
||||
libburn/drive.c
|
||||
libburn/mmc.c
|
||||
libburn/spc.c
|
||||
libburn/libdax_msgs.h
|
||||
Enabled reading of TOC from ROM drives (direly needed for xorriso)
|
||||
|
||||
29 Nov 2007 [1313]
|
||||
test/telltoc.c
|
||||
Adjusted meaning of --read_and_print count= -1
|
||||
|
||||
2007.12.07.185030 [1323]
|
||||
configure.ac
|
||||
An attempt to rectify .so numbering: SONAME=10, REV=1, AGE=6
|
||||
|
||||
2007.12.07.185206 [1324]
|
||||
libburn/async.c
|
||||
Made postponed change in thread management
|
||||
|
||||
8 Dec 2007 [1325]
|
||||
configure.ac
|
||||
Some changes in the comments
|
||||
|
||||
24 Dec 2008 [1338]
|
||||
libburn/libburn.h
|
||||
libburn/source.h
|
||||
libburn/source.c
|
||||
libburn/file.c
|
||||
libburn/write.c
|
||||
libburn/sector.c
|
||||
Implemented burn_source.cancel() in a binary backwards compatible way
|
||||
|
||||
2008.01.17.185051 [1383]
|
||||
libburn/libdax_msgs.h
|
||||
libburn/libdax_msgs.c
|
||||
Changed meaning of .driveno to .origin, introduced LIBDAX_MSGS_ORIGIN_* macros
|
||||
|
||||
17 Jan 2008 [1384]
|
||||
cdrskin/README
|
||||
Removed a reference to future GPL versions
|
||||
|
||||
2008.01.19.201702 [1396]
|
||||
libburn/read.c
|
||||
Fixed small bug about error messages with burn_read_data
|
||||
|
||||
2008.01.23.193345 [1405]
|
||||
libburn/read.c
|
||||
Made burn_read_data() issue messages about hopeless drive access errors
|
||||
|
||||
2008.01.23.193843 [1406]
|
||||
libburn/libburn.h
|
||||
libburn/libdax_msgs.h
|
||||
libburn/libdax_msgs.c
|
||||
Introduced message severity "FAILURE"
|
||||
|
||||
2008.01.23.211731 [1408]
|
||||
cdrskin/cdrskin.c
|
||||
configure.ac
|
||||
Implemented run time check of libburn version.
|
||||
|
||||
2008.01.23.213607 [1409]
|
||||
Makefile.am
|
||||
Dynamic cdrskin linking patch by Simon Huggins.
|
||||
|
||||
26 Jan 2008 [1420]
|
||||
cdrskin/convert_man_to_html.sh
|
||||
Adapted to man -H on my new system
|
||||
|
||||
2008.01.26.123054 [1421]
|
||||
libburn/libdax_msgs.h
|
||||
Ported change in vreixo message range from isoburn_msgs
|
||||
|
||||
2008.01.26.131519 [1422]
|
||||
libburn/drive.c
|
||||
Made a sudden end to all stdio drives in burn_abort()
|
||||
|
||||
2008.01.26.180241 [1426] [branch 1427]
|
||||
libburn/async.c
|
||||
Disabled debugging messages about thread properties
|
||||
|
||||
2008.01.26.200001 [branch 1428]
|
||||
Makefile.am
|
||||
configure.ac
|
||||
libburn-5.pc.in
|
||||
README
|
||||
cdrskin/cdrskin.c
|
||||
cdrskin/README
|
||||
cdrskin/compile_cdrskin.sh
|
||||
cdrskin/cdrskin_timestamp.h
|
||||
cdrskin/wiki_plain.txt
|
||||
cdrskin/cdrskin_eng.html
|
||||
Made number transition to 0.4.2 , libburn.so.4.7.0
|
||||
|
||||
27 Jan [branch 1429]
|
||||
cdrskin/cdrskin.c
|
||||
cdrskin/cdrskin_eng.html
|
||||
cdrskin/changelog.txt
|
||||
Adjustments after first round of testing
|
||||
|
||||
27 Jan [branch 1430]
|
||||
cdrskin/README
|
||||
cdrskin/cdrskin_eng.html
|
||||
Adjustments after testing
|
||||
|
||||
2008.01.27.143022 [1431]
|
||||
Makefile.am
|
||||
configure.ac
|
||||
libburn-5.pc.in
|
||||
README
|
||||
cdrskin/cdrskin.c
|
||||
cdrskin/README
|
||||
cdrskin/compile_cdrskin.sh
|
||||
cdrskin/cdrskin_timestamp.h
|
||||
cdrskin/wiki_plain.txt
|
||||
cdrskin/cdrskin_eng.html
|
||||
cdrskin/changelog.txt
|
||||
Made number transition to 0.4.3 , still libburn.so.4.7.0
|
||||
|
||||
27 Jan 2008 [branch 1433] [1432]
|
||||
- cdrskin/add_ts_changes_to_libburn_0_4_0
|
||||
- cdrskin/add_ts_changes_to_libburn_0_4_1
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_4_2
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_4_3
|
||||
Updated cdrskin tarball generator
|
||||
|
||||
2008.01.29.210821 [1442]
|
||||
configure.ac
|
||||
libburn/libburn.h
|
||||
Moving the major.minor.micro definition from configure.ac to libburn.h
|
||||
|
||||
2008.01.28.213001 [branch 1444]
|
||||
libburn/libburn.h
|
||||
Introduced copy of major.minor.micro definition in libburn.h of version 0.4.2
|
||||
|
||||
29 Jan 2008 [branch 1445] [branch 1447]
|
||||
Corrected description of major.minor.micro definition in libburn.h of version 0.4.2
|
||||
|
||||
2008.01.29.214110 [1446]
|
||||
libburn/libburn.h
|
||||
Corrected description of major.minor.micro definition in libburn.h
|
||||
|
||||
2008.01.31.111057 [1448]
|
||||
cdrskin/cdrskin.c
|
||||
Introduced compile time check of libburn header version
|
||||
|
||||
2008.02.01.100302 [1451] [branch 1453]
|
||||
- libburn-5.pc.in
|
||||
+ libburn-1.pc.in
|
||||
configure.ac
|
||||
Makefile.am
|
||||
Renamed libburn-5.pc to libburn-1.pc
|
||||
|
||||
2008.02.01.100530 [1452]
|
||||
cdrskin/cdrskin.c
|
||||
Changed "libburn interface :" version message to libburn.h macros
|
||||
|
||||
[branch ]
|
||||
cdrskin/cdrskin_timestamp.h
|
||||
cdrskin/changelog.txt
|
||||
Updated changelog before release
|
||||
|
||||
----------------------------- release - cdrskin-0.4.2.pl00 - 2008.02.01.100001
|
||||
* Safe dynamic linking possible with libburn.so.4
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.4.3 - 2008.02.01.225039
|
||||
|
||||
2008.02.03.092013 [1463]
|
||||
libburn/libdax_msgs.h
|
||||
Registered error code range "libisofs-xorriso"
|
||||
|
||||
2008.02.03.092134 [1464]
|
||||
configure.ac
|
||||
Incremented LT_* to get libburn.so.4.8.0 (forgot to do 4.7.1 anyway)
|
||||
|
||||
2008.02.03.092509 [1465]
|
||||
libburn/libburn.h
|
||||
libburn/init.c
|
||||
New API call burn_sev_to_text()
|
||||
|
||||
4 Feb 2008 [1473]
|
||||
README
|
||||
Announced deprecation of libisofs-0.2.x, temporory employment of libisofs-0.6.1
|
||||
|
||||
2008.02.04.175209 [1474]
|
||||
libburn/libdax_msgs.h
|
||||
Registered range "libisoburn" 0x00060000 to 0x00006ffff
|
||||
|
||||
2008.02.06.174009 [1482]
|
||||
libburn/libdax_msgs.h
|
||||
Re-instated range "vreixo" with old and new codes, adjusted severity definitions
|
||||
|
||||
2008.02.06.182222 [1483]
|
||||
libburn/libburn.h
|
||||
Copied usage discussion about *_header_version_* from libisoburn
|
||||
|
||||
2008.02.06.230041 [1488]
|
||||
libburn/read.c
|
||||
Installed a simple address logger in burn_read_data
|
||||
|
||||
2008.02.07.232820 [1492]
|
||||
libburn/read.c
|
||||
Added debug message in case of burn_read_data() return 0
|
||||
|
||||
2008.02.08.073414 [1493]
|
||||
libburn/mmc.c
|
||||
Allowed DVD +/- DL for reading
|
||||
|
||||
2008.02.11.190802 [1518]
|
||||
libburn/libdax_msgs.h
|
||||
libburn/libdax_msgs.c
|
||||
Introduced LIBDAX_MSGS_SEV_MISHAP
|
||||
|
||||
2008.02.14.074108 [1522]
|
||||
libburn/libburn.h
|
||||
Micro corrections in comment text
|
||||
|
||||
14 Feb 2008 [1523]
|
||||
COPYRIGHT
|
||||
Updated year
|
||||
|
||||
14 Feb 2008 [1524]
|
||||
cdrskin/README
|
||||
Pointed to ldconfig
|
||||
|
||||
2008.02.16.121102 [1541]
|
||||
configure.ac
|
||||
Corrected typo in comment
|
||||
|
||||
16 Feb 2008 [1542]
|
||||
doc/comments
|
||||
README
|
||||
cdrskin/wiki_plain.txt
|
||||
Updated project interrelations
|
||||
|
||||
2008.02.21.200956 [1554]
|
||||
libburn/sg-linux.c
|
||||
Testwise inquiry of ioctl(CDROM_MEDIA_CHANGED) (disabled by default)
|
||||
|
||||
21 Feb 2008 [1555]
|
||||
test/libburner.c
|
||||
Directed error message to proper output channel
|
||||
|
||||
2008.02.21.201238 [1556]
|
||||
libburn/libdax_msgs.h
|
||||
libburn/libdax_msgs.c
|
||||
Introduced severity ERRFILE
|
||||
|
||||
2008.02.21.202216 [1557]
|
||||
libburn/libdax_msgs.c
|
||||
Mapped unknown severity text to ALL rather than NEVER
|
||||
|
||||
2008.02.21.215250 [1560]
|
||||
libburn/libdax_msgs.h
|
||||
Weakened demand to print file path in following message
|
||||
|
||||
2008.02.22.150939 [1562]
|
||||
libburn/libdax_msgs.h
|
||||
libburn/init.c
|
||||
New error code 0x00040008
|
||||
|
||||
2008.02.22.213527 [1563]
|
||||
libburn/libdax_msgs.h
|
||||
libburn/libdax_msgs.c
|
||||
Imported changes from libiso_msgs.h
|
||||
|
||||
2008.02.22.213726 [1564]
|
||||
libburn/init.c
|
||||
Changed meaning of unrecognized severity texts from FATAL to ALL
|
||||
|
||||
2008.02.28.123152 [1565]
|
||||
libburn/libburn.h
|
||||
libburn/spc.c
|
||||
libburn/mmc.c
|
||||
libburn/write.c
|
||||
cdrskin/cdrskin.1
|
||||
Made support for DVD+R DL official, enabled untested support for BD-RE
|
||||
|
||||
2008.02.28.132325 [1586]
|
||||
libburn/mmc.c
|
||||
cdrskin/README
|
||||
cdrskin/cdrskin.c
|
||||
cdrskin/cdrskin_eng.html
|
||||
cdrskin/wiki_plain.txt
|
||||
test/libburner.c
|
||||
Mentioned support for DVD+R/DL.
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.4.3 - 2008.03.01.154319
|
||||
* Support for DVD+R/DL media is now official
|
||||
* Experimental code for BD-RE with --allow_untested_media
|
||||
|
||||
1 Mar 2008 [1595]
|
||||
cdrskin/changelog.txt
|
||||
Updated changelog
|
||||
|
||||
2008.03.03.202930 [1598]
|
||||
libburn/libburn.h
|
||||
libburn/drive.c
|
||||
libburn/read.c
|
||||
Got rid of a cumbersome open-close cycle with burn_read_data() on stdio:
|
||||
|
||||
2 Apr 2008 [1654]
|
||||
COPYRIGHT
|
||||
Corrected GPL version
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.4.3 - 2008.04.07.152331
|
||||
* libburn: Improved read performance from stdio: pseudo-drives
|
||||
|
||||
2008.04.08.100001 [ZeroFourFour 1669]
|
||||
Makefile.am
|
||||
configure.ac
|
||||
README
|
||||
libburn/libburn.h (burn_header_version_*)
|
||||
cdrskin/cdrskin.c
|
||||
cdrskin/README
|
||||
cdrskin/compile_cdrskin.sh
|
||||
cdrskin/cdrskin_timestamp.h
|
||||
cdrskin/wiki_plain.txt
|
||||
cdrskin/cdrskin_eng.html
|
||||
doc/comments
|
||||
Made number transition and activated development documentation
|
||||
|
||||
8 Apr 2008 [ZeroFourFour 1670]
|
||||
- cdrskin/add_ts_changes_to_libburn_0_4_2
|
||||
- cdrskin/add_ts_changes_to_libburn_0_4_3
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_4_4
|
||||
+ cdrskin/add_ts_changes_to_libburn_0_4_5
|
||||
Updated cdrskin tarball generator
|
||||
|
||||
8 Apr 2008 [ZeroFourFour 1671]
|
||||
cdrskin/changelog.txt
|
||||
Documented changes and release timestamp
|
||||
|
||||
2008.04.08.100001 [ZeroFourFour 1672]
|
||||
libburn/util.c
|
||||
Switched from configure.ac versioning to libburn.h versioning
|
||||
|
||||
8 Apr 2008 [ZeroFourFour ]
|
||||
cdrskin/changelog.txt
|
||||
Documented last minute changes
|
||||
|
||||
----------------------------- release - cdrskin-0.4.4.pl00 - 2008.04.08.100001
|
||||
* Support for DVD+R/DL media is now official
|
||||
* Experimental code for BD-RE with --allow_untested_media
|
||||
* libburn: Improved read performance from stdio: pseudo-drives
|
||||
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.4.5 -
|
||||
------------------------------------ cycle - cdrskin-0.4.5 -
|
||||
|
||||
===============================================================================
|
||||
TODO
|
||||
===============================================================================
|
||||
|
||||
@since tags
|
||||
|
||||
Check all SORRY and FATAL errors whether they should become FAILUREs
|
||||
|
||||
Refuse writing if track size exceeds free media space
|
||||
|
||||
problem with telltoc: double descriptor list from before load and after load
|
||||
@ -4806,21 +5251,6 @@ Emulate -dummy on overwriteables ?
|
||||
Emulate -dummy on DVD+R ?
|
||||
|
||||
|
||||
[]
|
||||
libcevap/main.c
|
||||
Preparations for lowercase class and function names
|
||||
|
||||
[]
|
||||
libcevap/libdax_model.txt
|
||||
Work goes on
|
||||
>>> struct burn_drive { int stdio_fd }
|
||||
|
||||
|
||||
[]
|
||||
libcevap/cgen.c
|
||||
libcevap/ctyp.c
|
||||
Fixed a bug about arrays
|
||||
|
||||
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.3.9 -
|
||||
|
@ -1,13 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
# compile_cdrskin.sh
|
||||
# Copyright 2005 - 2007 Thomas Schmitt, scdbackup@gmx.net, GPL
|
||||
# Copyright 2005 - 2008 Thomas Schmitt, scdbackup@gmx.net, GPL version 2
|
||||
# to be executed within ./libburn-* resp ./cdrskin-*
|
||||
|
||||
debug_opts="-O2"
|
||||
def_opts=
|
||||
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
||||
libvers="-DCdrskin_libburn_0_4_0"
|
||||
libvers="-DCdrskin_libburn_0_4_4"
|
||||
cleanup_src_or_obj="libburn/cleanup.o"
|
||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||
@ -33,15 +33,15 @@ do
|
||||
libdax_audioxtr_o=
|
||||
libdax_msgs_o="libburn/message.o"
|
||||
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
||||
elif test "$i" = "-libburn_0_4_0"
|
||||
elif test "$i" = "-libburn_0_4_4"
|
||||
then
|
||||
libvers="-DCdrskin_libburn_0_4_0"
|
||||
libvers="-DCdrskin_libburn_0_4_4"
|
||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||
cleanup_src_or_obj="libburn/cleanup.o"
|
||||
elif test "$i" = "-libburn_svn"
|
||||
then
|
||||
libvers="-DCdrskin_libburn_0_4_1"
|
||||
libvers="-DCdrskin_libburn_0_4_5"
|
||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||
cleanup_src_or_obj="libburn/cleanup.o"
|
||||
@ -76,7 +76,7 @@ do
|
||||
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
||||
echo " -compile_dewav compile program test/dewav without libburn."
|
||||
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
|
||||
echo " -libburn_0_4_0 set macro to match libburn-0.4.0."
|
||||
echo " -libburn_0_4_4 set macro to match libburn-0.4.4."
|
||||
echo " -libburn_svn set macro to match current libburn-SVN."
|
||||
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
|
||||
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
||||
|
@ -16,7 +16,7 @@ manpage="cdrskin"
|
||||
raw_html=$(pwd)/"cdrskin/raw_man_1_cdrskin.html"
|
||||
htmlpage=$(pwd)/"cdrskin/man_1_cdrskin.html"
|
||||
|
||||
if test -r "$manpage"
|
||||
if test -r "$man_dir"/"$manpage".1
|
||||
then
|
||||
dummy=dummy
|
||||
else
|
||||
@ -56,7 +56,7 @@ then
|
||||
-e 's/^If you only got one CD capable drive/\ <BR>If you only got one CD capable drive/' \
|
||||
-e 's/<b>Emulated drives:<\/b>/\ <BR><b>Emulated drives:<\/b>/' \
|
||||
-e 's/^Alphabetical list of options/\ <BR>Alphabetical list of options/' \
|
||||
-e 's/and for all others\.<\/td><\/table>/and for all others.<\/td><\/table> <BR><HR><FONT SIZE=-1><CENTER>(HTML generated from '"$manpage"'.1 on '"$(date)"' by '$(basename "$0")' )<\/CENTER><\/FONT>/' \
|
||||
-e 's/<\/body>/<BR><HR><FONT SIZE=-1><CENTER>(HTML generated from '"$manpage"'.1 on '"$(date)"' by '$(basename "$0")' )<\/CENTER><\/FONT><\/body>/' \
|
||||
-e 's/See section FILES/See section <A HREF="#FILES">FILES<\/A>/' \
|
||||
-e 's/See section EXAMPLES/See section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \
|
||||
<"$2" >"$htmlpage"
|
||||
|
@ -10,7 +10,7 @@ Schilling's cdrtools. cdrskin strives to be a second source for the services
|
||||
traditionally provided by cdrecord. Currently it does CD-R and CD-RW this way.
|
||||
Overwriteable media DVD-RAM, DVD+RW and DVD-RW are handled differently than
|
||||
with cdrecord-ProDVD in order to offer TAO-like single track recording.
|
||||
Sequential DVD-R[W] and DVD+R are handled like CD-R[W] with TAO and
|
||||
Sequential DVD-R[W], DVD+R, DVD+R/DL are handled like CD-R[W] with TAO and
|
||||
multi-session. Additionally cdrskin offers cdrecord-ProDVD-like mode DAO
|
||||
with DVD-R[W].
|
||||
|
||||
@ -23,7 +23,7 @@ About libburn API for burning CD and DVD: http://api.libburnia-project.org
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
For dual layer DVD types see the advice to use dvd+rw-tools at
|
||||
For yet unsupported media types see the advice to use dvd+rw-tools at
|
||||
the end of this text.
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
@ -115,9 +115,9 @@ All files used as pseudo-drives have to offer rw-permission.
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
The DVD capabilities of cdrskin differ from those of cdrecord-ProDVD. cdrskin
|
||||
offers TAO-like multi-session with DVD-R[W], DVD+R and TAO-like single session
|
||||
with overwriteable DVD media. It also offers DAO on DVD-R[W] which is probably
|
||||
the same as the traditional cdrecord-ProDVD write mode.
|
||||
offers TAO-like multi-session with DVD-R[W], DVD+R[/DL] and TAO-like single
|
||||
session with overwriteable DVD media. It also offers DAO on DVD-R[W] which is
|
||||
probably the same as the traditional cdrecord-ProDVD write mode.
|
||||
|
||||
Non-cdrecord blank mode blank=format_overwrite brings a DVD-RW
|
||||
disc from its initial profile "Sequential Recording" into profile state
|
||||
@ -268,10 +268,10 @@ for an illustrated example with K3b 0.10 .
|
||||
|
||||
DVD advise:
|
||||
|
||||
For burning of DVD media other than DVD-RAM, DVD+RW, DVD+R, DVD-RW, DVD-R,
|
||||
the cdrskin project currently advises to use Andy Polyakov's dvd+rw-tools
|
||||
which despite their historic name are capable of all the media above
|
||||
and also do dual layer and even BD discs.
|
||||
For burning of DVD media other than DVD-RAM, DVD+RW, DVD+R, DVD+R/DL,
|
||||
DVD-RW, DVD-R, the cdrskin project currently advises to use
|
||||
Andy Polyakov's dvd+rw-tools which despite their historic name are
|
||||
capable of all the media above and more, including BD discs.
|
||||
|
||||
http://fy.chalmers.se/~appro/linux/DVD+RW/tools
|
||||
|
||||
@ -279,15 +279,27 @@ They are not compatible or related to cdrecord resp. cdrecord-ProDVD
|
||||
(now obsoleted by original source cdrtools cdrecord with identical
|
||||
capabilities besides the license key).
|
||||
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Advanced multi-session use cases:
|
||||
|
||||
A special feature of dvd+rw-tools is growing of ISO-9660 filesystems on
|
||||
overwriteable media. This is not the same as multi-session writing of cdrskin
|
||||
with CD media, but retrieves additional information from the existing ISO
|
||||
image and finally manipulates the start sectors of this existing image.
|
||||
|
||||
So, inspired by growisofs, cdrskin can offer DVD multi-session not only with
|
||||
sequential DVD-R[W] and with DVD+R, but also with DVD-RAM, DVD+RW and
|
||||
sequential DVD-R[W] and with DVD+R [DL], but also with DVD-RAM, DVD+RW and
|
||||
even regular disk files or block devices other than CD/DVD writers.
|
||||
This is enabled by option --grow_overwriteable_iso.
|
||||
|
||||
The libburnia project provides an integrated ISO-9660 multi-session tool
|
||||
named [wiki:Xorriso xorriso] which tries to go one step beyond
|
||||
growisofs. It uses [wiki:Libburn libburn] , [wiki:Libisofs libisofs]
|
||||
and [wiki:Libisoburn libisoburn].
|
||||
|
||||
See [http://scdbackup.sourceforge.net/man_1_xorriso.html man xorriso].
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
|
113
configure.ac
113
configure.ac
@ -1,4 +1,4 @@
|
||||
AC_INIT([libburn], [0.4.0], [http://libburnia-project.org])
|
||||
AC_INIT([libburn], [0.4.4], [http://libburnia-project.org])
|
||||
AC_PREREQ([2.50])
|
||||
dnl AC_CONFIG_HEADER([config.h])
|
||||
|
||||
@ -7,35 +7,104 @@ AC_CANONICAL_TARGET
|
||||
|
||||
AM_INIT_AUTOMAKE([subdir-objects])
|
||||
|
||||
dnl Making releases:
|
||||
dnl BURN_MICRO_VERSION += 1;
|
||||
dnl BURN_INTERFACE_AGE += 1;
|
||||
dnl BURN_BINARY_AGE += 1;
|
||||
dnl if any functions have been added, set BURN_INTERFACE_AGE to 0.
|
||||
dnl if backwards compatibility has been broken,
|
||||
dnl set BURN_BINARY_AGE and BURN_INTERFACE_AGE to 0.
|
||||
dnl Notes by ts A71207 - A80126 :
|
||||
dnl
|
||||
dnl if MAJOR or MINOR version changes, be sure to change AC_INIT above to match
|
||||
dnl Regrettably the meaning of the various version types was misunderstood
|
||||
dnl before version 0.4.1.
|
||||
dnl
|
||||
dnl In the past MAJOR.MINOR.MICRO versions led to the following SONAME numbers:
|
||||
dnl 0.2.2 = 2 , 0.2.3 = 3 , 0.2.6 = 6
|
||||
dnl 0.3.0 = 0 , 0.3.2 = 2 , 0.3.4 = 4 . 0.3.6 = 6 , 0.3.8 = 4
|
||||
dnl 0.4.0 = 0 (also released as SONAME 4)
|
||||
dnl
|
||||
dnl Meanwhile the following schemes are maintained in parallel:
|
||||
dnl
|
||||
dnl BURN_MAJOR_VERSION , BURN_MINOR_VERSION , BURN_MICRO_VERSION
|
||||
dnl are three small non-negative integers which describe the evolution
|
||||
dnl steps of the library.
|
||||
dnl Older applications are able to use younger libraries over
|
||||
dnl quite a long range of such steps. Some day, nevertheless,
|
||||
dnl compatibility might get terminated, after due notice.
|
||||
dnl
|
||||
dnl SONAME (libburn.so.4)
|
||||
dnl is a small positive integer which marks a family of compatible
|
||||
dnl evolution steps. Libraries with a particular SONAME allow a binary
|
||||
dnl with the same SONAME to start up. Any further compatibility check is to
|
||||
dnl be done by own runtime means. Especially *_version() calls in the API
|
||||
dnl which return BURN_MAJOR_VERSION, BURN_MINOR_VERSION, BURN_MICRO_VERSION.
|
||||
dnl See below.
|
||||
dnl
|
||||
dnl CURRENT, AGE, REVISION
|
||||
dnl are three integers used by libtool. CURRENT is positive, the others
|
||||
dnl non-negative. The use at runtime is not known yet. But libtool computes
|
||||
dnl at build time SONAME = CURRENT - AGE.
|
||||
dnl So this is a superspace of the SONAME version space. To avoid
|
||||
dnl ill SONAME, the value of CURRENT must be larger than AGE.
|
||||
dnl See also http://www.gnu.org/software/libtool/manual.html#Interfaces
|
||||
dnl
|
||||
dnl The name of the dynamic library will be libburn.so.$SONAME.$AGE.$REV .
|
||||
dnl In the terminology of this file:
|
||||
dnl CURRENT = LT_CURRENT
|
||||
dnl AGE = LT_AGE
|
||||
dnl REVISION= LT_REVISION
|
||||
dnl
|
||||
dnl Beginning with libburn-0.4.1 a rectified counting was introduced as
|
||||
dnl CURRENT=10, REVISION=1, AGE=6
|
||||
dnl This rectification declared that version to be binary compatible up
|
||||
dnl from libburn-0.3.4.
|
||||
dnl Real compatibility was given since libburn-0.3.2.
|
||||
dnl Beware of libburn-0.2.6 which had SONAME=6 and is not binary compatible.
|
||||
dnl Applications for libburn-0.2 to libburn-0.3.1 need recompilation but no
|
||||
dnl source code changes.
|
||||
dnl
|
||||
dnl Neatly versioned stable releases meanwhile:
|
||||
dnl 0.4.2 = libburn.so.4.7.0
|
||||
dnl 0.4.4 = libburn.so.4.9.0
|
||||
dnl
|
||||
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
|
||||
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
|
||||
dnl The linker will do no finer checks. Especially no age range check for
|
||||
dnl the application binary. If SONAME matches, then the couple starts.
|
||||
dnl
|
||||
dnl Therefore at run time info is provided by libburn function burn_version().
|
||||
dnl It returns the major, minor and micro revision of the library.
|
||||
dnl Before using any API feature, a program should check for age.
|
||||
dnl
|
||||
dnl The variables BURN_*_VERSION are mere copies for informing libtool.
|
||||
dnl The true values which get issued and should be compared are macros
|
||||
dnl defined in libburn/libburn.h .
|
||||
dnl
|
||||
dnl Normally one can allow a program to run with a library which passed the
|
||||
dnl linker SONAME test and which is not older than the library it was
|
||||
dnl developed for. Library2 is younger than library1 if:
|
||||
dnl major2>major1 || (major2==major1 &&
|
||||
dnl (minor2>minor1 || (minor2==minor1 && micro2 > micro1)))
|
||||
dnl
|
||||
dnl If BURN_*_VERSION changes, be sure to change AC_INIT above to match.
|
||||
dnl
|
||||
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
|
||||
BURN_MAJOR_VERSION=0
|
||||
BURN_MINOR_VERSION=4
|
||||
BURN_MICRO_VERSION=0
|
||||
BURN_INTERFACE_AGE=0
|
||||
BURN_BINARY_AGE=0
|
||||
BURN_MICRO_VERSION=4
|
||||
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||
|
||||
AC_SUBST(BURN_MAJOR_VERSION)
|
||||
AC_SUBST(BURN_MINOR_VERSION)
|
||||
AC_SUBST(BURN_MICRO_VERSION)
|
||||
AC_SUBST(BURN_INTERFACE_AGE)
|
||||
AC_SUBST(BURN_BINARY_AGE)
|
||||
AC_SUBST(BURN_VERSION)
|
||||
|
||||
dnl Libtool versioning
|
||||
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION
|
||||
LT_CURRENT=`expr $BURN_MICRO_VERSION - $BURN_INTERFACE_AGE`
|
||||
LT_REVISION=$BURN_INTERFACE_AGE
|
||||
LT_AGE=`expr $BURN_BINARY_AGE - $BURN_INTERFACE_AGE`
|
||||
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||
dnl
|
||||
dnl ts A80127
|
||||
dnl This is the release version libburn-0.4.4 = libburn.so.4.9.0
|
||||
dnl ### This is the development version after libburn-0.4.4 = libburn.so.4.9.0
|
||||
dnl ### LT_CURRENT++, LT_AGE++ has not yet happened.
|
||||
dnl
|
||||
dnl SONAME = 13 - 9 = 4 . Library name = libburn.so.4.9.0
|
||||
LT_CURRENT=13
|
||||
LT_REVISION=0
|
||||
LT_AGE=9
|
||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||
|
||||
AC_SUBST(LT_RELEASE)
|
||||
@ -44,6 +113,12 @@ AC_SUBST(LT_REVISION)
|
||||
AC_SUBST(LT_AGE)
|
||||
AC_SUBST(LT_CURRENT_MINUS_AGE)
|
||||
|
||||
dnl ts A71207: This is done only not to break any old components
|
||||
BURN_INTERFACE_AGE=$LT_REVISION
|
||||
BURN_BINARY_AGE=`expr $LT_AGE + $BURN_INTERFACE_AGE`
|
||||
AC_SUBST(BURN_INTERFACE_AGE)
|
||||
AC_SUBST(BURN_BINARY_AGE)
|
||||
|
||||
AC_PREFIX_DEFAULT([/usr/local])
|
||||
test "$prefix" = "NONE" && prefix=$ac_default_prefix
|
||||
|
||||
@ -100,6 +175,6 @@ AC_CONFIG_FILES([
|
||||
Makefile
|
||||
doc/doxygen.conf
|
||||
version.h
|
||||
libburn-5.pc
|
||||
libburn-1.pc
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
47
doc/comments
47
doc/comments
@ -7,10 +7,10 @@
|
||||
|
||||
Libburnia is an open-source project for reading, mastering and writing
|
||||
optical discs.
|
||||
For now this means CD-R, CD-RW, DVD-RAM, DVD+RW, DVD+R, DVD-RW, DVD-R.
|
||||
For now this means CD-R, CD-RW, DVD-RAM, DVD+RW, DVD+R, DVD+R/DL, DVD-RW, DVD-R.
|
||||
|
||||
Not supported yet are dual layer media, HD-DVD, BD (blue ray). Testers for
|
||||
dual layer DVD+/-R are wanted, though.
|
||||
Not supported yet are DVD-R/DL, HD-DVD, BD (blue ray). Testers for
|
||||
BD and DVD-R/DL are wanted, though.
|
||||
|
||||
The project comprises of several more or less interdependent parts which
|
||||
together strive to be a usable foundation for application development.
|
||||
@ -22,13 +22,18 @@ we would need : login on a development machine resp. a live OS on CD or DVD,
|
||||
advise from a system person about the equivalent of Linux sg or FreeBSD CAM,
|
||||
volunteers for testing of realistic use cases.
|
||||
|
||||
We have a workable code base for burning data and audio CDs and many DVD types.
|
||||
The burn API is quite comprehensively documented and can be used to build a
|
||||
presentable application.
|
||||
We have a well tested code base for burning data and audio CDs and many DVD
|
||||
types. The burn API is quite comprehensively documented and can be used to
|
||||
build a presentable application.
|
||||
We have a functional binary which emulates the core use cases of cdrecord in
|
||||
order to prove that usability, and in order to allow you to explore libburn's
|
||||
scope by help of existing cdrecord frontends.
|
||||
|
||||
ISO 9660 filesystems with Rock Ridge and Joliet extensions can be created
|
||||
and manipulated quite freely. This capability together with our burn capability
|
||||
makes possible a single binary application which covers all steps of image
|
||||
composition, updating and writing. Quite unique in the Linux world.
|
||||
|
||||
@subsection components The project components (list subject to growth, hopefully):
|
||||
|
||||
- libburn is the library by which preformatted data get onto optical media.
|
||||
@ -43,10 +48,10 @@ scope by help of existing cdrecord frontends.
|
||||
ISO 9660 disk image. This may then be brought to CD via libburn.
|
||||
libisofs is to be the foundation of our upcoming mkisofs emulation.
|
||||
|
||||
- libisoburn is an add-on to libburn and libisofs which allows to grow
|
||||
ISO-9660 filesystem images on multi-session media as well as
|
||||
on overwriteable media via the same API. All media peculiarities
|
||||
are handled automatically.
|
||||
- libisoburn is an add-on to libburn and libisofs which coordinates both and
|
||||
also allows to grow ISO-9660 filesystem images on multi-session
|
||||
media as well as on overwriteable media via the same API.
|
||||
All media peculiarities are handled automatically.
|
||||
|
||||
- cdrskin is a limited cdrecord compatibility wrapper for libburn.
|
||||
cdrecord is a powerful GPL'ed burn program included in Joerg
|
||||
@ -59,12 +64,12 @@ scope by help of existing cdrecord frontends.
|
||||
runs, though.
|
||||
See cdrskin/README for more.
|
||||
|
||||
- xorriso is an upcomming application of all three libraries which creates,
|
||||
loads, manipulates and writes ISO 9660 filesystem images with
|
||||
Rock Ridge extensions. Manipulation will not only be adding or
|
||||
- xorriso is an application of all three libraries which creates, loads,
|
||||
manipulates and writes ISO 9660 filesystem images with
|
||||
Rock Ridge extensions. Manipulation is not only adding or
|
||||
overwriting of files but also deletion, renaming, and attribute
|
||||
changing.
|
||||
See SVN of libisoburn, man test/xorriso.1, test/compile_xorriso.sh
|
||||
See xorriso/README for more
|
||||
|
||||
- "test" is a collection of application gestures and examples given by the
|
||||
authors of the library features. The burn API example of libburn
|
||||
@ -72,7 +77,19 @@ scope by help of existing cdrecord frontends.
|
||||
demonstrated in test/telltoc.c .
|
||||
Explore these examples if you look for inspiration.
|
||||
|
||||
We plan to be a responsive upstream. Bear with us.
|
||||
We strive to be a responsive upstream.
|
||||
|
||||
Our libraries are committed to maintain older feature sets in newer versions.
|
||||
This applies to source code headers (API) as well as to linkable objects (ABI).
|
||||
The only exception from this rule is about non-release versions x.y.*[13579]
|
||||
which are allowed to introduce new features, change those new features in
|
||||
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.
|
||||
|
||||
SONAMES:
|
||||
libburn.so.4 (since 0.3.4, March 2007),
|
||||
libisofs.so.6 (since 0.6.2, February 2008),
|
||||
libisoburn.so.1 (since 0.1.0, February 2008).
|
||||
|
||||
|
||||
@section using Using the libraries
|
||||
|
@ -4,7 +4,7 @@ libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: libburn
|
||||
Description: Disc reading/writing library
|
||||
Description: Library to read/write optical discs
|
||||
Version: @VERSION@
|
||||
Requires:
|
||||
Libs: -L${libdir} -lburn
|
@ -10,9 +10,8 @@
|
||||
even if joinable and even if never joined.
|
||||
|
||||
To be activated after release of libburn-0.4.0
|
||||
|
||||
#define Libburn_create_detached_threadS 1
|
||||
*/
|
||||
#define Libburn_create_detached_threadS 1
|
||||
|
||||
/* Alternative : Threads are created joinable.
|
||||
Threads get detached in remove_worker() and thus should dispose themselves.
|
||||
@ -144,9 +143,11 @@ static void add_worker(struct burn_drive *d, WorkerFunc f, void *data)
|
||||
pthread_attr_init(&attr);
|
||||
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
||||
attr_pt= &attr;
|
||||
/*
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020158,
|
||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_LOW,
|
||||
"add_worker(): Creating detached thread.", 0, 0);
|
||||
*/
|
||||
#endif
|
||||
|
||||
if (pthread_create(&a->thread, attr_pt, f, a)) {
|
||||
@ -179,12 +180,14 @@ static void remove_worker(pthread_t th)
|
||||
dispose themselves.
|
||||
*/
|
||||
ret = pthread_detach(th);
|
||||
/*
|
||||
sprintf(msg,
|
||||
"remove_workers(): pid= %lu pthread_detach(%lu)= %d",
|
||||
(unsigned long) getpid(), (unsigned long) th, ret);
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020158,
|
||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_LOW,
|
||||
msg, 0, 0);
|
||||
*/
|
||||
|
||||
#endif /* Libburn_detach_done_workeR */
|
||||
|
||||
|
@ -201,7 +201,9 @@ int burn_drive_inquire_media(struct burn_drive *d)
|
||||
|
||||
/* ts A61020 : d->status was set to BURN_DISC_BLANK as pure guess */
|
||||
|
||||
if (d->mdata->cdr_write || d->mdata->cdrw_write ||
|
||||
/* ts A71128 : run read_disc_info() for any recognizeable profile */
|
||||
if (d->current_profile > 0 ||
|
||||
d->mdata->cdr_write || d->mdata->cdrw_write ||
|
||||
d->mdata->dvdr_write || d->mdata->dvdram_write) {
|
||||
|
||||
#define Libburn_knows_correct_state_after_loaD 1
|
||||
@ -437,6 +439,9 @@ int burn_drive_mark_unready(struct burn_drive *d)
|
||||
burn_disc_free(d->disc);
|
||||
d->disc = NULL;
|
||||
}
|
||||
if (d->stdio_fd >= 0)
|
||||
close (d->stdio_fd);
|
||||
d->stdio_fd = -1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -1696,7 +1701,10 @@ int burn_abort(int patience,
|
||||
occup = burn_drive_is_occupied(&(drive_array[i]));
|
||||
if(occup == -2)
|
||||
continue;
|
||||
if(occup <= 10) {
|
||||
if(drive_array[i].drive_role != 1) {
|
||||
drive_array[i].busy = BURN_DRIVE_IDLE;
|
||||
burn_drive_forget(&(drive_array[i]), 1);
|
||||
} else if(occup <= 10) {
|
||||
burn_drive_forget(&(drive_array[i]), 1);
|
||||
} else if(occup <= 100) {
|
||||
if(first_round)
|
||||
|
180
libburn/file.c
180
libburn/file.c
@ -188,115 +188,8 @@ struct burn_source *burn_fd_source_new(int datafd, int subfd, off_t size)
|
||||
}
|
||||
|
||||
|
||||
/* ts A70930 */
|
||||
/* ----------------------------- fifo ---------------------------- */
|
||||
|
||||
/* The fifo mechanism consists of a burn_source proxy which is here,
|
||||
a thread management team which is located in async.c,
|
||||
and a synchronous shoveller which is here.
|
||||
*/
|
||||
|
||||
/* fifo_ng has a ringbuffer and runs in a thread. og is on its way out. */
|
||||
#define Libburn_fifo_nG 1
|
||||
|
||||
#ifndef Libburn_fifo_nG
|
||||
|
||||
static int fifo_read(struct burn_source *source,
|
||||
unsigned char *buffer,
|
||||
int size)
|
||||
{
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
int ret;
|
||||
|
||||
if (fs->is_started == 0) {
|
||||
ret = burn_fifo_start(source, 0);
|
||||
if (ret <= 0) {
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020152,
|
||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"Cannot start fifo thread", 0, 0);
|
||||
return -1;
|
||||
}
|
||||
fs->is_started = 1;
|
||||
}
|
||||
if (size == 0)
|
||||
return 0;
|
||||
|
||||
ret = read_full_buffer(fs->outlet[0], buffer, size);
|
||||
if (ret > 0)
|
||||
fs->out_counter += ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static off_t fifo_get_size(struct burn_source *source)
|
||||
{
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
|
||||
return fs->inp->get_size(fs->inp);
|
||||
}
|
||||
|
||||
|
||||
static int fifo_set_size(struct burn_source *source, off_t size)
|
||||
{
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
|
||||
return fs->inp->set_size(fs->inp, size);
|
||||
}
|
||||
|
||||
|
||||
static void fifo_free(struct burn_source *source)
|
||||
{
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
|
||||
if (fs->outlet[1] >= 0)
|
||||
close(fs->outlet[1]);
|
||||
free(fs);
|
||||
}
|
||||
|
||||
|
||||
int burn_fifo_source_shoveller_og(struct burn_source *source, int flag)
|
||||
{
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
int ret;
|
||||
|
||||
fs->thread_pid = getpid();
|
||||
fs->thread_pid_valid = 1;
|
||||
|
||||
while (1) {
|
||||
ret = fs->inp->read(fs->inp, (unsigned char *) fs->buf,
|
||||
fs->chunksize);
|
||||
if (ret > 0)
|
||||
fs->in_counter += ret;
|
||||
else if (ret == 0)
|
||||
break; /* EOF */
|
||||
else {
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020153,
|
||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"Read error on fifo input", errno, 0);
|
||||
break;
|
||||
}
|
||||
ret = write(fs->outlet[1], fs->buf, ret);
|
||||
if (ret == -1) {
|
||||
/* >>> write error */;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* >>> check and destroy ring buffer */;
|
||||
free(fs->buf);
|
||||
fs->buf = NULL;
|
||||
|
||||
if (fs->outlet[1] >= 0)
|
||||
close(fs->outlet[1]);
|
||||
fs->outlet[1] = -1;
|
||||
return (ret >= 0);
|
||||
}
|
||||
|
||||
#endif /* Libburn_fifo_nG */
|
||||
|
||||
|
||||
/* ts A71003 */
|
||||
/* ----------------------------- fifo ng ------------------------- */
|
||||
/* ------------------------------ fifo --------------------------- */
|
||||
|
||||
/* The fifo mechanism consists of a burn_source proxy which is here,
|
||||
a thread management team which is located in async.c,
|
||||
@ -311,7 +204,7 @@ static int fifo_sleep(int flag)
|
||||
}
|
||||
|
||||
|
||||
static int fifo_read_ng(struct burn_source *source,
|
||||
static int fifo_read(struct burn_source *source,
|
||||
unsigned char *buffer,
|
||||
int size)
|
||||
{
|
||||
@ -341,7 +234,7 @@ static int fifo_read_ng(struct burn_source *source,
|
||||
/* This needs no mutex because each volatile variable has one thread
|
||||
which may write and the other which only reads and is aware of
|
||||
volatility.
|
||||
The feeder of the ringbuffer is in burn_fifo_source_shoveller_ng().
|
||||
The feeder of the ringbuffer is in burn_fifo_source_shoveller().
|
||||
*/
|
||||
todo = size;
|
||||
bufsize = fs->chunksize * fs->chunks;
|
||||
@ -394,7 +287,7 @@ static int fifo_read_ng(struct burn_source *source,
|
||||
}
|
||||
|
||||
|
||||
static off_t fifo_get_size_ng(struct burn_source *source)
|
||||
static off_t fifo_get_size(struct burn_source *source)
|
||||
{
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
|
||||
@ -402,7 +295,7 @@ static off_t fifo_get_size_ng(struct burn_source *source)
|
||||
}
|
||||
|
||||
|
||||
static int fifo_set_size_ng(struct burn_source *source, off_t size)
|
||||
static int fifo_set_size(struct burn_source *source, off_t size)
|
||||
{
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
|
||||
@ -410,7 +303,7 @@ static int fifo_set_size_ng(struct burn_source *source, off_t size)
|
||||
}
|
||||
|
||||
|
||||
static void fifo_free_ng(struct burn_source *source)
|
||||
static void fifo_free(struct burn_source *source)
|
||||
{
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
|
||||
@ -422,7 +315,7 @@ static void fifo_free_ng(struct burn_source *source)
|
||||
}
|
||||
|
||||
|
||||
int burn_fifo_source_shoveller_ng(struct burn_source *source, int flag)
|
||||
int burn_fifo_source_shoveller(struct burn_source *source, int flag)
|
||||
{
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
int ret, bufsize, diff, wpos, rpos, trans_end, free_bytes;
|
||||
@ -469,8 +362,12 @@ int burn_fifo_source_shoveller_ng(struct burn_source *source, int flag)
|
||||
}
|
||||
|
||||
/* Obtain next chunk */
|
||||
ret = fs->inp->read(fs->inp, (unsigned char *) bufpt,
|
||||
fs->chunksize);
|
||||
if (fs->inp->read != NULL)
|
||||
ret = fs->inp->read(fs->inp,
|
||||
(unsigned char *) bufpt, fs->chunksize);
|
||||
else
|
||||
ret = fs->inp->read_xt( fs->inp,
|
||||
(unsigned char *) bufpt, fs->chunksize);
|
||||
if (ret > 0)
|
||||
fs->in_counter += ret;
|
||||
else if (ret == 0)
|
||||
@ -537,15 +434,12 @@ int burn_fifo_source_shoveller_ng(struct burn_source *source, int flag)
|
||||
}
|
||||
|
||||
|
||||
#define Libburn_fifo_nG 1
|
||||
|
||||
int burn_fifo_source_shoveller(struct burn_source *source, int flag)
|
||||
int burn_fifo_cancel(struct burn_source *source)
|
||||
{
|
||||
#ifndef Libburn_fifo_nG
|
||||
return burn_fifo_source_shoveller_og(source, flag);
|
||||
#else
|
||||
return burn_fifo_source_shoveller_ng(source, flag);
|
||||
#endif
|
||||
struct burn_source_fifo *fs = source->data;
|
||||
|
||||
burn_source_cancel(fs->inp);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
@ -554,9 +448,6 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
|
||||
{
|
||||
struct burn_source_fifo *fs;
|
||||
struct burn_source *src;
|
||||
#ifndef Libburn_fifo_nG
|
||||
int ret, outlet[2];
|
||||
#endif
|
||||
|
||||
if (((double) chunksize) * ((double) chunks) > 1024.0*1024.0*1024.0) {
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020155,
|
||||
@ -570,16 +461,6 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
|
||||
"Desired fifo buffer too small", 0, 0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifndef Libburn_fifo_nG
|
||||
outlet[0] = outlet[1] = -1;
|
||||
ret = pipe(outlet);
|
||||
if (ret == -1) {
|
||||
/* >>> error on pipe creation */;
|
||||
return NULL;
|
||||
}
|
||||
#endif /* ! Libburn_fifo_nG */
|
||||
|
||||
fs = malloc(sizeof(struct burn_source_fifo));
|
||||
if (fs == NULL)
|
||||
return NULL;
|
||||
@ -587,12 +468,6 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
|
||||
fs->thread_pid = 0;
|
||||
fs->thread_pid_valid = 0;
|
||||
fs->inp = NULL; /* set later */
|
||||
|
||||
#ifndef Libburn_fifo_nG
|
||||
fs->outlet[0] = outlet[0];
|
||||
fs->outlet[1] = outlet[1];
|
||||
#endif
|
||||
|
||||
fs->chunksize = chunksize;
|
||||
fs->chunks = chunks;
|
||||
fs->buf = NULL;
|
||||
@ -607,23 +482,15 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
|
||||
free((char *) fs);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifndef Libburn_fifo_nG
|
||||
src->read = fifo_read;
|
||||
src->read = NULL;
|
||||
src->read_sub = NULL;
|
||||
src->get_size = fifo_get_size;
|
||||
src->set_size = fifo_set_size;
|
||||
src->free_data = fifo_free;
|
||||
#else /* Libburn_fifo_nG */
|
||||
src->read = fifo_read_ng;
|
||||
src->read_sub = NULL;
|
||||
src->get_size = fifo_get_size_ng;
|
||||
src->set_size = fifo_set_size_ng;
|
||||
src->free_data = fifo_free_ng;
|
||||
#endif /* ! Libburn_fifo_nG */
|
||||
|
||||
src->data = fs;
|
||||
|
||||
src->version= 1;
|
||||
src->read_xt = fifo_read;
|
||||
src->cancel= burn_fifo_cancel;
|
||||
fs->inp = inp;
|
||||
inp->refcount++; /* make sure inp lives longer than src */
|
||||
|
||||
@ -644,7 +511,7 @@ int burn_fifo_inquire_status(struct burn_source *source,
|
||||
*status_text = NULL;
|
||||
*size = 0;
|
||||
|
||||
if (source->free_data != fifo_free_ng) {
|
||||
if (source->free_data != fifo_free) {
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020157,
|
||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"burn_source is not a fifo object", 0, 0);
|
||||
@ -673,4 +540,3 @@ int burn_fifo_inquire_status(struct burn_source *source,
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
@ -247,7 +247,7 @@ int burn_msgs_submit(int error_code, char msg_text[], int os_errno,
|
||||
|
||||
ret = libdax_msgs__text_to_sev(severity, &sevno, 0);
|
||||
if (ret <= 0)
|
||||
sevno = LIBDAX_MSGS_SEV_FATAL;
|
||||
sevno = LIBDAX_MSGS_SEV_ALL;
|
||||
if (error_code <= 0) {
|
||||
switch(sevno) {
|
||||
case LIBDAX_MSGS_SEV_ABORT: error_code = 0x00040000;
|
||||
@ -258,7 +258,7 @@ int burn_msgs_submit(int error_code, char msg_text[], int os_errno,
|
||||
break; case LIBDAX_MSGS_SEV_NOTE: error_code = 0x00040005;
|
||||
break; case LIBDAX_MSGS_SEV_UPDATE: error_code = 0x00040006;
|
||||
break; case LIBDAX_MSGS_SEV_DEBUG: error_code = 0x00040007;
|
||||
break; default: error_code = 0x00040001;
|
||||
break; default: error_code = 0x00040008;
|
||||
}
|
||||
}
|
||||
if (d != NULL)
|
||||
@ -275,8 +275,16 @@ int burn_text_to_sev(char *severity_name, int *sevno, int flag)
|
||||
int ret;
|
||||
|
||||
ret = libdax_msgs__text_to_sev(severity_name, sevno, 0);
|
||||
if (ret <= 0)
|
||||
*sevno = LIBDAX_MSGS_SEV_FATAL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* ts A80202 API */
|
||||
int burn_sev_to_text(int severity_number, char **severity_name, int flag)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = libdax_msgs__sev_to_text(severity_number, severity_name, 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -376,6 +376,11 @@ struct burn_source {
|
||||
libburn will read a single sector by each call to (*read).
|
||||
The size of a sector depends on BURN_MODE_*. The known range is
|
||||
2048 to 2352.
|
||||
|
||||
IMPORTANT:
|
||||
If this function pointer is NULL, then the struct burn_source is of
|
||||
version >= 1 and the job of .(*read)() is done by .(*read_xt)().
|
||||
See below, member .version.
|
||||
*/
|
||||
int (*read)(struct burn_source *, unsigned char *buffer, int size);
|
||||
|
||||
@ -396,6 +401,7 @@ struct burn_source {
|
||||
off_t (*get_size)(struct burn_source *);
|
||||
|
||||
|
||||
/* ts A70125 : BROKE BINARY BACKWARD COMPATIBILITY AT libburn-0.3.1. */
|
||||
/** Program the reply of (*get_size) to a fixed value. It is advised
|
||||
to implement this by a attribute off_t fixed_size; in *data .
|
||||
The read() function does not have to take into respect this fake
|
||||
@ -441,6 +447,29 @@ struct burn_source {
|
||||
*/
|
||||
void *data;
|
||||
|
||||
|
||||
/* ts A71222 : Supposed to be binary backwards compatible extension. */
|
||||
|
||||
/** Valid only if above member .(*read)() is NULL. This indicates a
|
||||
version of struct burn_source younger than 0.
|
||||
From then on, member .version tells which further members exist
|
||||
in the memory layout of struct burn_source. libburn will only touch
|
||||
those announced extensions.
|
||||
|
||||
Versions:
|
||||
0 has .(*read)() != NULL, not even .version is present.
|
||||
1 has .version, .(*read_xt)(), .(*cancel)()
|
||||
*/
|
||||
int version;
|
||||
|
||||
/** This substitutes for (*read)() in versions above 0. */
|
||||
int (*read_xt)(struct burn_source *, unsigned char *buffer, int size);
|
||||
|
||||
/** Informs the burn_source that the consumer of data prematurely
|
||||
ended reading. This call may or may not be issued by libburn
|
||||
before (*free_data)() is called.
|
||||
*/
|
||||
int (*cancel)(struct burn_source *source);
|
||||
};
|
||||
|
||||
|
||||
@ -613,7 +642,7 @@ struct burn_speed_descriptor {
|
||||
This must be called before using any other functions in the library. It
|
||||
may be called more than once with no effect.
|
||||
It is possible to 'restart' the library by shutting it down and
|
||||
re-initializing it. This is necessary if you follow the older and
|
||||
re-initializing it. Once this was necessary if you follow the older and
|
||||
more general way of accessing a drive via burn_drive_scan() and
|
||||
burn_drive_grab(). See burn_drive_scan_and_grab() with its strong
|
||||
urges and its explanations.
|
||||
@ -701,7 +730,7 @@ void burn_preset_device_open(int exclusive, int blocking, int abort_on_busy);
|
||||
/** Allows the use of media types which are implemented in libburn but not yet
|
||||
tested. The list of those untested profiles is subject to change.
|
||||
Currently it contains: 0x15 "DVD-R/DL sequential recording",
|
||||
0x2b "DVD+R/DL"
|
||||
0x43 "BD-RE"
|
||||
If you really test such media, then please report the outcome on
|
||||
libburn-hackers@pykix.org
|
||||
If ever then this call should be done soon after burn_initialize() before
|
||||
@ -780,8 +809,7 @@ void burn_allow_untested_profiles(int yes);
|
||||
(cdrom/burner). Thus use with driveno 0 only. On failure
|
||||
the array has no valid elements at all.
|
||||
The returned array should be freed via burn_drive_info_free()
|
||||
when it is no longer needed, and before calling a scan
|
||||
function again.
|
||||
when it is no longer needed.
|
||||
This is a result from call burn_drive_scan(). See there.
|
||||
Use with driveno 0 only.
|
||||
@param adr The persistent address of the desired drive. Either once
|
||||
@ -1065,10 +1093,11 @@ off_t burn_disc_available_space(struct burn_drive *d,
|
||||
0x09 "CD-R", 0x0a "CD-RW",
|
||||
0x11 "DVD-R sequential recording", 0x12 "DVD-RAM",
|
||||
0x13 "DVD-RW restricted overwrite", 0x14 "DVD-RW sequential recording",
|
||||
0x1a "DVD+RW", 0x1b "DVD+R".
|
||||
0x1a "DVD+RW", 0x1b "DVD+R"
|
||||
0x2b "DVD+R/DL"
|
||||
If enabled by burn_allow_untested_profiles() it also writes to profiles
|
||||
0x15 "DVD-R/DL sequential recording", 0x2b "DVD+R/DL".
|
||||
Writeable stdio-drives return this profile
|
||||
0x15 "DVD-R/DL sequential recording", 0x43 "BD-RE".
|
||||
Writeable stdio-drives return this profile:
|
||||
0xffff "stdio file"
|
||||
@param d The drive where the media is inserted.
|
||||
@param pno Profile Number as of mmc5r03c.pdf, table 89
|
||||
@ -1078,6 +1107,7 @@ off_t burn_disc_available_space(struct burn_drive *d,
|
||||
int burn_disc_get_profile(struct burn_drive *d, int *pno, char name[80]);
|
||||
|
||||
/** Tells whether a disc can be erased or not
|
||||
@param d The drive to inquire.
|
||||
@return Non-zero means erasable
|
||||
*/
|
||||
int burn_disc_erasable(struct burn_drive *d);
|
||||
@ -2007,7 +2037,9 @@ int burn_track_get_mode(struct burn_track *track);
|
||||
*/
|
||||
int burn_session_get_hidefirst(struct burn_session *session);
|
||||
|
||||
/** Returns the library's version in its parts
|
||||
/** Returns the library's version in its parts.
|
||||
This is the runtime counterpart of the three build time macros
|
||||
burn_header_version_* below.
|
||||
@param major The major version number
|
||||
@param minor The minor version number
|
||||
@param micro The micro version number
|
||||
@ -2015,10 +2047,80 @@ int burn_session_get_hidefirst(struct burn_session *session);
|
||||
void burn_version(int *major, int *minor, int *micro);
|
||||
|
||||
|
||||
/* ts A80129 */
|
||||
/** These three release version numbers tell the revision of this header file
|
||||
and of the API it describes. They are memorized by applications at build
|
||||
time.
|
||||
Immediately after burn_initialize() an application should do this check:
|
||||
burn_version(&major, &minor, µ);
|
||||
if(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)))) {
|
||||
... Young enough. Go on with program run ....
|
||||
} else {
|
||||
... Too old. Do not use this libburn version ...
|
||||
}
|
||||
|
||||
*/
|
||||
#define burn_header_version_major 0
|
||||
#define burn_header_version_minor 4
|
||||
#define burn_header_version_micro 4
|
||||
/** Note:
|
||||
Above version numbers are also recorded in configure.ac because libtool
|
||||
wants them as parameters at build time.
|
||||
For the library compatibility check BURN_*_VERSION in configure.ac
|
||||
are not decisive. Only the three numbers above do matter.
|
||||
*/
|
||||
/** Usage discussion:
|
||||
|
||||
Some developers of the libburnia project have differing
|
||||
opinions how to ensure the compatibility of libaries
|
||||
and applications.
|
||||
|
||||
It is about whether to use at compile time and at runtime
|
||||
the version numbers isoburn_header_version_* provided here.
|
||||
Thomas Schmitt advises to use them.
|
||||
Vreixo Formoso advises to use other means.
|
||||
|
||||
At compile time:
|
||||
|
||||
Vreixo Formoso advises to leave proper version matching
|
||||
to properly programmed checks in the the application's
|
||||
build system, which will eventually refuse compilation.
|
||||
|
||||
Thomas Schmitt advises to use the macros defined here
|
||||
for comparison with the application's requirements of
|
||||
library revisions and to eventually break compilation.
|
||||
|
||||
Both advises are combinable. I.e. be master of your
|
||||
build system and have #if checks in the source code
|
||||
of your application, nevertheless.
|
||||
|
||||
At runtime (via *_is_compatible()):
|
||||
|
||||
Vreixo Formoso advises to compare the application's
|
||||
requirements of library revisions with the runtime
|
||||
library. This is to allow runtime libraries which are
|
||||
young enough for the application but too old for
|
||||
the lib*.h files seen at compile time.
|
||||
|
||||
Thomas Schmitt advises to compare the header
|
||||
revisions defined here with the runtime library.
|
||||
This is to enforce a strictly monotonous chain
|
||||
of revisions from app to header to library,
|
||||
at the cost of excluding some older libraries.
|
||||
|
||||
These two advises are mutually exclusive.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/* ts A60924 : ticket 74 */
|
||||
/** Control queueing and stderr printing of messages from libburn.
|
||||
Severity may be one of "NEVER", "ABORT", "FATAL", "SORRY", "WARNING",
|
||||
"HINT", "NOTE", "UPDATE", "DEBUG", "ALL".
|
||||
Severity may be one of "NEVER", "ABORT", "FATAL", "FAILURE", "SORRY",
|
||||
"WARNING", "HINT", "NOTE", "UPDATE", "DEBUG", "ALL".
|
||||
@param queue_severity Gives the minimum limit for messages to be queued.
|
||||
Default: "NEVER". If you queue messages then you
|
||||
must consume them by burn_msgs_obtain().
|
||||
@ -2037,8 +2139,9 @@ int burn_msgs_set_severities(char *queue_severity,
|
||||
/** Obtain the oldest pending libburn message from the queue which has at
|
||||
least the given minimum_severity. This message and any older message of
|
||||
lower severity will get discarded from the queue and is then lost forever.
|
||||
@param minimum_severity may be one of "NEVER", "ABORT", "FATAL", "SORRY",
|
||||
"WARNING", "HINT", "NOTE", "UPDATE", "DEBUG", "ALL".
|
||||
@param minimum_severity may be one of "NEVER", "ABORT", "FATAL",
|
||||
"FAILURE", "SORRY", "WARNING", "HINT", "NOTE", "UPDATE",
|
||||
"DEBUG", "ALL".
|
||||
To call with minimum_severity "NEVER" will discard the
|
||||
whole queue.
|
||||
@param error_code Will become a unique error code as liste in
|
||||
@ -2064,8 +2167,8 @@ int burn_msgs_obtain(char *minimum_severity,
|
||||
message text.
|
||||
@param os_errno Eventual errno related to the message. Submit 0 if
|
||||
the message is not related to a operating system error.
|
||||
@param severity One of "ABORT", "FATAL", "SORRY", "WARNING", "HINT",
|
||||
"NOTE", "UPDATE", "DEBUG". Defaults to "FATAL".
|
||||
@param severity One of "ABORT", "FATAL", "FAILURE", "SORRY", "WARNING",
|
||||
"HINT", "NOTE", "UPDATE", "DEBUG". Defaults to "FATAL".
|
||||
@param d An eventual drive to which the message shall be related.
|
||||
Submit NULL if the message is not specific to a
|
||||
particular drive object.
|
||||
@ -2086,6 +2189,16 @@ int burn_msgs_submit(int error_code, char msg_text[], int os_errno,
|
||||
int burn_text_to_sev(char *severity_name, int *severity_number, int flag);
|
||||
|
||||
|
||||
/* ts A80202 : @since 0.4.4 */
|
||||
/** Convert a severity number into a severity name
|
||||
@param severity_number The rank number: the higher, the more severe.
|
||||
@param severity_name A name as with burn_msgs_submit(), e.g. "SORRY".
|
||||
@param flag Bitfield for control purposes (unused yet, submit 0)
|
||||
*/
|
||||
int burn_sev_to_text(int severity_number, char **severity_name, int flag);
|
||||
|
||||
|
||||
|
||||
/* ts A70915 */
|
||||
/** Replace the messenger object handle of libburn by a compatible handle
|
||||
obtained from a related library.
|
||||
@ -2146,7 +2259,7 @@ void burn_set_signal_handling(void *handle, burn_abort_handler_t handler,
|
||||
drive buffer without further data transfer).
|
||||
@param flag Bitfield for control purposes:
|
||||
bit0 = flush the drive buffer after eventual writing
|
||||
@return 1=sucessful , <=0 : number of tranfered bytes * -1
|
||||
@return 1=sucessful , <=0 : number of transfered bytes * -1
|
||||
*/
|
||||
int burn_random_access_write(struct burn_drive *d, off_t byte_address,
|
||||
char *data, off_t data_count, int flag);
|
||||
@ -2178,7 +2291,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
|
||||
|
||||
/* A70904 */
|
||||
/** Inquire whether the drive object is a real MMC drive or a pseudo-drive
|
||||
created by burn_drive_dummy().
|
||||
created by a stdio: address.
|
||||
@param d The drive to inquire
|
||||
@return 0= null-drive
|
||||
1= real MMC drive
|
||||
|
@ -34,7 +34,7 @@ int libdax_audioxtr_new(struct libdax_audioxtr **xtr, char *path, int flag)
|
||||
if(o==NULL)
|
||||
return(-1);
|
||||
strncpy(o->path,path,LIBDAX_AUDIOXTR_STRLEN-1);
|
||||
o->path[LIBDAX_AUDIOXTR_STRLEN]= 0;
|
||||
o->path[LIBDAX_AUDIOXTR_STRLEN-1]= 0;
|
||||
o->fd= -1;
|
||||
strcpy(o->fmt,"unidentified");
|
||||
o->fmt_info[0]= 0;
|
||||
|
@ -1,8 +1,8 @@
|
||||
|
||||
/* libdax_msgs
|
||||
Message handling facility of libdax.
|
||||
Copyright (C) 2006 - 2007 Thomas Schmitt <scdbackup@gmx.net>,
|
||||
provided under GPL
|
||||
Copyright (C) 2006 - 2008 Thomas Schmitt <scdbackup@gmx.net>,
|
||||
provided under GPL version 2
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@ -40,7 +40,7 @@ static int libdax_msgs_item_new(struct libdax_msgs_item **item,
|
||||
if(ret==0)
|
||||
o->timestamp= tv.tv_sec+0.000001*tv.tv_usec;
|
||||
o->process_id= getpid();
|
||||
o->driveno= -1;
|
||||
o->origin= -1;
|
||||
o->severity= LIBDAX_MSGS_SEV_ALL;
|
||||
o->priority= LIBDAX_MSGS_PRIO_ZERO;
|
||||
o->error_code= 0;
|
||||
@ -109,12 +109,12 @@ int libdax_msgs_item_get_msg(struct libdax_msgs_item *item,
|
||||
|
||||
|
||||
int libdax_msgs_item_get_origin(struct libdax_msgs_item *item,
|
||||
double *timestamp, pid_t *process_id, int *driveno,
|
||||
double *timestamp, pid_t *process_id, int *origin,
|
||||
int flag)
|
||||
{
|
||||
*timestamp= item->timestamp;
|
||||
*process_id= item->process_id;
|
||||
*driveno= item->driveno;
|
||||
*origin= item->origin;
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -252,6 +252,10 @@ int libdax_msgs__text_to_sev(char *severity_name, int *severity,
|
||||
*severity= LIBDAX_MSGS_SEV_ABORT;
|
||||
else if(strncmp(severity_name,"FATAL",5)==0)
|
||||
*severity= LIBDAX_MSGS_SEV_FATAL;
|
||||
else if(strncmp(severity_name,"FAILURE",7)==0)
|
||||
*severity= LIBDAX_MSGS_SEV_FAILURE;
|
||||
else if(strncmp(severity_name,"MISHAP",6)==0)
|
||||
*severity= LIBDAX_MSGS_SEV_MISHAP;
|
||||
else if(strncmp(severity_name,"SORRY",5)==0)
|
||||
*severity= LIBDAX_MSGS_SEV_SORRY;
|
||||
else if(strncmp(severity_name,"WARNING",7)==0)
|
||||
@ -264,10 +268,12 @@ int libdax_msgs__text_to_sev(char *severity_name, int *severity,
|
||||
*severity= LIBDAX_MSGS_SEV_UPDATE;
|
||||
else if(strncmp(severity_name,"DEBUG",5)==0)
|
||||
*severity= LIBDAX_MSGS_SEV_DEBUG;
|
||||
else if(strncmp(severity_name,"ERRFILE",7)==0)
|
||||
*severity= LIBDAX_MSGS_SEV_ERRFILE;
|
||||
else if(strncmp(severity_name,"ALL",3)==0)
|
||||
*severity= LIBDAX_MSGS_SEV_ALL;
|
||||
else {
|
||||
*severity= LIBDAX_MSGS_SEV_NEVER;
|
||||
*severity= LIBDAX_MSGS_SEV_ALL;
|
||||
return(0);
|
||||
}
|
||||
return(1);
|
||||
@ -278,8 +284,7 @@ int libdax_msgs__sev_to_text(int severity, char **severity_name,
|
||||
int flag)
|
||||
{
|
||||
if(flag&1) {
|
||||
*severity_name=
|
||||
"NEVER\nABORT\nFATAL\nSORRY\nWARNING\nHINT\nNOTE\nUPDATE\nDEBUG\nALL";
|
||||
*severity_name= "NEVER\nABORT\nFATAL\nFAILURE\nMISHAP\nSORRY\nWARNING\nHINT\nNOTE\nUPDATE\nDEBUG\nERRFILE\nALL";
|
||||
return(1);
|
||||
}
|
||||
*severity_name= "";
|
||||
@ -289,6 +294,10 @@ int libdax_msgs__sev_to_text(int severity, char **severity_name,
|
||||
*severity_name= "ABORT";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_FATAL)
|
||||
*severity_name= "FATAL";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_FAILURE)
|
||||
*severity_name= "FAILURE";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_MISHAP)
|
||||
*severity_name= "MISHAP";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_SORRY)
|
||||
*severity_name= "SORRY";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_WARNING)
|
||||
@ -301,6 +310,8 @@ int libdax_msgs__sev_to_text(int severity, char **severity_name,
|
||||
*severity_name= "UPDATE";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_DEBUG)
|
||||
*severity_name= "DEBUG";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_ERRFILE)
|
||||
*severity_name= "ERRFILE";
|
||||
else if(severity>=LIBDAX_MSGS_SEV_ALL)
|
||||
*severity_name= "ALL";
|
||||
else {
|
||||
@ -311,7 +322,7 @@ int libdax_msgs__sev_to_text(int severity, char **severity_name,
|
||||
}
|
||||
|
||||
|
||||
int libdax_msgs_submit(struct libdax_msgs *m, int driveno, int error_code,
|
||||
int libdax_msgs_submit(struct libdax_msgs *m, int origin, int error_code,
|
||||
int severity, int priority, char *msg_text,
|
||||
int os_errno, int flag)
|
||||
{
|
||||
@ -349,7 +360,7 @@ int libdax_msgs_submit(struct libdax_msgs *m, int driveno, int error_code,
|
||||
ret= libdax_msgs_item_new(&item,m->youngest,0);
|
||||
if(ret<=0)
|
||||
goto failed;
|
||||
item->driveno= driveno;
|
||||
item->origin= origin;
|
||||
item->error_code= error_code;
|
||||
item->severity= severity;
|
||||
item->priority= priority;
|
||||
|
@ -1,8 +1,8 @@
|
||||
|
||||
/* libdax_msgs
|
||||
Message handling facility of libdax.
|
||||
Copyright (C) 2006-2007 Thomas Schmitt <scdbackup@gmx.net>,
|
||||
provided under GPL
|
||||
Copyright (C) 2006-2008 Thomas Schmitt <scdbackup@gmx.net>,
|
||||
provided under GPL version 2
|
||||
*/
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ struct libdax_msgs_item {
|
||||
|
||||
double timestamp;
|
||||
pid_t process_id;
|
||||
int driveno;
|
||||
int origin;
|
||||
|
||||
int severity;
|
||||
int priority;
|
||||
@ -120,6 +120,19 @@ struct libdax_msgs_item;
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_ALL 0x00000000
|
||||
|
||||
|
||||
/** Messages of this severity shall transport plain disk file paths
|
||||
whenever an event of severity SORRY or above is related with an
|
||||
individual disk file.
|
||||
No message text shall be added to the file path. The ERRFILE message
|
||||
shall be issued before the human readable message which carries the
|
||||
true event severity. That message should contain the file path so it
|
||||
can be found by strstr(message, path)!=NULL.
|
||||
The error code shall be the same as with the human readable message.
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_ERRFILE 0x08000000
|
||||
|
||||
|
||||
/** Debugging messages not to be visible to normal users by default
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_DEBUG 0x10000000
|
||||
@ -140,15 +153,70 @@ struct libdax_msgs_item;
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_WARNING 0x50000000
|
||||
|
||||
/** Non-fatal error messages indicating that parts of the action failed
|
||||
but processing will/should go on
|
||||
|
||||
/** Non-fatal error messages indicating that parts of an action failed but
|
||||
processing may go on if one accepts deviations from the desired result.
|
||||
|
||||
SORRY may also be the severity for incidents which are severe enough
|
||||
for FAILURE but happen within already started irrevocable actions,
|
||||
like ISO image generation. A precondition for such a severity ease is
|
||||
that the action can be continued after the incident.
|
||||
See below MISHAP for what xorriso would need instead of this kind of SORRY
|
||||
and generates for itself in case of libisofs image generation.
|
||||
|
||||
E.g.: A pattern yields no result.
|
||||
A speed setting cannot be made.
|
||||
A libisofs input file is inaccessible during image generation.
|
||||
|
||||
After SORRY a function should try to go on if that makes any sense
|
||||
and if no threshold prescribes abort on SORRY. The function should
|
||||
nevertheless indicate some failure in its return value.
|
||||
It should - but it does not have to.
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_SORRY 0x60000000
|
||||
|
||||
|
||||
/** A FAILURE (see below) which can be tolerated during long lasting
|
||||
operations just because they cannot simply be stopped or revoked.
|
||||
|
||||
xorriso converts libisofs SORRY messages issued during image generation
|
||||
into MISHAP messages in order to allow its evaluators to distinguish
|
||||
image generation problems from minor image composition problems.
|
||||
E.g.:
|
||||
A libisofs input file is inaccessible during image generation.
|
||||
|
||||
After a MISHAP a function should behave like after SORRY.
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_MISHAP 0x64000000
|
||||
|
||||
|
||||
/** Non-fatal error indicating that an important part of an action failed and
|
||||
that only a new setup of preconditions will give hope for sufficient
|
||||
success.
|
||||
|
||||
E.g.: No media is inserted in the output drive.
|
||||
No write mode can be found for inserted media.
|
||||
A libisofs input file is inaccessible during grafting.
|
||||
|
||||
After FAILURE a function should end with a return value indicating failure.
|
||||
It is at the discretion of the function whether it ends immediately in any
|
||||
case or whether it tries to go on if the eventual threshold allows.
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_FAILURE 0x68000000
|
||||
|
||||
|
||||
/** An error message which puts the whole operation of the program in question
|
||||
|
||||
E.g.: Not enough memory for essential temporary objects.
|
||||
Irregular errors from resources.
|
||||
Programming errors (soft assert).
|
||||
|
||||
After FATAL a function should end very soon with a return value
|
||||
indicating severe failure.
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_FATAL 0x70000000
|
||||
|
||||
|
||||
/** A message from an abort handler which will finally finish libburn
|
||||
*/
|
||||
#define LIBDAX_MSGS_SEV_ABORT 0x71000000
|
||||
@ -173,6 +241,16 @@ struct libdax_msgs_item;
|
||||
#define LIBDAX_MSGS_PRIO_NEVER 0x7fffffff
|
||||
|
||||
|
||||
/* Origin numbers of libburn drives may range from 0 to 1048575 */
|
||||
#define LIBDAX_MSGS_ORIGIN_DRIVE_BASE 0
|
||||
#define LIBDAX_MSGS_ORIGIN_DRIVE_TOP 0xfffff
|
||||
|
||||
/* Origin numbers of libisofs images may range from 1048575 to 2097152 */
|
||||
#define LIBDAX_MSGS_ORIGIN_IMAGE_BASE 0x100000
|
||||
#define LIBDAX_MSGS_ORIGIN_IMAGE_TOP 0x1fffff
|
||||
|
||||
|
||||
|
||||
/* Public Functions */
|
||||
|
||||
/* Calls initiated from inside the direct owner (e.g. from libburn) */
|
||||
@ -211,7 +289,10 @@ int libdax_msgs_refer(struct libdax_msgs **pt, struct libdax_msgs *o, int flag);
|
||||
|
||||
|
||||
/** Submit a message to a message handling facility.
|
||||
@param driveno program specific drive number. Use -1 if no number is known.
|
||||
@param origin program specific identification number of the originator of
|
||||
a message. E.g. drive number. Programs should have an own
|
||||
range of origin numbers. See above LIBDAX_MSGS_ORIGIN_*_BASE
|
||||
Use -1 if no number is known.
|
||||
@param error_code Unique error code. Use only registered codes. See below.
|
||||
The same unique error_code may be issued at different
|
||||
occasions but those should be equivalent out of the view
|
||||
@ -224,11 +305,12 @@ int libdax_msgs_refer(struct libdax_msgs **pt, struct libdax_msgs *o, int flag);
|
||||
@param flag Bitfield for control purposes (unused yet, submit 0)
|
||||
@return 1 on success, 0 on rejection, <0 for severe errors
|
||||
*/
|
||||
int libdax_msgs_submit(struct libdax_msgs *m, int driveno, int error_code,
|
||||
int libdax_msgs_submit(struct libdax_msgs *m, int origin, int error_code,
|
||||
int severity, int priority, char *msg_text,
|
||||
int os_errno, int flag);
|
||||
|
||||
|
||||
|
||||
/* Calls from applications (to be forwarded by direct owner) */
|
||||
|
||||
|
||||
@ -300,7 +382,7 @@ int libdax_msgs_item_get_msg(struct libdax_msgs_item *item,
|
||||
@return 1 on success, 0 on invalid item, <0 for servere errors
|
||||
*/
|
||||
int libdax_msgs_item_get_origin(struct libdax_msgs_item *item,
|
||||
double *timestamp, pid_t *process_id, int *driveno,
|
||||
double *timestamp, pid_t *process_id, int *origin,
|
||||
int flag);
|
||||
|
||||
|
||||
@ -441,7 +523,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
||||
0x00020156 (SORRY,HIGH) = Desired fifo buffer too small
|
||||
0x00020157 (FATAL,HIGH) = burn_source is not a fifo object
|
||||
0x00020158 (DEBUG,LOW) = Reporting thread disposal precautions
|
||||
|
||||
0x00020159 (DEBUG,HIGH) = TOC Format 0 returns inconsistent data
|
||||
|
||||
libdax_audioxtr:
|
||||
0x00020200 (SORRY,HIGH) = Cannot open audio source file
|
||||
@ -453,34 +535,81 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
||||
------------------------------------------------------------------------------
|
||||
Range "vreixo" : 0x00030000 to 0x0003ffff
|
||||
|
||||
General:
|
||||
0x00031001 (SORRY,HIGH) = Cannot read file (ignored)
|
||||
0x00031002 (FATAL,HIGH) = Cannot read file (operation canceled)
|
||||
0x0003ffff (FAILURE,HIGH) = Operation canceled
|
||||
0x0003fffe (FATAL,HIGH) = Unknown or unexpected fatal error
|
||||
0x0003fffd (FAILURE,HIGH) = Unknown or unexpected error
|
||||
0x0003fffc (FATAL,HIGH) = Internal programming error
|
||||
0x0003fffb (FAILURE,HIGH) = NULL pointer where NULL not allowed
|
||||
0x0003fffa (FATAL,HIGH) = Memory allocation error
|
||||
0x0003fff9 (FATAL,HIGH) = Interrupted by a signal
|
||||
0x0003fff8 (FAILURE,HIGH) = Invalid parameter value
|
||||
0x0003fff7 (FATAL,HIGH) = Cannot create a needed thread
|
||||
0x0003fff6 (FAILURE,HIGH) = Write error
|
||||
0x0003fff5 (FAILURE,HIGH) = Buffer read error
|
||||
0x0003ffc0 (FAILURE,HIGH) = Trying to add a node already added to another dir
|
||||
0x0003ffbf (FAILURE,HIGH) = Node with same name already exist
|
||||
0x0003ffbe (FAILURE,HIGH) = Trying to remove a node that was not added to dir
|
||||
0x0003ffbd (FAILURE,HIGH) = A requested node does not exist
|
||||
0x0003ffbc (FAILURE,HIGH) = Image already bootable
|
||||
0x0003ffbb (FAILURE,HIGH) = Trying to use an invalid file as boot image
|
||||
0x0003ff80 (FAILURE,HIGH) = Error on file operation
|
||||
0x0003ff7f (FAILURE,HIGH) = Trying to open an already openned file
|
||||
0x0003ff7e (FAILURE,HIGH) = Access to file is not allowed
|
||||
0x0003ff7d (FAILURE,HIGH) = Incorrect path to file
|
||||
0x0003ff7c (FAILURE,HIGH) = The file does not exist in the filesystem
|
||||
0x0003ff7b (FAILURE,HIGH) = Trying to read or close a file not openned
|
||||
0x0003ff7a (FAILURE,HIGH) = Directory used where no dir is expected
|
||||
0x0003ff79 (FAILURE,HIGH) = File read error
|
||||
0x0003ff78 (FAILURE,HIGH) = Not dir used where a dir is expected
|
||||
0x0003ff77 (FAILURE,HIGH) = Not symlink used where a symlink is expected
|
||||
0x0003ff76 (FAILURE,HIGH) = Cannot seek to specified location
|
||||
0x0003ff75 (HINT,MEDIUM) = File not supported in ECMA-119 tree and ignored
|
||||
0x0003ff74 (HINT,MEDIUM) = File bigger than supported by used standard
|
||||
0x0003ff73 (MISHAP,HIGH) = File read error during image creation
|
||||
0x0003ff72 (HINT,MEDIUM) = Cannot convert filename to requested charset
|
||||
0x0003ff71 (SORRY,HIGH) = File cannot be added to the tree
|
||||
0x0003ff70 (HINT,MEDIUM) = File path breaks specification constraints
|
||||
0x0003ff00 (FAILURE,HIGH) = Charset conversion error
|
||||
0x0003feff (FAILURE,HIGH) = Too much files to mangle
|
||||
0x0003fec0 (FAILURE,HIGH) = Wrong or damaged Primary Volume Descriptor
|
||||
0x0003febf (SORRY,HIGH) = Wrong or damaged RR entry
|
||||
0x0003febe (SORRY,HIGH) = Unsupported RR feature
|
||||
0x0003febd (FAILURE,HIGH) = Wrong or damaged ECMA-119
|
||||
0x0003febc (FAILURE,HIGH) = Unsupported ECMA-119 feature
|
||||
0x0003febb (SORRY,HIGH) = Wrong or damaged El-Torito catalog
|
||||
0x0003feba (SORRY,HIGH) = Unsupported El-Torito feature
|
||||
0x0003feb9 (SORRY,HIGH) = Cannot patch isolinux boot image
|
||||
0x0003feb8 (SORRY,HIGH) = Unsupported SUSP feature
|
||||
0x0003feb7 (WARNING,HIGH) = Error on a RR entry that can be ignored
|
||||
0x0003feb6 (HINT,MEDIUM) = Error on a RR entry that can be ignored
|
||||
0x0003feb5 (WARNING,HIGH) = Multiple ER SUSP entries found
|
||||
0x0003feb4 (HINT,MEDIUM) = Unsupported volume descriptor found
|
||||
0x0003feb3 (WARNING,HIGH) = El-Torito related warning
|
||||
0x0003feb2 (MISHAP,HIGH) = Image write cancelled
|
||||
0x0003feb1 (WARNING,HIGH) = El-Torito image is hidden
|
||||
|
||||
Image reading:
|
||||
0x00031000 (FATAL,HIGH) = Unsupported ISO-9660 image
|
||||
0x00031001 (HINT,MEDIUM) = Unsupported Vol Desc that will be ignored
|
||||
0x00031002 (FATAL,HIGH) = Damaged ISO-9660 image
|
||||
0x00031003 (SORRY,HIGH) = Cannot read previous image file
|
||||
|
||||
Rock-Ridge:
|
||||
0x00030101 (HINT,MEDIUM) = Unsupported SUSP entry that will be ignored
|
||||
0x00030102 (SORRY,HIGH) = Wrong/damaged SUSP entry
|
||||
0x00030103 (WARNING,MEDIUM)= Multiple SUSP ER entries where found
|
||||
0x00030111 (SORRY,HIGH) = Unsupported RR feature
|
||||
0x00030112 (SORRY,HIGH) = Error in a Rock Ridge entry
|
||||
|
||||
El-Torito:
|
||||
0x00030201 (HINT,MEDIUM) = Unsupported Boot Vol Desc that will be ignored
|
||||
0x00030202 (SORRY,HIGH) = Wrong El-Torito catalog
|
||||
0x00030203 (HINT,MEDIUM) = Unsupported El-Torito feature
|
||||
0x00030204 (SORRY,HIGH) = Invalid file to be an El-Torito image
|
||||
0x00030205 (WARNING,MEDIUM)= Cannot properly patch isolinux image
|
||||
0x00030206 (WARNING,MEDIUM)= Copying El-Torito from a previous image without
|
||||
enought info about it
|
||||
|
||||
Joliet:
|
||||
0x00030301 (NOTE,MEDIUM) = Unsupported file type for Joliet tree
|
||||
Outdated codes which may not be re-used for other purposes than
|
||||
re-instating them, if ever:
|
||||
|
||||
X 0x00031001 (SORRY,HIGH) = Cannot read file (ignored)
|
||||
X 0x00031002 (FATAL,HIGH) = Cannot read file (operation canceled)
|
||||
X 0x00031000 (FATAL,HIGH) = Unsupported ISO-9660 image
|
||||
X 0x00031001 (HINT,MEDIUM) = Unsupported Vol Desc that will be ignored
|
||||
X 0x00031002 (FATAL,HIGH) = Damaged ISO-9660 image
|
||||
X 0x00031003 (SORRY,HIGH) = Cannot read previous image file
|
||||
X 0x00030101 (HINT,MEDIUM) = Unsupported SUSP entry that will be ignored
|
||||
X 0x00030102 (SORRY,HIGH) = Wrong/damaged SUSP entry
|
||||
X 0x00030103 (WARNING,MEDIUM)= Multiple SUSP ER entries where found
|
||||
X 0x00030111 (SORRY,HIGH) = Unsupported RR feature
|
||||
X 0x00030112 (SORRY,HIGH) = Error in a Rock Ridge entry
|
||||
X 0x00030201 (HINT,MEDIUM) = Unsupported Boot Vol Desc that will be ignored
|
||||
X 0x00030202 (SORRY,HIGH) = Wrong El-Torito catalog
|
||||
X 0x00030203 (HINT,MEDIUM) = Unsupported El-Torito feature
|
||||
X 0x00030204 (SORRY,HIGH) = Invalid file to be an El-Torito image
|
||||
X 0x00030205 (WARNING,MEDIUM)= Cannot properly patch isolinux image
|
||||
X 0x00030206 (WARNING,MEDIUM)= Copying El-Torito from a previous image without
|
||||
X enought info about it
|
||||
X 0x00030301 (NOTE,MEDIUM) = Unsupported file type for Joliet tree
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
@ -494,6 +623,23 @@ Range "application" : 0x00040000 to 0x0004ffff
|
||||
0x00040005 (NOTE,HIGH) : Application supplied message
|
||||
0x00040006 (UPDATE,HIGH) : Application supplied message
|
||||
0x00040007 (DEBUG,HIGH) : Application supplied message
|
||||
0x00040008 (*,HIGH) : Application supplied message
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
Range "libisofs-xorriso" : 0x00050000 to 0x0005ffff
|
||||
|
||||
This is an alternative representation of libisofs.so.6 error codes in xorriso.
|
||||
If values returned by iso_error_get_code() do not fit into 0x30000 to 0x3ffff
|
||||
then they get truncated to 16 bit and mapped into this range.
|
||||
(This should never need to happen, of course.)
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
Range "libisoburn" : 0x00060000 to 0x00006ffff
|
||||
|
||||
0x00060000 (*,*) : Message which shall be attributed to libisoburn
|
||||
|
||||
>>> the messages of libisoburn need to be registered individually
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
199
libburn/mmc.c
199
libburn/mmc.c
@ -91,6 +91,8 @@ extern struct libdax_msgs *libdax_messenger;
|
||||
ts A70208 : Finally made tests with DVD-R. Worked exactly as new DVD-RW.
|
||||
ts A70306 : Implemented DVD+R (always -multi for now)
|
||||
ts A70330 : Allowed finalizing of DVD+R.
|
||||
ts A80228 : Made DVD+R/DL support official after nightmorph reported success
|
||||
in http://libburnia-project.org/ticket/13
|
||||
*/
|
||||
|
||||
/* ts A70519 : With MMC commands of data direction FROM_DRIVE:
|
||||
@ -116,6 +118,7 @@ extern struct libdax_msgs *libdax_messenger;
|
||||
static unsigned char MMC_GET_MSINFO[] =
|
||||
{ 0x43, 0, 1, 0, 0, 0, 0, 16, 0, 0 };
|
||||
static unsigned char MMC_GET_TOC[] = { 0x43, 2, 2, 0, 0, 0, 0, 16, 0, 0 };
|
||||
static unsigned char MMC_GET_TOC_FMT0[] = { 0x43, 0, 0, 0, 0, 0, 0, 16, 0, 0 };
|
||||
static unsigned char MMC_GET_ATIP[] = { 0x43, 2, 4, 0, 0, 0, 0, 16, 0, 0 };
|
||||
static unsigned char MMC_GET_DISC_INFO[] =
|
||||
{ 0x51, 0, 0, 0, 0, 0, 0, 16, 0, 0 };
|
||||
@ -305,8 +308,9 @@ int mmc_read_track_info(struct burn_drive *d, int trackno, struct buffer *buf,
|
||||
c.opcode[1] = 1;
|
||||
if(trackno<=0) {
|
||||
if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
|
||||
d->current_profile == 0x12 )
|
||||
/* DVD+RW , DVD-RW restricted overwrite , DVD-RAM */
|
||||
d->current_profile == 0x12 || d->current_profile == 0x43)
|
||||
/* DVD+RW , DVD-RW restricted overwrite , DVD-RAM
|
||||
BD-RE */
|
||||
trackno = 1;
|
||||
else if (d->current_profile == 0x10 ||
|
||||
d->current_profile == 0x11 ||
|
||||
@ -348,7 +352,7 @@ int mmc_get_nwa(struct burn_drive *d, int trackno, int *lba, int *nwa)
|
||||
*nwa = mmc_four_char_to_int(data + 12);
|
||||
num = mmc_four_char_to_int(data + 16);
|
||||
if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
|
||||
d->current_profile == 0x12) {
|
||||
d->current_profile == 0x12 || d->current_profile == 0x43) {
|
||||
/* overwriteable */
|
||||
*lba = *nwa = num = 0;
|
||||
} else if (!(data[7]&1)) {
|
||||
@ -797,6 +801,153 @@ int mmc_fake_toc_entry(struct burn_toc_entry *entry, int session_number,
|
||||
}
|
||||
|
||||
|
||||
/* ts A71128 : for DVD-ROM drives which offer no reliable track information */
|
||||
static int mmc_read_toc_fmt0_al(struct burn_drive *d, int *alloc_len)
|
||||
{
|
||||
struct burn_track *track;
|
||||
struct burn_session *session;
|
||||
struct burn_toc_entry *entry;
|
||||
struct buffer buf;
|
||||
struct command c;
|
||||
int dlen, i, old_alloc_len, session_number, prev_session = -1;
|
||||
int lba, size;
|
||||
unsigned char *tdata, size_data[4], start_data[4];
|
||||
|
||||
if (*alloc_len < 4)
|
||||
return 0;
|
||||
|
||||
scsi_init_command(&c, MMC_GET_TOC_FMT0, sizeof(MMC_GET_TOC_FMT0));
|
||||
c.dxfer_len = *alloc_len;
|
||||
c.opcode[7] = (c.dxfer_len >> 8) & 0xff;
|
||||
c.opcode[8] = c.dxfer_len & 0xff;
|
||||
c.retry = 1;
|
||||
c.page = &buf;
|
||||
c.page->bytes = 0;
|
||||
c.page->sectors = 0;
|
||||
c.dir = FROM_DRIVE;
|
||||
d->issue_command(d, &c);
|
||||
|
||||
if (c.error) {
|
||||
err_ex:;
|
||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||
0x0002010d,
|
||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"Could not inquire TOC", 0,0);
|
||||
d->status = BURN_DISC_UNSUITABLE;
|
||||
d->toc_entries = 0;
|
||||
/* Prefering memory leaks over fandangos */
|
||||
d->toc_entry = calloc(1, sizeof(struct burn_toc_entry));
|
||||
return 0;
|
||||
}
|
||||
dlen = c.page->data[0] * 256 + c.page->data[1];
|
||||
old_alloc_len = *alloc_len;
|
||||
*alloc_len = dlen + 2;
|
||||
if (old_alloc_len < 12)
|
||||
return 1;
|
||||
if (dlen + 2 > old_alloc_len)
|
||||
dlen = old_alloc_len - 2;
|
||||
d->complete_sessions = 1 + c.page->data[3] - c.page->data[2];
|
||||
d->last_track_no = d->complete_sessions;
|
||||
if (dlen - 2 < (d->last_track_no + 1) * 8) {
|
||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||
0x00020159,
|
||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"TOC Format 0 returns inconsistent data", 0,0);
|
||||
goto err_ex;
|
||||
}
|
||||
|
||||
d->toc_entries = d->last_track_no + d->complete_sessions;
|
||||
if (d->toc_entries < 1)
|
||||
return 0;
|
||||
d->toc_entry = calloc(d->toc_entries, sizeof(struct burn_toc_entry));
|
||||
if(d->toc_entry == NULL)
|
||||
return 0;
|
||||
|
||||
d->disc = burn_disc_create();
|
||||
if (d->disc == NULL)
|
||||
return 0;
|
||||
for (i = 0; i < d->complete_sessions; i++) {
|
||||
session = burn_session_create();
|
||||
if (session == NULL)
|
||||
return 0;
|
||||
burn_disc_add_session(d->disc, session, BURN_POS_END);
|
||||
burn_session_free(session);
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < d->last_track_no; i++) {
|
||||
tdata = c.page->data + 4 + i * 8;
|
||||
session_number = i + 1;
|
||||
if (session_number != prev_session && prev_session > 0) {
|
||||
/* leadout entry previous session */
|
||||
entry = &(d->toc_entry[(i - 1) + prev_session]);
|
||||
lba = mmc_four_char_to_int(start_data) +
|
||||
mmc_four_char_to_int(size_data);
|
||||
mmc_int_to_four_char(start_data, lba);
|
||||
mmc_int_to_four_char(size_data, 0);
|
||||
mmc_fake_toc_entry(entry, prev_session, 0xA2,
|
||||
size_data, start_data);
|
||||
entry->min= entry->sec= entry->frame= 0;
|
||||
d->disc->session[prev_session - 1]->leadout_entry =
|
||||
entry;
|
||||
}
|
||||
|
||||
/* ??? >>> d->media_capacity_remaining , d->media_lba_limit
|
||||
as of mmc_fake_toc()
|
||||
*/
|
||||
|
||||
entry = &(d->toc_entry[i + session_number - 1]);
|
||||
track = burn_track_create();
|
||||
if (track == NULL)
|
||||
return -1;
|
||||
burn_session_add_track(
|
||||
d->disc->session[session_number - 1],
|
||||
track, BURN_POS_END);
|
||||
track->entry = entry;
|
||||
burn_track_free(track);
|
||||
|
||||
memcpy(start_data, tdata + 4, 4);
|
||||
/* size_data are estimated from next track start */
|
||||
memcpy(size_data, tdata + 8 + 4, 4);
|
||||
size = mmc_four_char_to_int(size_data) -
|
||||
mmc_four_char_to_int(start_data);
|
||||
mmc_int_to_four_char(size_data, size);
|
||||
mmc_fake_toc_entry(entry, session_number, i + 1,
|
||||
size_data, start_data);
|
||||
if (prev_session != session_number)
|
||||
d->disc->session[session_number - 1]->firsttrack = i+1;
|
||||
d->disc->session[session_number - 1]->lasttrack = i+1;
|
||||
prev_session = session_number;
|
||||
}
|
||||
if (prev_session > 0 && prev_session <= d->disc->sessions) {
|
||||
/* leadout entry of last session of closed disc */
|
||||
tdata = c.page->data + 4 + d->last_track_no * 8;
|
||||
entry = &(d->toc_entry[(d->last_track_no - 1) + prev_session]);
|
||||
memcpy(start_data, tdata + 4, 4);
|
||||
mmc_int_to_four_char(size_data, 0);
|
||||
mmc_fake_toc_entry(entry, prev_session, 0xA2,
|
||||
size_data, start_data);
|
||||
entry->min= entry->sec= entry->frame= 0;
|
||||
d->disc->session[prev_session - 1]->leadout_entry = entry;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ts A71128 : for DVD-ROM drives which offer no reliable track information */
|
||||
static int mmc_read_toc_fmt0(struct burn_drive *d)
|
||||
{
|
||||
int alloc_len = 4, ret;
|
||||
|
||||
if (mmc_function_spy(d, "mmc_read_toc_fmt0") <= 0)
|
||||
return -1;
|
||||
ret = mmc_read_toc_fmt0_al(d, &alloc_len);
|
||||
if (alloc_len >= 12)
|
||||
ret = mmc_read_toc_fmt0_al(d, &alloc_len);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* ts A70131 : compose a disc TOC structure from d->complete_sessions
|
||||
and 52h READ TRACK INFORMATION */
|
||||
int mmc_fake_toc(struct burn_drive *d)
|
||||
@ -825,6 +976,12 @@ int mmc_fake_toc(struct burn_drive *d)
|
||||
msg, 0,0);
|
||||
return 0;
|
||||
}
|
||||
/* ts A71128 : My DVD-ROM drive issues no reliable track info.
|
||||
One has to try 43h READ TOC/PMA/ATIP Form 0. */
|
||||
if (d->current_profile == 0x10 && d->last_track_no <= 1) {
|
||||
ret = mmc_read_toc_fmt0(d);
|
||||
return ret;
|
||||
}
|
||||
d->disc = burn_disc_create();
|
||||
if (d->disc == NULL)
|
||||
return -1;
|
||||
@ -835,12 +992,15 @@ int mmc_fake_toc(struct burn_drive *d)
|
||||
memset(d->toc_entry, 0,d->toc_entries * sizeof(struct burn_toc_entry));
|
||||
for (i = 0; i < d->complete_sessions; i++) {
|
||||
session = burn_session_create();
|
||||
if (session == NULL)
|
||||
return -1;
|
||||
burn_disc_add_session(d->disc, session, BURN_POS_END);
|
||||
burn_session_free(session);
|
||||
}
|
||||
memset(size_data, 0, 4);
|
||||
memset(start_data, 0, 4);
|
||||
|
||||
|
||||
/* Entry Layout :
|
||||
session 1 track 1 entry 0
|
||||
...
|
||||
@ -943,13 +1103,15 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
|
||||
if (!(d->current_profile == -1 || d->current_is_cd_profile)) {
|
||||
/* ts A70131 : MMC_GET_TOC uses Response Format 2
|
||||
For DVD this fails with 5,24,00 */
|
||||
/* One could try Response Format 0: mmc5r03.pdf 6.26.3.2
|
||||
which does not yield the same result wit the same disc
|
||||
/* mmc_read_toc_fmt0() uses
|
||||
Response Format 0: mmc5r03.pdf 6.26.3.2
|
||||
which does not yield the same result with the same disc
|
||||
on different drives.
|
||||
*/
|
||||
/* ts A70201 :
|
||||
This uses the session count from 51h READ DISC INFORMATION
|
||||
and the track records from 52h READ TRACK INFORMATION
|
||||
and the track records from 52h READ TRACK INFORMATION.
|
||||
mmc_read_toc_fmt0() is used as fallback for dull DVD-ROM.
|
||||
*/
|
||||
mmc_fake_toc(d);
|
||||
|
||||
@ -1251,7 +1413,7 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
|
||||
*alloc_len = len + 2;
|
||||
if (old_alloc_len < 34)
|
||||
return 1;
|
||||
if (*alloc_len < 24) /* data[23] is the last byte used her */
|
||||
if (*alloc_len < 24) /* data[23] is the last byte used here */
|
||||
return 0;
|
||||
if (len + 2 > old_alloc_len)
|
||||
len = old_alloc_len - 2;
|
||||
@ -1263,6 +1425,7 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
|
||||
disc_status = 2; /* always full and finalized */
|
||||
d->erasable = 0; /* never erasable */
|
||||
}
|
||||
|
||||
switch (disc_status) {
|
||||
case 0:
|
||||
d->toc_entries = 0;
|
||||
@ -1286,6 +1449,15 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
|
||||
break;
|
||||
}
|
||||
|
||||
/* ts A80207 : DVD +/- R DL can normally be read but not be written */
|
||||
if((d->current_profile == 0x2b || d->current_profile == 0x15) &&
|
||||
!d->current_is_supported_profile) {
|
||||
if(d->status == BURN_DISC_APPENDABLE)
|
||||
d->status = BURN_DISC_FULL;
|
||||
d->erasable = 0; /* never erasable */
|
||||
d->current_is_supported_profile = 1;
|
||||
}
|
||||
|
||||
if ((d->current_profile != 0 || d->status != BURN_DISC_UNREADY)
|
||||
&& ! d->current_is_supported_profile) {
|
||||
if (!d->silent_on_scsi_error) {
|
||||
@ -1321,7 +1493,7 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
|
||||
ts A70112 : same for DVD-RAM
|
||||
*/
|
||||
if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
|
||||
d->current_profile == 0x12)
|
||||
d->current_profile == 0x12 || d->current_profile == 0x43)
|
||||
d->status = BURN_DISC_BLANK;
|
||||
|
||||
if (d->status == BURN_DISC_BLANK) {
|
||||
@ -1935,7 +2107,8 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
|
||||
d->current_is_supported_profile = 1;
|
||||
#endif
|
||||
#ifdef Libburn_support_dvd_raM
|
||||
if (cp == 0x12)
|
||||
if (cp == 0x12 || (cp == 0x43 && burn_support_untested_profiles))
|
||||
/* DVD-RAM , BD-RE */
|
||||
d->current_is_supported_profile = 1;
|
||||
#endif
|
||||
#ifdef Libburn_support_dvd_r_seQ
|
||||
@ -1945,8 +2118,7 @@ static int mmc_get_configuration_al(struct burn_drive *d, int *alloc_len)
|
||||
d->current_is_supported_profile = 1;
|
||||
#endif
|
||||
#ifdef Libburn_support_dvd_plus_R
|
||||
if (cp == 0x1b || (cp == 0x2b && burn_support_untested_profiles))
|
||||
/* DVD+R , DVD+R/DL */
|
||||
if (cp == 0x1b || cp == 0x2b) /* DVD+R , DVD+R/DL */
|
||||
d->current_is_supported_profile = 1;
|
||||
#endif
|
||||
|
||||
@ -2835,8 +3007,9 @@ int mmc_compose_mode_page_5(struct burn_drive *d,
|
||||
pd[13] = 16;
|
||||
|
||||
} else if (d->current_profile == 0x1a || d->current_profile == 0x1b ||
|
||||
d->current_profile == 0x2b || d->current_profile == 0x12) {
|
||||
/* not with DVD+R[W][/DL] or DVD-RAM */;
|
||||
d->current_profile == 0x2b || d->current_profile == 0x12 ||
|
||||
d->current_profile == 0x43) {
|
||||
/* not with DVD+R[W][/DL] or DVD-RAM or BD-RE */;
|
||||
return 0;
|
||||
} else {
|
||||
/* Traditional setup for CD */
|
||||
|
@ -292,7 +292,7 @@ static void flipq(unsigned char *sub)
|
||||
|
||||
|
||||
/* ts A70904 */
|
||||
/** @param flag bit=be silent on data shortage */
|
||||
/** @param flag bit0=be silent on data shortage */
|
||||
int burn_stdio_read(int fd, char *buf, int bufsize, struct burn_drive *d,
|
||||
int flag)
|
||||
{
|
||||
@ -325,6 +325,19 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
|
||||
char msg[81], *wpt;
|
||||
struct buffer buf;
|
||||
|
||||
/*
|
||||
#define Libburn_read_data_adr_logginG 1
|
||||
*/
|
||||
#ifdef Libburn_read_data_adr_logginG
|
||||
static FILE *log_fp= NULL;
|
||||
|
||||
if(log_fp == NULL)
|
||||
log_fp = fopen("/tmp/burn_read_data_log", "a");
|
||||
if(log_fp!=NULL)
|
||||
fprintf(log_fp, "%d\n", (int) (byte_address / 2048));
|
||||
#endif /* Libburn_read_data_logginG */
|
||||
|
||||
|
||||
*data_count = 0;
|
||||
sose_mem = d->silent_on_scsi_error;
|
||||
|
||||
@ -375,9 +388,12 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
|
||||
#define O_LARGEFILE 0
|
||||
#endif
|
||||
|
||||
fd = open(d->devname, O_RDONLY | O_LARGEFILE);
|
||||
fd = d->stdio_fd;
|
||||
if (fd < 0)
|
||||
d->stdio_fd = fd =
|
||||
open(d->devname, O_RDONLY | O_LARGEFILE);
|
||||
if (fd == -1) {
|
||||
if (!(flag & 1))
|
||||
if (errno != ENOENT || !(flag & 2))
|
||||
libdax_msgs_submit(libdax_messenger,
|
||||
d->global_index,
|
||||
0x00020005,
|
||||
@ -387,10 +403,12 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
|
||||
ret = 0; goto ex;
|
||||
}
|
||||
if (lseek(fd, byte_address, SEEK_SET) == -1) {
|
||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||
0x00020147,
|
||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"Cannot address start byte", errno, 0);
|
||||
if (!(flag & 2))
|
||||
libdax_msgs_submit(libdax_messenger,
|
||||
d->global_index,
|
||||
0x00020147,
|
||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"Cannot address start byte", errno, 0);
|
||||
ret = 0; goto ex;
|
||||
}
|
||||
}
|
||||
@ -416,7 +434,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
|
||||
err = d->read_10(d, start, chunksize, d->buffer);
|
||||
} else {
|
||||
ret = burn_stdio_read(fd, (char *) d->buffer->data,
|
||||
cpy_size, d, 0);
|
||||
cpy_size, d, !!(flag & 2));
|
||||
err = 0;
|
||||
if (ret <= 0)
|
||||
err = BE_CANCELLED;
|
||||
@ -446,6 +464,14 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
|
||||
wpt += 2048;
|
||||
*data_count += 2048;
|
||||
}
|
||||
|
||||
libdax_msgs_submit(libdax_messenger,
|
||||
d->global_index,
|
||||
0x00020000,
|
||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"burn_read_data() returns 0",
|
||||
0, 0);
|
||||
|
||||
ret = 0; goto ex;
|
||||
}
|
||||
memcpy(wpt, d->buffer->data, cpy_size);
|
||||
@ -455,8 +481,10 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
|
||||
|
||||
ret = 1;
|
||||
ex:;
|
||||
/* <<< let it open until drive is given up or writing shall happen
|
||||
if (fd != -1)
|
||||
close(fd);
|
||||
*/
|
||||
d->buffer = NULL;
|
||||
d->busy = BURN_DRIVE_IDLE;
|
||||
return ret;
|
||||
|
@ -123,7 +123,12 @@ static void get_bytes(struct burn_track *track, int count, unsigned char *data)
|
||||
/* Next we use source data */
|
||||
curr = valid;
|
||||
if (!track->eos) {
|
||||
valid = track->source->read(track->source, data + curr, count - curr);
|
||||
if (track->source->read != NULL)
|
||||
valid = track->source->read(track->source,
|
||||
data + curr, count - curr);
|
||||
else
|
||||
valid = track->source->read_xt(track->source,
|
||||
data + curr, count - curr);
|
||||
} else valid = 0;
|
||||
|
||||
if (valid <= 0) { /* ts A61031 : extended from (valid == -1) */
|
||||
|
@ -308,6 +308,28 @@ static int sg_close_drive_fd(char *fname, int driveno, int *fd, int sorry)
|
||||
|
||||
if(*fd < 0)
|
||||
return(0);
|
||||
|
||||
#ifdef CDROM_MEDIA_CHANGED_disabled_because_not_helpful
|
||||
#ifdef CDSL_CURRENT
|
||||
/* ts A80217 : wondering whether the os knows about our activities */
|
||||
ret = ioctl(*fd, CDROM_MEDIA_CHANGED, CDSL_CURRENT);
|
||||
sprintf(msg, "ioctl(CDROM_MEDIA_CHANGED) == %d", ret);
|
||||
libdax_msgs_submit(libdax_messenger, driveno, 0x00000002,
|
||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, msg, 0, 0);
|
||||
|
||||
#ifdef BLKFLSBUF_disabled_because_not_helpful
|
||||
ret = ioctl(*fd, BLKFLSBUF, 0);
|
||||
sprintf(msg, "ioctl(BLKFLSBUF) == %d", ret);
|
||||
os_errno = 0;
|
||||
if(ret == -1)
|
||||
os_errno = errno;
|
||||
libdax_msgs_submit(libdax_messenger, driveno, 0x00000002,
|
||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, msg, os_errno,0);
|
||||
#endif /* BLKFLSBUF */
|
||||
|
||||
#endif /* CDSL_CURRENT */
|
||||
#endif /* CDROM_MEDIA_CHANGED */
|
||||
|
||||
ret = close(*fd);
|
||||
*fd = -1337;
|
||||
if(ret != -1) {
|
||||
|
@ -18,8 +18,6 @@ void burn_source_free(struct burn_source *src)
|
||||
enum burn_source_status burn_track_set_source(struct burn_track *t,
|
||||
struct burn_source *s)
|
||||
{
|
||||
if (!s->read)
|
||||
return BURN_SOURCE_FAILED;
|
||||
s->refcount++;
|
||||
t->source = s;
|
||||
|
||||
@ -43,3 +41,15 @@ struct burn_source *burn_source_new(void)
|
||||
out->refcount = 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
/* ts A71223 */
|
||||
int burn_source_cancel(struct burn_source *src)
|
||||
{
|
||||
if(src->read == NULL)
|
||||
if(src->version > 0)
|
||||
if(src->cancel != NULL)
|
||||
src->cancel(src);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -5,4 +5,6 @@
|
||||
|
||||
struct burn_source *burn_source_new(void);
|
||||
|
||||
int burn_source_cancel(struct burn_source *src);
|
||||
|
||||
#endif /*__SOURCE*/
|
||||
|
@ -566,17 +566,21 @@ void spc_sense_write_params(struct burn_drive *d)
|
||||
c.dir = FROM_DRIVE;
|
||||
d->issue_command(d, &c);
|
||||
|
||||
size = c.page->data[0] * 256 + c.page->data[1];
|
||||
/* ts A71128 : do not interpret reply if error */
|
||||
m = d->mdata;
|
||||
page = c.page->data + 8;
|
||||
burn_print(1, "write page length 0x%x\n", page[1]);
|
||||
m->write_page_length = page[1];
|
||||
m->write_page_valid = 1;
|
||||
if(!c.error) {
|
||||
size = c.page->data[0] * 256 + c.page->data[1];
|
||||
page = c.page->data + 8;
|
||||
burn_print(1, "write page length 0x%x\n", page[1]);
|
||||
m->write_page_length = page[1];
|
||||
m->write_page_valid = 1;
|
||||
} else
|
||||
m->write_page_valid = 0;
|
||||
mmc_read_disc_info(d);
|
||||
|
||||
/* ts A70212 : try to setup d->media_capacity_remaining */
|
||||
if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
|
||||
d->current_profile == 0x12)
|
||||
d->current_profile == 0x12 || d->current_profile == 0x43)
|
||||
d->read_format_capacities(d, -1);
|
||||
else if (d->status == BURN_DISC_BLANK ||
|
||||
(d->current_is_cd_profile && d->status == BURN_DISC_APPENDABLE)) {
|
||||
|
@ -47,7 +47,14 @@ char *burn_strndup(char *s, int n)
|
||||
|
||||
void burn_version(int *major, int *minor, int *micro)
|
||||
{
|
||||
/* ts A80408 : switched from configure.ac versioning to libburn.h versioning */
|
||||
#ifdef burn_header_version_major
|
||||
*major = burn_header_version_major;
|
||||
*minor = burn_header_version_minor;
|
||||
*micro = burn_header_version_micro;
|
||||
#else
|
||||
*major = BURN_MAJOR_VERSION;
|
||||
*minor = BURN_MINOR_VERSION;
|
||||
*micro = BURN_MICRO_VERSION;
|
||||
#endif
|
||||
}
|
||||
|
108
libburn/write.c
108
libburn/write.c
@ -43,6 +43,7 @@
|
||||
#include "write.h"
|
||||
#include "options.h"
|
||||
#include "structure.h"
|
||||
#include "source.h"
|
||||
|
||||
#include "libdax_msgs.h"
|
||||
extern struct libdax_msgs *libdax_messenger;
|
||||
@ -836,6 +837,8 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s,
|
||||
/* ts A61103 */
|
||||
ret = 1;
|
||||
ex:;
|
||||
if (d->cancel)
|
||||
burn_source_cancel(t->source);
|
||||
if (o->write_type == BURN_WRITE_TAO) {
|
||||
|
||||
/* ts A71002 */
|
||||
@ -964,8 +967,9 @@ int burn_precheck_write(struct burn_write_opts *o, struct burn_disc *disc,
|
||||
if (d->status == BURN_DISC_UNSUITABLE)
|
||||
goto unsuitable_profile;
|
||||
if (d->drive_role == 2 ||
|
||||
d->current_profile == 0x1a || d->current_profile == 0x12) {
|
||||
/* DVD+RW , DVD-RAM , emulated drive on stdio file */
|
||||
d->current_profile == 0x1a || d->current_profile == 0x12 ||
|
||||
d->current_profile == 0x43) {
|
||||
/* DVD+RW , DVD-RAM , BD-RE, emulated drive on stdio file */
|
||||
if (o->start_byte >= 0 && (o->start_byte % 2048))
|
||||
strcat(reasons,
|
||||
"write start address not properly aligned to 2048, ");
|
||||
@ -1273,6 +1277,8 @@ int burn_dvd_write_track(struct burn_write_opts *o,
|
||||
}
|
||||
ret = 1;
|
||||
ex:;
|
||||
if (d->cancel)
|
||||
burn_source_cancel(t->source);
|
||||
if (!is_flushed)
|
||||
d->sync_cache(d); /* burn_write_flush() was not called */
|
||||
return ret;
|
||||
@ -1365,8 +1371,8 @@ int burn_dvd_write_session(struct burn_write_opts *o,
|
||||
ret = burn_disc_close_session_dvd_minus_r(o, s);
|
||||
if (ret <= 0)
|
||||
return 0;
|
||||
} else if (d->current_profile == 0x12) {
|
||||
/* DVD-RAM */
|
||||
} else if (d->current_profile == 0x12 || d->current_profile == 0x43) {
|
||||
/* DVD-RAM , BD-RE */
|
||||
/* ??? any finalization needed ? */;
|
||||
} else if (d->current_profile == 0x13) {
|
||||
/* DVD-RW restricted overwrite */
|
||||
@ -1517,8 +1523,9 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
|
||||
|
||||
d->needs_close_session = 0;
|
||||
|
||||
if (d->current_profile == 0x1a || d->current_profile == 0x12) {
|
||||
/* DVD+RW , DVD-RAM */
|
||||
if (d->current_profile == 0x1a || d->current_profile == 0x12 ||
|
||||
d->current_profile == 0x43) {
|
||||
/* DVD+RW , DVD-RAM , BD-RE */
|
||||
ret = 1;
|
||||
if (d->current_profile == 0x1a)
|
||||
ret = burn_disc_setup_dvd_plus_rw(o, disc);
|
||||
@ -1693,7 +1700,11 @@ int burn_stdio_read_source(struct burn_source *source, char *buf, int bufsize,
|
||||
int count= 0, todo;
|
||||
|
||||
for(todo = bufsize; todo > 0; todo -= count) {
|
||||
count = source->read(source,
|
||||
if(source->read!=NULL)
|
||||
count = source->read(source,
|
||||
(unsigned char *) (buf + (bufsize - todo)), todo);
|
||||
else
|
||||
count = source->read_xt(source,
|
||||
(unsigned char *) (buf + (bufsize - todo)), todo);
|
||||
if (count <= 0)
|
||||
break;
|
||||
@ -1718,16 +1729,6 @@ int burn_stdio_write(int fd, char *buf, int count, struct burn_drive *d,
|
||||
}
|
||||
|
||||
|
||||
/* ts A70911
|
||||
If defined this makes stdio run on top of sector_data() rather than
|
||||
own stdio read and write functions. The MMC function pointers d->write()
|
||||
and d->sync_cache() get replaced by stdio substitutes.
|
||||
*/
|
||||
#define Libburn_stdio_track_by_sector_datA 1
|
||||
|
||||
|
||||
#ifdef Libburn_stdio_track_by_sector_datA
|
||||
|
||||
/* ts A70910 : to be used as burn_drive.write(), emulating mmc_write() */
|
||||
int burn_stdio_mmc_write(struct burn_drive *d, int start, struct buffer *buf)
|
||||
{
|
||||
@ -1849,9 +1850,6 @@ int burn_stdio_slowdown(struct burn_drive *d, struct timeval *prev_time,
|
||||
}
|
||||
|
||||
|
||||
#endif /* Libburn_stdio_track_by_sector_datA */
|
||||
|
||||
|
||||
/* ts A70904 */
|
||||
int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
||||
int tnum, int flag)
|
||||
@ -1860,14 +1858,9 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
||||
struct burn_track *t = s->track[tnum];
|
||||
struct burn_drive *d = o->drive;
|
||||
char buf[16*2048];
|
||||
#ifdef Libburn_stdio_track_by_sector_datA
|
||||
int i, prev_sync_sector = 0;
|
||||
struct buffer *out = d->buffer;
|
||||
struct timeval prev_time;
|
||||
#else
|
||||
int eof_seen = 0;
|
||||
off_t t_size, w_count;
|
||||
#endif
|
||||
|
||||
bufsize = sizeof(buf);
|
||||
fd = d->stdio_fd;
|
||||
@ -1876,8 +1869,6 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
||||
burn_disc_init_track_status(o, s, tnum, sectors);
|
||||
open_ended = burn_track_is_open_ended(t);
|
||||
|
||||
#ifdef Libburn_stdio_track_by_sector_datA
|
||||
|
||||
/* attach stdio emulators for mmc_*() functions */
|
||||
if (o->simulate)
|
||||
d->write = burn_stdio_mmc_dummy_write;
|
||||
@ -1889,7 +1880,7 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
||||
for (i = 0; open_ended || i < sectors; i++) {
|
||||
/* transact a (CD sized) sector */
|
||||
if (!sector_data(o, t, 0))
|
||||
return 0;
|
||||
{ret= 0; goto ex;}
|
||||
if (open_ended) {
|
||||
d->progress.sectors = sectors = d->progress.sector;
|
||||
if (burn_track_is_data_done(t))
|
||||
@ -1912,60 +1903,11 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
||||
out->bytes = o->obs;
|
||||
}
|
||||
ret = burn_write_flush(o, t);
|
||||
|
||||
#else /* Libburn_stdio_track_by_sector_datA */
|
||||
|
||||
t_size = t->source->get_size(t->source);
|
||||
|
||||
/* >>> write t->offset zeros */;
|
||||
|
||||
for(w_count = 0; w_count < t_size || open_ended; w_count += ret) {
|
||||
|
||||
|
||||
if (t_size - w_count < bufsize && ! open_ended)
|
||||
|
||||
/* >>> what about final sector padding ? */
|
||||
|
||||
bufsize = t_size - w_count;
|
||||
if (eof_seen)
|
||||
ret = 0;
|
||||
else
|
||||
ret = burn_stdio_read_source(t->source, buf,
|
||||
bufsize, o, 0);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (ret == 0 && open_ended)
|
||||
break;
|
||||
if (ret < bufsize && !open_ended) {
|
||||
memset(buf + ret, 0, bufsize - ret);
|
||||
eof_seen = 1;
|
||||
ret = bufsize;
|
||||
}
|
||||
t->sourcecount += ret;
|
||||
if (!o->simulate)
|
||||
ret = burn_stdio_write(fd, buf, ret, d, 0);
|
||||
if (ret <= 0)
|
||||
return ret;
|
||||
|
||||
d->progress.sector = (w_count + (off_t) ret) / (off_t) 2048;
|
||||
if (open_ended)
|
||||
d->progress.sectors = d->progress.sector;
|
||||
t->writecount += ret;
|
||||
t->written_sectors = t->writecount / 2048;
|
||||
|
||||
/* Flush to physical device after each full MB */
|
||||
if (d->progress.sector - prev_sync_sector >= 512) {
|
||||
prev_sync_sector = d->progress.sector;
|
||||
if (!o->simulate)
|
||||
burn_stdio_sync_cache(fd, d, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* >>> write t->tail zeros */;
|
||||
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
ret= 1;
|
||||
ex:;
|
||||
if (d->cancel)
|
||||
burn_source_cancel(t->source);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@ -2251,6 +2193,8 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address,
|
||||
alignment = 32 * 1024;
|
||||
if (d->current_profile == 0x1a) /* DVD+RW */
|
||||
alignment = 2 * 1024;
|
||||
if (d->current_profile == 0x43) /* BD-RE */
|
||||
alignment = 2 * 1024;
|
||||
if (alignment == 0) {
|
||||
sprintf(msg, "Write start address not supported");
|
||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||
|
@ -9,7 +9,7 @@
|
||||
libburner is a minimal demo application for the library libburn as provided
|
||||
on http://libburnia-project.org . It can list the available devices, can
|
||||
blank a CD-RW or DVD-RW, can format a DVD-RW, can burn to CD-R, CD-RW, DVD-R,
|
||||
DVD+R, DVD+RW, DVD-RAM or DVD-RW. Not supported yet: double layer media.
|
||||
DVD+R, DVD+R/DL, DVD+RW, DVD-RAM or DVD-RW. Not supported yet: DVD-R/DL, BD.
|
||||
|
||||
It's main purpose, nevertheless, is to show you how to use libburn and also
|
||||
to serve the libburnia team as reference application. libburner.c does indeed
|
||||
@ -29,7 +29,7 @@
|
||||
libburner_blank_disc()
|
||||
or you can format a DVD-RW to profile "Restricted Overwrite" (needed once)
|
||||
libburner_format_row()
|
||||
With the aquired drive you can burn to CD-R, CD-RW, DVD+RW, DVD-RAM, DVD-RW
|
||||
With the aquired drive you can burn to CD or DVD
|
||||
libburner_payload()
|
||||
When everything is done, main() releases the drive and shuts down libburn:
|
||||
burn_drive_release();
|
||||
@ -443,7 +443,8 @@ int libburner_payload(struct burn_drive *drive,
|
||||
/* Use the fifo object as data source for the track */
|
||||
if (burn_track_set_source(track, fifo_src[trackno])
|
||||
!= BURN_SOURCE_OK) {
|
||||
printf("FATAL: Cannot attach source object to track object\n");
|
||||
fprintf(stderr,
|
||||
"FATAL: Cannot attach source object to track object\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -606,7 +606,8 @@ int telltoc_read_and_print(struct burn_drive *drive,
|
||||
if (start_sector == -1)
|
||||
start_sector = last_track_start;
|
||||
if (sector_count == -1) {
|
||||
sector_count = last_track_size;
|
||||
sector_count = last_track_start + last_track_size
|
||||
- start_sector;
|
||||
if (media_is_cd_profile) /* In case it is a TAO track */
|
||||
final_cd_try = 0; /* allow it (-1 is denial) */
|
||||
}
|
||||
|
Reference in New Issue
Block a user