Compare commits

...

22 Commits

Author SHA1 Message Date
a6fc6b43f9 Documented changes and release timestamp 2008-07-16 08:41:52 +00:00
0c6fde1ee8 Updated cdrskin tarball generator 2008-07-16 08:40:32 +00:00
73503c9bb1 Made number transition to 0.5.0 and activated development documentation 2008-07-16 08:27:44 +00:00
Mario Danic
775b377b21 Branched for 0.5.0 release 2008-07-15 19:05:58 +00:00
76e85e600c Followed hint of Giulio Orsero to recognize disk by /proc/ide/hdX/media 2008-07-14 16:44:59 +00:00
9d48bb6892 New API call burn_fifo_peek_data() 2008-07-14 11:38:22 +00:00
38f0399fff Did LT_CURRENT++, LT_AGE++ because of new API call 2008-07-14 11:31:16 +00:00
39198ff8cb Making visible the new NOTE and HINT about busy alleged hard disks 2008-07-14 11:30:09 +00:00
67ca4a251a Trying to avoid SORRY messages when hitting busy hard disk /dev/hdX 2008-07-14 11:28:55 +00:00
b1c6953b61 With auto device family: scd is now fallback if sr does not exist 2008-07-02 09:39:02 +00:00
eb95d89272 Inserted @since tags for all functions older than 0.2.0 2008-06-14 14:06:38 +00:00
548051e53f Updated release history 2008-06-14 14:05:47 +00:00
a72b38c116 Documented changes and release timestamp 2008-05-17 12:09:02 +00:00
a67aa2ccee Updated cdrskin tarball generator 2008-05-17 12:06:38 +00:00
2fb5ea8def Made number transition to 0.4.9 2008-05-17 12:05:36 +00:00
55061cb7cf Made inability to get format list a reason to abort the program 2008-05-14 16:52:35 +00:00
4b3ec06cc4 Added format types 0x30 and 0x32 to list in API comments 2008-05-14 16:51:40 +00:00
ad6bd91b21 Bug fix: random access addressing for DVD-RAM and BD-RE did not work 2008-05-14 16:50:27 +00:00
0e2aaa2d59 Documented changes and release timestamp 2008-05-10 13:43:12 +00:00
4244a3c141 Updated cdrskin tarball generator 2008-05-10 13:41:58 +00:00
e4d30e4762 Made number transition to 0.4.7 2008-05-10 13:40:55 +00:00
2856e9c984 Changed blank examples to blank=as_needed 2008-05-09 19:42:49 +00:00
20 changed files with 980 additions and 217 deletions

View File

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

27
README
View File

@@ -39,11 +39,15 @@ into its toplevel directory (here: "libburn") and execute
./configure --prefix=/usr ./configure --prefix=/usr
make make
To make the libraries accessible for running resp. developing applications To make libburn accessible for running resp. application development,
and to install the cdrecord compatibility binary cdrskin, do: and to install the cdrecord compatibility binary cdrskin, do:
make install make install
Above procedure installs cdrskin depending on libburn.so.4 .
For a standalone cdrskin binary, see cdrskin/README.
An important part of the project, libisofs, is hosted in a bzr repository at An important part of the project, libisofs, is hosted in a bzr repository at
launchpad.net : launchpad.net :
bzr branch lp:libisofs bzr branch lp:libisofs
@@ -276,6 +280,27 @@ Project history as far as known to me:
pieces. A primitive single session emulation of cdrcord and mkisofs is pieces. A primitive single session emulation of cdrcord and mkisofs is
provided. provided.
- 10th May 2008 libburn-0.4.6 supports formatting and writing of BD-RE,
full nominal speed for DVD-RAM and BD-RE. cdrskin has a unified blank
type with automatic media state recognition.
- 17th May 2008 an old bug with DVD-RAM and now with BD-RE is fixed by
libburn-0.4.8 to allow libisoburn emulation of multisession on those media.
- 19th May 2008 libisoburn-0.1.6 brings better table-of-content emulation
on overwriteble media and disk files.
- 1st Jun 2008 libisofs-0.6.6 fixes some problems around device files.
- 3rd Jun 2008 libisoburn-0.1.8 fixes a bug with overwriteable media.
- 23rd Jun 2008 libisoburn-0.2.0 introduces extraction of files from
ISO images.
- 16th Jul 2008 libburn-0.5.0 handles systems with no /dev/sr* but only
/dev/scd*.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify

View File

@@ -4,7 +4,7 @@
cdrskin. By Thomas Schmitt <scdbackup@gmx.net> cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via: Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/cdrskin_eng.html http://scdbackup.sourceforge.net/cdrskin_eng.html
http://scdbackup.sourceforge.net/cdrskin-0.4.5.tar.gz http://scdbackup.sourceforge.net/cdrskin-0.5.0.pl00.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2. Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@@ -20,10 +20,10 @@ By using this software you agree to the disclaimer at the end of this text
Compilation, First Glimpse, Installation Compilation, First Glimpse, Installation
Obtain cdrskin-0.4.5.tar.gz, take it to a directory of your choice and do: Obtain cdrskin-0.5.0.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf cdrskin-0.4.5.tar.gz tar xzf cdrskin-0.5.0.pl00.tar.gz
cd cdrskin-0.4.5 cd cdrskin-0.5.0
Within that directory execute: Within that directory execute:
@@ -53,9 +53,9 @@ try whether command
ldconfig ldconfig
makes it accessible. With the statically linked binary this should not matter. 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 With that static binary you may as well do the few necessary actions manually.
already installed by a previous version, or by "make install" in the course If cdrskin was already installed by a previous version, or by "make install"
of this installation, then find out where: in the course of this installation, then find out where:
which cdrskin 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.: E.g.:
@@ -139,8 +139,8 @@ Obtain some info about the drive
Obtain some info about the drive and the inserted media Obtain some info about the drive and the inserted media
cdrskin dev=0,1,0 -atip -v cdrskin dev=0,1,0 -atip -v
Make used CD-RW or used unformatted DVD-RW writeable again Prepare CD-RW or DVD-RW for re-use, DVD-RAM or BD-RE for first use
cdrskin -v dev=0,1,0 blank=fast -eject cdrskin -v dev=/dev/sg1 blank=as_needed -eject
Format DVD-RW to avoid need for blanking before re-use Format DVD-RW to avoid need for blanking before re-use
cdrskin -v dev=0,1,0 blank=format_overwrite cdrskin -v dev=0,1,0 blank=format_overwrite
@@ -154,16 +154,16 @@ Burn image file my_image.iso to media
Write multi-session to the same CD , DVD-R[W] or DVD+R[/DL] 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 1.iso
cdrskin dev=/dev/hdc padsize=300k -multi -tao 2.iso cdrskin dev=/dev/hdc padsize=300k -multi 2.iso
cdrskin dev=/dev/hdc padsize=300k -multi -tao 3.iso cdrskin dev=/dev/hdc padsize=300k -multi 3.iso
cdrskin dev=/dev/hdc padsize=300k -tao 4.iso cdrskin dev=/dev/hdc padsize=300k 4.iso
Get multi-session info for option -C of program mkisofs: Get multi-session info for option -C of program mkisofs:
c_values=$(cdrskin dev=/dev/hdc -msinfo 2>/dev/null) c_values=$(cdrskin dev=/dev/hdc -msinfo 2>/dev/null)
mkisofs ... -C "$c_values" ... mkisofs ... -C "$c_values" ...
Burn a compressed afio archive to media on-the-fly Burn a compressed afio archive to media on-the-fly
find . | afio -oZ - | cdrskin -v dev=0,1,0 fs=32m speed=8 -tao \ find . | afio -oZ - | cdrskin -v dev=0,1,0 fs=32m speed=8 \
driveropts=burnfree padsize=300k - driveropts=burnfree padsize=300k -
Burn 6 audio tracks from files with different formats to CD (not to any DVD). Burn 6 audio tracks from files with different formats to CD (not to any DVD).
@@ -186,8 +186,6 @@ See output of command
cdrskin --list_ignored_options cdrskin --list_ignored_options
If you have use cases for them, please report your wishes and expectations. If you have use cases for them, please report your wishes and expectations.
DVD support is restricted to single layer DVD for now. Double layer media
are implemented but untested.
On the other hand, the capability of multi-session and of writing streams On the other hand, the capability of multi-session and of writing streams
of unpredicted lenght surpass the current DVD capabilities of cdrecord. of unpredicted lenght surpass the current DVD capabilities of cdrecord.
@@ -262,17 +260,27 @@ I myself am not into audio. So libburn-hackers@pykix.org might be the
best address for suggestions, requests and bug reports. best address for suggestions, requests and bug reports.
DVD+RW and DVD-RAM DVD+RW , DVD-RAM , BD-RE
DVD+RW and DVD-RAM media get treated as blank media regardless wether they These random access media get treated as blank media regardless wether they
hold data or not. Options -audio and -multi are not allowed. Only one track hold data or not. Options -audio and -multi are not allowed. Only one track
is allowed. -toc does not return information about the media content. is allowed. -toc does not return information about the media content.
Speed is counted in DVD units (i.e. 1x = 1,385,000 bytes/second). Currently Speed is counted in DVD units (i.e. 1x = 1,385,000 bytes/second) or BD units
there is no difference between -sao and -tao. If ever, then -tao will be the (1x = 4,495,625 bytes/second). Currently there is no difference between -sao
mode which preserves the current behavior. and -tao. If ever, then -tao will be the mode which preserves the current
behavior.
BD-RE media need formatting before first use. cdrskin option "blank=as_needed"
recognizes unformatted BD-RE and applies a lengthy formatting run.
During write operations DVD-RAM and BD-RE automatically apply defect
management. This usually slows them down to half nominal speed. If drive
and media produce flawless results anyway, then one can try to reach full
nominal speed by option "stream_recording=on".
In this case bad blocks are not detected during write and not even previously
known bad blocks are avoided. So you have to make your own readability tests
and go back to half speed as soon as the first read errors show up.
Program growisofs can append to an ISO filesystem on DVD+RW by additionally
manipulating the first session. Meanwhile cdrskin can do the same.
Option --grow_overwriteable_iso allows -multi (although unneeded), enables Option --grow_overwriteable_iso allows -multi (although unneeded), enables
-msinfo and -toc, and makes blank=fast an invalidator for ISO filesystems -msinfo and -toc, and makes blank=fast an invalidator for ISO filesystems
on overwriteable media. on overwriteable media.
@@ -341,12 +349,12 @@ Incremental Streaming afterwards. So blank=fast will do full blanking.
blank=deformat_sequential_quickest is faster but might yield DAO-only media. blank=deformat_sequential_quickest is faster but might yield DAO-only media.
DVD+R and DVD+R/DL DVD+R and DVD+R DL
From the view of cdrskin they behave much like DVD-R. Each track gets wrapped From the view of cdrskin they behave much like DVD-R. Each track gets wrapped
into an own session, though. into an own session, though.
DVD+R/DL appear as extra large DVD+R. cdrskin does not allow to set the address 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 of the layer break where a reading drive might show some delay while switching
between both media layers. between both media layers.
@@ -397,9 +405,9 @@ Don't blame me or other authors of libburn if anything goes wrong.
Actually, in case of severe trouble, nearly always the drive and the media Actually, in case of severe trouble, nearly always the drive and the media
are the cause. Any mistake of the burn program is supposed to be caught are the cause. Any mistake of the burn program is supposed to be caught
by the drive's firmware and to lead to mere misburns. by the drive's firmware and to lead to mere misburns.
The worst mishaps which hit the author implied the need to reboot the The worst mishaps which hit the author imposed the need to reboot the
system because of drives gnawing endlessly on ill media. Permanent hardware system because of drives gnawing endlessly on ill media. Permanent hardware
damage did not occur in 1.5 years of development. damage did not occur in 2.5 years of development. But one never knows ...
------------------------------------------------------------------------------ ------------------------------------------------------------------------------

View File

@@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
# My changes are in $changes , mainly in $changes/cdrskin # My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-release" changes="./libburn-release"
skin_release="0.4.4" skin_release="0.5.0"
patch_level=".pl00" patch_level=".pl00"
skin_rev="$skin_release""$patch_level" skin_rev="$skin_release""$patch_level"
@@ -104,9 +104,9 @@ cdrskin_target="$target"/cdrskin
libburn_target="$target"/libburn libburn_target="$target"/libburn
# Create version timestamp # Create version timestamp
timestamp="$(date -u '+%Y.%m.%d.%H%M%S')" # timestamp="$(date -u '+%Y.%m.%d.%H%M%S')"
echo "$timestamp" # echo "$timestamp"
echo '#define Cdrskin_timestamP "'"$timestamp"'"' >"$cdrskin_dir"/cdrskin_timestamp.h # echo '#define Cdrskin_timestamP "'"$timestamp"'"' >"$cdrskin_dir"/cdrskin_timestamp.h
# Add the cdrskin files # Add the cdrskin files
if test -e "$cdrskin_target" if test -e "$cdrskin_target"

View File

@@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
# My changes are in $changes , mainly in $changes/cdrskin # My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-develop" changes="./libburn-develop"
skin_release="0.4.5" skin_release="0.5.1"
patch_level="" patch_level=""
skin_rev="$skin_release""$patch_level" skin_rev="$skin_release""$patch_level"
@@ -239,7 +239,7 @@ rm -rf "$target"
./"$bintarget_dynamic" -version ./"$bintarget_dynamic" -version
./"$bintarget_static" -version ./"$bintarget_static" -version
ls -l "$cdrskin_tarball" ls -l "$cdrskin_tarball"
ls -l "$bintarget_dynamic"* ls -l "$bintarget_dynamic"
ls -l "$bintarget_static" ls -l "$bintarget_static"
ls -l $(basename "$man_page_html") ls -l $(basename "$man_page_html")

View File

@@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "May 06, 2008" .TH CDRSKIN 1 "May 17, 2008"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@@ -1201,11 +1201,9 @@ cdrskin dev=ATA:1,0,0 -v -atip
.br .br
cdrskin dev=/dev/hdc -toc cdrskin dev=/dev/hdc -toc
.SS .SS
.B Make used CD-RW or used unformatted DVD-RW writable again: .B Prepare CD-RW or DVD-RW for re-use, DVD-RAM or BD-RE for first use:
.br .br
cdrskin -v dev=/dev/sg1 blank=fast -eject cdrskin -v dev=/dev/sg1 blank=as_needed -eject
.br
cdrskin -v dev=/dev/dvd blank=all -eject
.SS .SS
.B Format DVD-RW to avoid need for blanking before re-use: .B Format DVD-RW to avoid need for blanking before re-use:
.br .br
@@ -1219,7 +1217,7 @@ cdrskin -v dev=/dev/sr0 blank=deformat_sequential
.br .br
cdrskin -v dev=/dev/hdc speed=12 fs=8m \\ cdrskin -v dev=/dev/hdc speed=12 fs=8m \\
.br .br
-sao -eject padsize=300k my_image.iso blank=as_needed -eject padsize=300k my_image.iso
.SS .SS
.B Write compressed afio archive on-the-fly (not possible with minimally blanked DVD-RW): .B Write compressed afio archive on-the-fly (not possible with minimally blanked DVD-RW):
.br .br
@@ -1227,17 +1225,17 @@ find . | afio -oZ - | \\
.br .br
cdrskin -v dev=0,1,0 fs=32m speed=8 \\ cdrskin -v dev=0,1,0 fs=32m speed=8 \\
.br .br
-tao padsize=300k - blank=as_needed padsize=300k -
.SS .SS
.B Write multi-session to the same CD, DVD-R[W] or DVD+R[/DL]: .B Write multi-session to the same CD, DVD-R[W] or DVD+R[/DL]:
.br .br
cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 1.iso cdrskin dev=/dev/hdc -v padsize=300k -multi 1.iso
.br .br
cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 2.iso cdrskin dev=/dev/hdc -v padsize=300k -multi 2.iso
.br .br
cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 3.iso cdrskin dev=/dev/hdc -v padsize=300k -multi 3.iso
.br .br
cdrskin dev=/dev/hdc -v padsize=300k -tao 4.iso cdrskin dev=/dev/hdc -v padsize=300k 4.iso
.SS .SS
.B Get multi-session info for option -C of program mkisofs: .B Get multi-session info for option -C of program mkisofs:
.br .br
@@ -1245,9 +1243,9 @@ c_values=$(cdrskin dev=/dev/hdc -msinfo 2>/dev/null)
.br .br
mkisofs ... -C "$c_values" ... mkisofs ... -C "$c_values" ...
.SS .SS
.B Inquire free space on media for a -tao -multi run: .B Inquire free space on media for a -multi run:
.br .br
x=$(cdrskin dev=/dev/sr0 -tao -multi \\ x=$(cdrskin dev=/dev/sr0 -multi \\
.br .br
--tell_media_space 2>/dev/null) --tell_media_space 2>/dev/null)
.br .br

View File

@@ -7,7 +7,7 @@ A cdrecord compatible command line interface for libburn.
This project is neither directed against original cdrecord nor does it exploit This project is neither directed against original cdrecord nor does it exploit
any source code of said program. It rather tries to be an alternative method any source code of said program. It rather tries to be an alternative method
to burn CD or DVD, which is not based on the same code as cdrecord. to burn CD, DVD, or BD, which is not based on the same code as cdrecord.
See also : http://scdbackup.sourceforge.net/cdrskin_eng.html See also : http://scdbackup.sourceforge.net/cdrskin_eng.html
Interested users of cdrecord are encouraged to contribute further option Interested users of cdrecord are encouraged to contribute further option
@@ -88,7 +88,7 @@ or
/** The official program version */ /** The official program version */
#ifndef Cdrskin_prog_versioN #ifndef Cdrskin_prog_versioN
#define Cdrskin_prog_versioN "0.4.5" #define Cdrskin_prog_versioN "0.5.0"
#endif #endif
/** The official libburn interface revision to use. /** The official libburn interface revision to use.
@@ -98,10 +98,10 @@ or
#define Cdrskin_libburn_majoR 0 #define Cdrskin_libburn_majoR 0
#endif #endif
#ifndef Cdrskin_libburn_minoR #ifndef Cdrskin_libburn_minoR
#define Cdrskin_libburn_minoR 4 #define Cdrskin_libburn_minoR 5
#endif #endif
#ifndef Cdrskin_libburn_micrO #ifndef Cdrskin_libburn_micrO
#define Cdrskin_libburn_micrO 4 #define Cdrskin_libburn_micrO 0
#endif #endif
@@ -135,46 +135,44 @@ or
#endif /* Cdrskin_libburn_cvs_A60220_tS */ #endif /* Cdrskin_libburn_cvs_A60220_tS */
#ifdef Cdrskin_libburn_0_4_4 #ifdef Cdrskin_libburn_0_5_0
#define Cdrskin_libburn_versioN "0.4.4" #define Cdrskin_libburn_versioN "0.5.0"
#define Cdrskin_libburn_from_pykix_svN 1 #define Cdrskin_libburn_from_pykix_svN 1
#endif /* Cdrskin_libburn_0_4_2 */ #endif /* Cdrskin_libburn_0_5_0 */
#ifdef Cdrskin_libburn_0_4_5 #ifdef Cdrskin_libburn_0_5_1
#define Cdrskin_libburn_versioN "0.4.5" #define Cdrskin_libburn_versioN "0.5.1"
#define Cdrskin_libburn_from_pykix_svN 1 #define Cdrskin_libburn_from_pykix_svN 1
/* Place novelty switch macros here. /* Place novelty switch macros here.
Move them down to Cdrskin_libburn_from_pykix_svN on version leap Move them down to Cdrskin_libburn_from_pykix_svN on version leap
*/ */
#define Cdrskin_libburn_has_stream_recordinG 1 /* there are no libburn novelties in 0.5.1 yet */
/* there are novelties in 0.4.5 yet */ #endif /* Cdrskin_libburn_0_5_1 */
#endif /* Cdrskin_libburn_0_4_5 */
#ifndef Cdrskin_libburn_versioN #ifndef Cdrskin_libburn_versioN
#define Cdrskin_libburn_0_4_4 #define Cdrskin_libburn_0_5_0
#define Cdrskin_libburn_versioN "0.4.4" #define Cdrskin_libburn_versioN "0.5.0"
#define Cdrskin_libburn_from_pykix_svN 1 #define Cdrskin_libburn_from_pykix_svN 1
#endif #endif
#ifdef Cdrskin_libburn_0_4_4 #ifdef Cdrskin_libburn_0_5_0
#undef Cdrskin_libburn_majoR #undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR #undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO #undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0 #define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 4 #define Cdrskin_libburn_minoR 5
#define Cdrskin_libburn_micrO 4 #define Cdrskin_libburn_micrO 0
#endif #endif
#ifdef Cdrskin_libburn_0_4_5 #ifdef Cdrskin_libburn_0_5_1
#undef Cdrskin_libburn_majoR #undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR #undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO #undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0 #define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 4 #define Cdrskin_libburn_minoR 5
#define Cdrskin_libburn_micrO 5 #define Cdrskin_libburn_micrO 1
#endif #endif
@@ -242,10 +240,20 @@ or
#define Cdrskin_libburn_has_drive_equals_adR 1 #define Cdrskin_libburn_has_drive_equals_adR 1
/* 0.4.2 */ /* 0.4.2 */
/* no novel features but rather organizational changes */ /* no novel libburn features but rather organizational changes */
/* 0.4.4 */ /* 0.4.4 */
/* support for DVD+R/DL media is now official, BD-RE is experimental */ /* novel libburn features are transparent to cdrskin */
/* 0.4.6 */
#define Cdrskin_libburn_has_stream_recordinG 1
/* 0.4.8 */
/* Bug fix release for write_start_address=... on DVD-RAM and BD-RE */
/* 0.5.0 */
/* novel libburn features are transparent to cdrskin */
#ifdef Cdrskin_new_api_tesT #ifdef Cdrskin_new_api_tesT
@@ -4934,7 +4942,7 @@ int Cdrskin_list_formats(struct CdrskiN *skin, int flag)
&num_formats); &num_formats);
if(ret <= 0) { if(ret <= 0) {
fprintf(stderr, "cdrskin: SORRY: Cannot obtain format list info\n"); fprintf(stderr, "cdrskin: SORRY: Cannot obtain format list info\n");
ret= 2; goto ex; ret= 0; goto ex;
} }
ret= burn_disc_get_profile(drive, &profile_no, profile_name); ret= burn_disc_get_profile(drive, &profile_no, profile_name);
printf("Media current: "); printf("Media current: ");
@@ -4982,7 +4990,7 @@ ex:;
fprintf(stderr, fprintf(stderr,
"cdrskin: SORRY: libburn is too old to obtain format list info\n"); "cdrskin: SORRY: libburn is too old to obtain format list info\n");
return(2); return(0);
#endif /* Cdrskin_libburn_has_burn_disc_formaT */ #endif /* Cdrskin_libburn_has_burn_disc_formaT */
} }
@@ -5131,7 +5139,7 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
do_format= 4; do_format= 4;
else else
do_format= 1; do_format= 1;
} else if(do_format==6 || do_format==7) { /* format_if_needed , if_needed */ } else if(do_format==6 || do_format==7) { /* format_if_needed , as_needed */
/* Find out whether format is needed at all. /* Find out whether format is needed at all.
Eventuelly set up a suitable formatting run Eventuelly set up a suitable formatting run
*/ */
@@ -8024,11 +8032,15 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin,
printf("cdrskin: scanning for devices ...\n"); printf("cdrskin: scanning for devices ...\n");
fflush(stdout); fflush(stdout);
#ifdef Cdrskin_libburn_has_burn_msgS
if(skin->preskin->verbosity<Cdrskin_verbose_debuG)
burn_msgs_set_severities("NEVER", "NOTE", "cdrskin: ");
#endif
/* In cdrskin there is not much sense in queueing library messages. /* In cdrskin there is not much sense in queueing library messages.
It is done here only for testing it from time to time */ It is done here only for testing it from time to time */
Cdrpreskin_queue_msgs(skin->preskin,1); Cdrpreskin_queue_msgs(skin->preskin,1);
#ifndef Cdrskin_oldfashioned_api_usE #ifndef Cdrskin_oldfashioned_api_usE
if(stdio_drive) { if(stdio_drive) {
ret= burn_drive_scan_and_grab(&(skin->drives),skin->preskin->device_adr,0); ret= burn_drive_scan_and_grab(&(skin->drives),skin->preskin->device_adr,0);
@@ -8049,6 +8061,11 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin,
} }
} }
#ifdef Cdrskin_libburn_has_burn_msgS
burn_msgs_set_severities(skin->preskin->queue_severity,
skin->preskin->print_severity, "cdrskin: ");
#endif
/* This prints the eventual queued messages */ /* This prints the eventual queued messages */
Cdrpreskin_queue_msgs(skin->preskin,0); Cdrpreskin_queue_msgs(skin->preskin,0);

View File

@@ -2,7 +2,7 @@
<HEAD> <HEAD>
<META NAME="description" CONTENT="cdrskin, a limited cdrecord compatibility wrapper for libburn"> <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, DVD+R/DL, DVD-RAM, 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, BD-RE, cdrecord, compatible, scdbackup">
<META NAME="robots" CONTENT="follow"> <META NAME="robots" CONTENT="follow">
<TITLE>cdrskin homepage english</TITLE> <TITLE>cdrskin homepage english</TITLE>
</HEAD> </HEAD>
@@ -17,15 +17,14 @@
</A> </A>
<P><H2> Homepage of </H2> <P><H2> Homepage of </H2>
<H1> cdrskin </H1> <H1> cdrskin </H1>
<!-- <FONT SIZE=+0><A HREF="cdrskin_ger.html">deutsch (german)</A></FONT> -->
<H2>Limited cdrecord compatibility wrapper for libburn</H2> <H2>Limited cdrecord compatibility wrapper for libburn</H2>
</CENTER> </CENTER>
<P> <P>
<H2>Purpose:</H2> <H2>Purpose:</H2>
Burns preformatted data to CD and DVD media:<BR> Burns preformatted data to CD, DVD, and BD media:<BR>
CD-R, DVD-R, DVD+R, DVD+R/DL, CD-RW, DVD-RW, DVD-RAM, DVD+RW CD-R, DVD-R, DVD+R, DVD+R/DL, CD-RW, DVD-RW, DVD-RAM, DVD+RW, BD-RE
</P> </P>
<P> <P>
@@ -35,10 +34,10 @@ CD-R, DVD-R, DVD+R, DVD+R/DL, CD-RW, DVD-RW, DVD-RAM, DVD+RW
<P> <P>
<H2>Hardware requirements:</H2> <H2>Hardware requirements:</H2>
A CD/DVD recorder suitable for A CD/DVD/BD recorder suitable for
<A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR> <A HREF="http://libburnia-project.org">http://libburnia-project.org</A> <BR>
(SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD (SCSI , ATA , USB , or SATA writers compliant to standard MMC-3 for CD
and to MMC-5 for DVD). and to MMC-5 for DVD or BD).
<BR> <BR>
</P> </P>
@@ -58,10 +57,10 @@ and to MMC-5 for DVD).
GPL software included:<BR> GPL software included:<BR>
</H2> </H2>
<DL> <DL>
<DT>libburn-0.4.4</DT> <DT>libburn-0.5.0</DT>
<DD>(founded by Derek Foreman and Ben Jansens, <DD>(founded by Derek Foreman and Ben Jansens,
furthered by team of libburnia-project.org)</DD> furthered since August 2006 by Thomas Schmitt from team of libburnia-project.org)</DD>
<DD>transfers data to CD and DVD</DD> <DD>transfers data to CD, DVD, BD-RE</DD>
</DL> </DL>
</P> </P>
@@ -86,10 +85,10 @@ Ports to other usable systems are appreciated. Reports are welcome.
<DL> <DL>
<DT>The most common options of cdrecord for data and audio on CD media <DT>The most common options of cdrecord for data and audio on CD media
are provided in a compatible way.<BR> are provided in a compatible way.<BR>
On single layer DVD media cdrskin is able to perform any recording job On all DVD media except DVD-R DL, cdrskin is able to perform any recording job
which is possible with cdrecord. which is possible with cdrecord.
Other than with cdrecord, options -multi and -tao are supported with Other than with cdrecord, option -multi is supported with many DVD types and
certain DVD types. write mode -tao works with anything but quickly blanked DVD-RW.
</DT> </DT>
<BR><BR> <BR><BR>
<DT>Get an overview of drives and their addresses</DT> <DT>Get an overview of drives and their addresses</DT>
@@ -107,9 +106,8 @@ as listed by option --devices.</DT>
<DD>$<KBD>&nbsp;cdrskin dev=ATA:1,0,0 -v -atip</KBD></DD> <DD>$<KBD>&nbsp;cdrskin dev=ATA:1,0,0 -v -atip</KBD></DD>
<DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -toc</KBD></DD> <DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -toc</KBD></DD>
<DT>Make used CD-RW or used unformatted DVD-RW writable again:</DT> <DT>Prepare CD-RW or DVD-RW for re-use, DVD-RAM or BD-RE for first use:</DT>
<DD>$<KBD>&nbsp;cdrskin -v dev=/dev/sg1 blank=fast -eject</KBD></DD> <DD>$<KBD>&nbsp;cdrskin -v dev=/dev/sg1 blank=as_needed -eject</KBD></DD>
<DD>$<KBD>&nbsp;cdrskin -v dev=/dev/dvd blank=all -eject</KBD></DD>
<DT>Format DVD-RW to avoid need for blanking before re-use:</DT> <DT>Format DVD-RW to avoid need for blanking before re-use:</DT>
<DD>$<KBD>&nbsp;cdrskin -v dev=/dev/sr0 blank=format_overwrite</KBD></DD> <DD>$<KBD>&nbsp;cdrskin -v dev=/dev/sr0 blank=format_overwrite</KBD></DD>
@@ -120,28 +118,28 @@ as listed by option --devices.</DT>
<DT>Write ISO-9660 filesystem image as only one to blank or formatted media: <DT>Write ISO-9660 filesystem image as only one to blank or formatted media:
</DT> </DT>
<DD>$<KBD>&nbsp;cdrskin -v dev=/dev/hdc speed=12 fs=8m \</KBD></DD> <DD>$<KBD>&nbsp;cdrskin -v dev=/dev/hdc speed=12 fs=8m \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-sao -eject padsize=300k my_image.iso</KBD></DD> <DD><KBD>&nbsp;&nbsp;blank=as_needed -eject padsize=300k my_image.iso</KBD></DD>
<DT>Write compressed afio archive on-the-fly:</DT> <DT>Write compressed afio archive on-the-fly:</DT>
<DD>$<KBD>&nbsp;find . | afio -oZ - | \</KBD></DD> <DD>$<KBD>&nbsp;find . | afio -oZ - | \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;cdrskin -v dev=0,1,0 fs=32m speed=8 \</KBD></DD> <DD><KBD>&nbsp;&nbsp;cdrskin -v dev=0,1,0 fs=32m speed=8 \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;-tao padsize=300k -</KBD></DD> <DD><KBD>&nbsp;&nbsp;blank=as_needed padsize=300k -</KBD></DD>
<DT>Write several sessions to the same CD, DVD-R[W] or DVD+R[/DL]:</DT> <DT>Write several sessions to the same CD, DVD-R[W] or DVD+R[/DL]:</DT>
<DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 1.iso</KBD> <DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -v padsize=300k -multi 1.iso</KBD>
</DD> </DD>
<DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 2.iso</KBD> <DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -v padsize=300k -multi 2.iso</KBD>
</DD> </DD>
<DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 3.iso</KBD> <DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -v padsize=300k -multi 3.iso</KBD>
</DD> </DD>
<DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -v padsize=300k -tao 4.iso</KBD></DD> <DD>$<KBD>&nbsp;cdrskin dev=/dev/hdc -v padsize=300k 4.iso</KBD></DD>
<DT>Get multi-session info for option -C of program mkisofs:</DT> <DT>Get multi-session info for option -C of program mkisofs:</DT>
<DD>$<KBD>&nbsp;c_values=$(cdrskin dev=/dev/sr0 -msinfo 2>/dev/null)</KBD></DD> <DD>$<KBD>&nbsp;c_values=$(cdrskin dev=/dev/sr0 -msinfo 2>/dev/null)</KBD></DD>
<DD>$<KBD>&nbsp;mkisofs ... -C "$c_values" ...</KBD></DD> <DD>$<KBD>&nbsp;mkisofs ... -C "$c_values" ...</KBD></DD>
<DT>Inquire free space on media for a -tao -multi run:</DT> <DT>Inquire free space on media for a -multi run:</DT>
<DD>$<KBD>&nbsp;x=$(cdrskin dev=/dev/sr0 -tao -multi \</KBD></DD> <DD>$<KBD>&nbsp;x=$(cdrskin dev=/dev/sr0 -multi \</KBD></DD>
<DD><KBD>&nbsp;&nbsp;--tell_media_space 2>/dev/null)</KBD></DD> <DD><KBD>&nbsp;&nbsp;--tell_media_space 2>/dev/null)</KBD></DD>
<DD>$<KBD>&nbsp;echo "Available: $x blocks of 2048 data bytes"</KBD></DD> <DD>$<KBD>&nbsp;echo "Available: $x blocks of 2048 data bytes"</KBD></DD>
@@ -176,8 +174,8 @@ Standalone ISO 9660 multi-session CD/DVD tool
</DD> </DD>
</DL> </DL>
Testers wanted who are willing to risk some double layer DVD-R media Testers wanted who are willing to risk some DVD-R DL media
or to do experiments on BD-RE. or to do experiments on BD-R media.
</P> </P>
@@ -188,8 +186,8 @@ or to do experiments on BD-RE.
<P> <P>
<DL> <DL>
<DT>Download as source code (see README):</DT> <DT>Download as source code (see README):</DT>
<DD><A HREF="cdrskin-0.4.4.pl00.tar.gz">cdrskin-0.4.4.pl00.tar.gz</A> <DD><A HREF="cdrskin-0.5.0.pl00.tar.gz">cdrskin-0.5.0.pl00.tar.gz</A>
(715 KB). (730 KB).
</DD> </DD>
<DD> <DD>
The cdrskin tarballs are source code identical with libburn releases The cdrskin tarballs are source code identical with libburn releases
@@ -198,7 +196,7 @@ They get produced via a different procedure, though.<BR>
cdrskin is part of libburn - full libburn is provided with cdrskin releases. cdrskin is part of libburn - full libburn is provided with cdrskin releases.
</DD> </DD>
<!-- This is not offered any more for 0.4.4 and 0.4.5 <!-- This is not offered any more since spring 2008
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DT>Download as single x86 binaries (untar and move to /usr/bin/cdrskin):</DT> <DT>Download as single x86 binaries (untar and move to /usr/bin/cdrskin):</DT>
<DD><A HREF="cdrskin_0.4.2.pl00-x86-suse9_0.tar.gz"> <DD><A HREF="cdrskin_0.4.2.pl00-x86-suse9_0.tar.gz">
@@ -238,17 +236,18 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
<HR> <HR>
<P> <P>
Enhancements towards previous stable version cdrskin-0.4.2: Enhancements towards previous stable version cdrskin-0.4.8.pl00:
<UL> <UL>
<LI>Support for DVD+R/DL media is now official</LI> <LI>Ability to use /dev/scdN as fallback if /dev/srN does not exist</LI>
<!--
<LI>none</LI>
-->
</UL> </UL>
<!-- Bug fixes towards cdrskin-0.4.8.pl00:
Bug fixes towards cdrskin-0.4.2.pl00:
<UL> <UL>
<LI>none yet</LI> <LI>Option drive_scsi_dev_family=scd lead to buffer overflow</LI>
</UL> </UL>
-->
</P> </P>
@@ -256,27 +255,20 @@ Enhancements towards previous stable version cdrskin-0.4.2:
<P> <P>
<DL> <DL>
<DT><H3>Development snapshot, version 0.4.5 :</H3></DT> <DT><H3>Development snapshot, version 0.5.1 :</H3></DT>
<DD>Enhancements towards stable version 0.4.4.pl00: <DD>Enhancements towards current stable version 0.5.0.pl00:
<UL> <UL>
<!-- <!--
<LI>none yet</LI>
--> -->
<LI>Support for BD-RE media is now official</LI> <LI>none yet</LI>
<LI>New blank type blank=as_needed for automatic handling
of media type and state</LI>
<LI>New option stream_recording=on can speed up DVD-RAM and BD-RE</LI>
<LI>New blank type blank=format_defectmgt for DVD-RAM and BD-RE</LI>
<LI>New option --list_formats</LI>
<LI>New blank type blank=format_by_index_&lt;number&gt;</LI>
</UL> </UL>
</DD> </DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DD><A HREF="README_cdrskin_devel">README 0.4.5</A> <DD><A HREF="README_cdrskin_devel">README 0.5.1</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.4.5 --help</A></DD> <DD><A HREF="cdrskin__help_devel">cdrskin_0.5.1 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.4.5 -help</A></DD> <DD><A HREF="cdrskin_help_devel">cdrskin_0.5.1 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.4.5)</A></DD> <DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.5.1)</A></DD>
<DD>&nbsp;</DD> <DD>&nbsp;</DD>
<DT>Maintainers of cdrskin unstable packages please use SVN of <DT>Maintainers of cdrskin unstable packages please use SVN of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT> <A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
@@ -296,11 +288,11 @@ admins with full system souvereignty.</DT>
<A HREF="README_cdrskin_devel">upcoming README</A> ): <A HREF="README_cdrskin_devel">upcoming README</A> ):
</DD> </DD>
<DD> <DD>
<A HREF="cdrskin-0.4.5.tar.gz">cdrskin-0.4.5.tar.gz</A> <A HREF="cdrskin-0.5.1.tar.gz">cdrskin-0.5.1.tar.gz</A>
(730 KB). (730 KB).
</DD> </DD>
<!-- This is not offered any more for 0.4.4 and 0.4.5 <!-- This is not offered any more since spring 2008
<DT>The following downloads are intended for adventurous end users or <DT>The following downloads are intended for adventurous end users or
admins with full system souvereignty.</DT> admins with full system souvereignty.</DT>
@@ -338,14 +330,33 @@ provide libburn with invaluable examples on how to deal with DVD media.
<A NAME="examples"> <A NAME="examples">
<P> <P>
<DL> <DL>
<DT>Example for a setup of device permissions. To be done by the superuser:</DT> <DT>Example for a setup of device permissions.</DT>
<DT>(CD devices which offer no rw-permission are invisible to normal users.) <DT>
Newer Linux distros enable rw-access for the desktop user automatically.
So try as normal user whether all your drives are found.
CD devices which offer no rw-permission will stay invisible.
</DT>
<DD>$ <KBD><B>cdrskin --devices</B></KBD></DD>
<DT>If not all desired drives show up, become superuser and do again:</DT>
</DT> </DT>
<DD># <KBD><B>cdrskin --devices</B></KBD></DD> <DD># <KBD><B>cdrskin --devices</B></KBD></DD>
<DD><KBD>...</KBD></DD> <DD><KBD>...</KBD></DD>
<DD><KBD>0&nbsp; dev='/dev/sr0'&nbsp; rwrwr- :&nbsp; 'TEAC' 'CD-ROM CD-532S'</KBD></DD> <DD><KBD>0&nbsp; dev='/dev/sr0'&nbsp; rwr-r- :&nbsp; 'TEAC' 'CD-ROM CD-532S'</KBD></DD>
<DD><KBD>1&nbsp; dev='/dev/hdc'&nbsp; rwrw-- :&nbsp; 'LITE-ON' 'LTR-48125S'</KBD></DD> <DD><KBD>1&nbsp; dev='/dev/hdc'&nbsp; rwrw-- :&nbsp; 'LITE-ON' 'LTR-48125S'</KBD></DD>
<DT>Most simple and most insecure is this equivalent
of the usual cdrecord permissions u+s,a+x:</DT>
<DD># <KBD><B>chmod a+rw /dev/sr0 /dev/hdc</B></KBD></DD> <DD># <KBD><B>chmod a+rw /dev/sr0 /dev/hdc</B></KBD></DD>
<DT>
More secure is to put the permitted users into a group like
"floppy", to assign /dev/sr0 /dev/hdc to this group,
and to allow rw-access only to group members.
</DT>
<DD># <KBD><B>vi /etc/group</B></KBD></DD>
<DD><KBD>...</KBD></DD>
<DD><KBD>floppy:x:19:thomas,scdbackup</KBD></DD>
<DD><KBD>...</KBD></DD>
<DD># <KBD><B>chgrp floppy /dev/sr0 /dev/hdc</B></KBD></DD>
<DD># <KBD><B>chmod g+rw /dev/sr0 /dev/hdc</B></KBD></DD>
</DL> </DL>
</P> </P>
@@ -430,7 +441,7 @@ cdrecord but not vice versa.
I am a long time user of cdrecord and it works fine for me. I am a long time user of cdrecord and it works fine for me.
Especially i do appreciate its write mode -tao which allows to pipe arbitrary Especially i do appreciate its write mode -tao which allows to pipe arbitrary
data on CD and CD-RW via stdin. cdrecord is reliable, versatile and well data on CD and CD-RW via stdin. cdrecord is reliable, versatile and well
maintained. So for me - there would be not problem with it. maintained. So for me - there would be no problem with it.
<BR> <BR>
But the author of cdrecord and the Linux kernel people foster a very hostile But the author of cdrecord and the Linux kernel people foster a very hostile
relationship. Ok, that's their business, not mine (or ours if you are with me). relationship. Ok, that's their business, not mine (or ours if you are with me).

View File

@@ -1 +1 @@
#define Cdrskin_timestamP "2008.05.09.145205" #define Cdrskin_timestamP "2008.07.16.070001"

View File

@@ -5219,7 +5219,7 @@ Documented last minute changes
* libburn: Improved read performance from stdio: pseudo-drives * libburn: Improved read performance from stdio: pseudo-drives
2008.04.08.132344 [] 2008.04.08.132344 [1674]
Makefile.am Makefile.am
configure.ac configure.ac
README README
@@ -5234,19 +5234,454 @@ doc/comments
cdrskin/changelog.txt cdrskin/changelog.txt
Made number transition Made number transition
------------------------------------ cycle - cdrskin-0.4.5 - 8 Apr 2008 [1675]
------------------------------------ cycle - cdrskin-0.4.5 - - 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
2008.04.08.133452 [1676]
libburn/util.c
Switched from configure.ac versioning to libburn.h versioning
------------------------------------ cycle - cdrskin-0.4.5 - 2008.04.08.134413
2008.04.10.211529 [1681]
libburn/mmc.c
libburn/drive.c
cdrskin/cdrskin.c
Trying to fix bugs about BD-RE, macro for simulating BD-RE on DVD-RAM
------------------------------------ cycle - cdrskin-0.4.5 - 2008.04.10.211529
2008.04.12.164244 [1683]
libburn/libburn.h
libburn/transport.h
libburn/options.h
libburn/options.c
libburn/write.c
libburn/drive.c
libburn/mmc.c
New API call burn_write_opts_set_stream_recording()
2008.04.12.164606 [1684]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
cdrskin/cdrskin_eng.html
New option stream_recording=on|off
------------------------------------ cycle - cdrskin-0.4.5 - 2008.04.12.164930
* New option stream_recording=on can speed up DVD-RAM
2008.04.15.094133 [1685]
libburn/os-linux.h
libburn/write.c
Enforced tail padding with stream_recording, enlarged transport buffer
15 Apr 2008 [1686]
cdrskin/cdrskin.1
Some adjustments of cdrskin man page
------------------------------------ cycle - cdrskin-0.4.5 - 2008.04.15.094545
2008.04.16.082208 [1687]
libburn/read.c
Made burn_read_data() obey its flag bit1
2008.04.18.092715 [1688]
libburn/libburn.h
libburn/async.c
libburn/drive.c
libburn/mmc.c
Began to implement formatting of DVD-RAM and experimentally of BD-RE
2008.04.18.092816 [1689]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
Began to implement formatting of DVD-RAM and experimentally of BD-RE
2008.04.18.194602 [1691]
libburn/mmc.c
Adjustments with DVD-RAM formatting
2008.04.22.161139 [1695]
libburn/libburn.h
libburn/transport.h
libburn/mmc.c
libburn/drive.c
cdrskin/cdrskin.c
cdrskin/cdrskin.1
Adjustments with DVD-RAM formatting
2008.04.22.200949 [1696]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
New option --list_formats
2008.04.23.110116 [1697]
libburn/mmc.c
cdrskin/cdrskin.c
cdrskin/cdrskin.1
New blank type blank=format_by_index_<number>
24 Apr 2008 [1698]
doc/cookbook.txt
Wrote down what was learned about DVD-RAM formatting
24 Apr 2008 [1699]
cdrskin/cdrskin_eng.html
Mentioned new features
2008.04.25.131531 [1700]
libburn/mmc.c
Preparations for formatting BD-RE
2008.04.25.132353 [1701]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
Documented experimental support for BD-RE formatting
25 Apr 2008 [1702]
configure.ac
Incremented LT_CURRENT and LT_AGE to reflect API enhancements
25 Apr 2008 [1703]
cdrskin/cdrskin_eng.html
Documented newest enhancements
------------------------------------ cycle - cdrskin-0.4.5 - 2008.04.25.134438
* New blank type blank=format_defectmgt for DVD-RAM
* New option --list_formats
* New blank type blank=format_by_index_<number>
* Experimental support for formatting BD-RE
2008.04.26.150646 [1704]
libburn/libburn.h
libburn/mmc.c
libburn/drive.c
doc/cookbook.txt
Enabled quick formatting with DVD-RAM, made slow formatting default with BD-RE
2008.04.26.150945 [1705]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
New blank subtypes format_defectmgt_cert_[on|off], on is default
2008.04.27.084704 [1706]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
New blank type format_if_needed
2008.04.27.140144 [1707]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
New blank type as_needed
27 Apr 2008 [1708]
cdrskin/cdrskin_eng.html
Documented newest enhancements
------------------------------------ cycle - cdrskin-0.4.5 - 2008.04.27.163625
* New blank type blank=as_needed for automatic handling of media type and state
3 May 2008 [1723]
README
Updated project history
2008.05.06.082429 [1729]
libburn/drive.c
Avoided to report negative burn_multi_caps.start_range_high with DVD-RW
2008.05.06.084156 [1730]
libburn/mmc.c
Mapped undefined size to 0 with burn_disc_get_formats() and DVD-RW
2008.05.06.180813 [1733]
libburn/libburn.h
libburn/drive.c
libburn/mmc.c
doc/cookbook.txt
doc/comments
test/libburner.c
Declared BD-RE to be supported
2008.05.06.181100 [1734]
cdrskin/cdrskin.c
cdrskin/cdrskin.1
cdrskin/wiki_plain.txt
Declared BD-RE to be supported
2008.05.06.181723 [1735]
libburn/mmc.c
Declared BD-RE to be supported
6 May 2008 [1736]
cdrskin/cdrskin_eng.html
cdrskin/cdrskin.1
Declared BD-RE to be supported
------------------------------------ cycle - cdrskin-0.4.5 - 2008.05.06.183436
* Support for BD-RE media is now official
2008.05.09.143130 [1748]
libburn/libburn.h
Documented read-only profiles CD-ROM and DVD-ROM
2008.05.09.145205 [1749]
libburn/mmc.c
Allowed BD-ROM and BD-R for read-only purposes
9 May 2008 [1750]
cdrskin/cdrskin.1
Changed blank examples to blank=as_needed
------------------------------------ cycle - cdrskin-0.4.5 - 2008.05.09.151327
2008.05.10.080001 [1754]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/wiki_plain.txt
cdrskin/cdrskin_eng.html
doc/comments
cdrskin/cdrskin.1
Made number transition to 0.4.6 and activated development documentation
10 May 2008 [1755]
cdrskin/README
Made number transition to 0.4.6 and activated development documentation
10 May 2008 [1756]
- cdrskin/add_ts_changes_to_libburn_0_4_4
- cdrskin/add_ts_changes_to_libburn_0_4_5
+ cdrskin/add_ts_changes_to_libburn_0_4_6
+ cdrskin/add_ts_changes_to_libburn_0_4_7
Updated cdrskin tarball generator
10 May 2008 [1757]
cdrskin/changelog.txt
Documented changes and release timestamp
----------------------------- release - cdrskin-0.4.6.pl00 - 2008.05.10.080001
* Support for BD-RE media is now official
* New option stream_recording=on can speed up DVD-RAM and BD-RE
* New option --list_formats
* New blank types for expert formatting of DVD-RAM and BD-RE
* New blank type blank=as_needed for automatic handling of media type and state
2008.05.10.132543 [1758]
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
cdrskin/cdrskin.1
Made number transition to 0.4.7
10 May 2008 [1759]
- cdrskin/add_ts_changes_to_libburn_0_4_4
- cdrskin/add_ts_changes_to_libburn_0_4_5
+ cdrskin/add_ts_changes_to_libburn_0_4_6
+ cdrskin/add_ts_changes_to_libburn_0_4_7
Updated cdrskin tarball generator
10 May 2008 [1760]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.4.7 - 2008.05.10.132543
2008.05.14.165025 [1776]
libburn/write.c
Bug fix: random access addressing for DVD-RAM and BD-RE did not work
2008.05.14.165157 [1777]
libburn/libburn.h
Added format types 0x30 and 0x32 to list in API comments
2008.05.14.165258 [1778]
cdrskin/cdrskin.c
Made inability to get format list a reason to abort the program
------------------------------------ cycle - cdrskin-0.4.7 - 2008.05.14.165258
* Bug fix: random access addressing for DVD-RAM and BD-RE did not work
2008.05.17.080001 [1788]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
cdrskin/cdrskin.1
Made number transition to 0.4.8 and activated development documentation
17 May 2008 [1789]
- cdrskin/add_ts_changes_to_libburn_0_4_6
- cdrskin/add_ts_changes_to_libburn_0_4_7
+ cdrskin/add_ts_changes_to_libburn_0_4_8
+ cdrskin/add_ts_changes_to_libburn_0_4_9
Updated cdrskin tarball generator
17 May 2008 [1792]
cdrskin/changelog.txt
Documented changes and release timestamp
----------------------------- release - cdrskin-0.4.8.pl00 - 2008.05.17.080001
* Bug fix: random access addressing for DVD-RAM and BD-RE did not work
2008.05.17.115434 [1790]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
cdrskin/cdrskin.1
Made number transition to 0.4.9
17 May 2008 [1791]
- cdrskin/add_ts_changes_to_libburn_0_4_6
- cdrskin/add_ts_changes_to_libburn_0_4_7
+ cdrskin/add_ts_changes_to_libburn_0_4_8
+ cdrskin/add_ts_changes_to_libburn_0_4_9
Updated cdrskin tarball generator
17 May 2008 [1793]
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.4.9 - 2008.05.17.121250
14 Jun 2008 [1852]
README
Updated release history
2008.06.14.140711 [1853]
libburn/libburn.h
Inserted @since tags for all functions older than 0.2.0
2008.07.02.093933 [1882]
libburn/sg-linux.c
With auto device family: scd is now fallback if sr does not exist
------------------------------------ cycle - cdrskin-0.4.9 - 2008.07.12.164045
* Ability to use /dev/scd as fallback if /dev/sr does not exist
* Bug fix: option drive_scsi_dev_family=scd lead to buffer overflow
2008.07.14.112935 [1914]
libburn/sg-linux.c
libburn/libdax_msgs.h
Trying to avoid SORRY messages when hitting busy hard disk /dev/hdX
2008.07.14.113050 [1915]
cdrskin/cdrskin.c
Making visible the new NOTE and HINT about busy alleged hard disks
2008.07.14.113152 [1916]
configure.ac
Did LT_CURRENT++, LT_AGE++ because of new API call
2008.07.14.113903 [1917]
libburn/libburn.h
libburn/file.c
libburn/async.c
New API call burn_fifo_peek_data()
2008.07.14.164528 [1922]
libburn/sg-linux.c
Followed hint of Giulio Orsero to recognize disk by /proc/ide/hdX/media
------------------------------------ cycle - cdrskin-0.4.9 - 2008.07.14.164906
* New API call burn_fifo_peek_data()
2008.07.16.070001 [1927]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.5.0 and activated development documentation
16 Jul 2008 [1928]
- cdrskin/add_ts_changes_to_libburn_0_4_8
- cdrskin/add_ts_changes_to_libburn_0_4_9
+ cdrskin/add_ts_changes_to_libburn_0_5_0
+ cdrskin/add_ts_changes_to_libburn_0_5_1
Updated cdrskin tarball generator
16 Jul 2008 []
cdrskin/changelog.txt
Documented changes and release timestamp
------------------------------------ cycle - cdrskin-0.5.0 - 2008.07.16.070001
* Ability to use /dev/scd as fallback if /dev/sr does not exist
* Bug fix: option drive_scsi_dev_family=scd lead to buffer overflow
* New API call burn_fifo_peek_data()
------------------------------------ cycle - cdrskin-0.5.1 -
------------------------------------ cycle - cdrskin-0.5.1 -
=============================================================================== ===============================================================================
TODO TODO
=============================================================================== ===============================================================================
@since tags
--------------------------------- bugs -------------------------------------
- Why are DVD+R tracks labeled "invisible" by dvd+rw-mediainfo ?
Why does the DVD drive only show the first session ?
READ TRACK INFORMATION[#5]:
Track State: invisible
Track Start Address: 954960*2KB
Free Blocks: 0*2KB
Track Size: 22784*2KB
ROM Compatibility LBA: 265696
------------------------------ end of bugs ---------------------------------
Overhaul libburn drive scan and single drive opening
Provide DVD+R DL layer break setter
Check all SORRY and FATAL errors whether they should become FAILUREs 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 problem with telltoc: double descriptor list from before load and after load
@@ -5256,9 +5691,6 @@ cdrskin/README
Thin out Thin out
[]
open(,O_LARGEFILE) ?
[] []
Emulate -dummy on overwriteables ? Emulate -dummy on overwriteables ?
@@ -5267,14 +5699,6 @@ Emulate -dummy on DVD+R ?
------------------------------------ cycle - cdrskin-0.3.9 -
cdrskin/changelog.txt
Next cdrskin-0.3.9 cycle
What about minimum track sizes ? (POWER OFF/ON , BUS RESET ?) What about minimum track sizes ? (POWER OFF/ON , BUS RESET ?)
@@ -5282,14 +5706,6 @@ After cooking: review of -do_diet ?
growisofs.c : _LINUX_CAPABILITY_VERSION CAP_SYS_RAWIO SYS_capset ? growisofs.c : _LINUX_CAPABILITY_VERSION CAP_SYS_RAWIO SYS_capset ?
Questions to post:
A70211_to_cdwrite_growisofs_question_finalizing
Format DVD-RAM ?
Disable error checking with DVD-RAM.
Rectify mmc_read_atip speed interpretation. 12x media are reported as 10x. I never heard of 6x media. Rectify mmc_read_atip speed interpretation. 12x media are reported as 10x. I never heard of 6x media.

View File

@@ -7,7 +7,7 @@
debug_opts="-O2" debug_opts="-O2"
def_opts= def_opts=
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1" largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
libvers="-DCdrskin_libburn_0_4_5" libvers="-DCdrskin_libburn_0_5_0"
cleanup_src_or_obj="libburn/cleanup.o" cleanup_src_or_obj="libburn/cleanup.o"
libdax_msgs_o="libburn/libdax_msgs.o" libdax_msgs_o="libburn/libdax_msgs.o"
libdax_audioxtr_o="libburn/libdax_audioxtr.o" libdax_audioxtr_o="libburn/libdax_audioxtr.o"
@@ -33,15 +33,15 @@ do
libdax_audioxtr_o= libdax_audioxtr_o=
libdax_msgs_o="libburn/message.o" libdax_msgs_o="libburn/message.o"
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c" cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
elif test "$i" = "-libburn_0_4_4" elif test "$i" = "-libburn_0_5_0"
then then
libvers="-DCdrskin_libburn_0_4_4" libvers="-DCdrskin_libburn_0_5_0"
libdax_audioxtr_o="libburn/libdax_audioxtr.o" libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o" libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o" cleanup_src_or_obj="libburn/cleanup.o"
elif test "$i" = "-libburn_svn" elif test "$i" = "-libburn_svn"
then then
libvers="-DCdrskin_libburn_0_4_5" libvers="-DCdrskin_libburn_0_5_1"
libdax_audioxtr_o="libburn/libdax_audioxtr.o" libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o" libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o" cleanup_src_or_obj="libburn/cleanup.o"
@@ -76,7 +76,7 @@ do
echo " -compile_cdrfifo compile program cdrskin/cdrfifo." echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
echo " -compile_dewav compile program test/dewav without libburn." echo " -compile_dewav compile program test/dewav without libburn."
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006." echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
echo " -libburn_0_4_4 set macro to match libburn-0.4.4." echo " -libburn_0_5_0 set macro to match libburn-0.5.0"
echo " -libburn_svn set macro to match current libburn-SVN." echo " -libburn_svn set macro to match current libburn-SVN."
echo " -no_largefile do not use 64 bit off_t (must match libburn)." echo " -no_largefile do not use 64 bit off_t (must match libburn)."
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin." echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."

View File

@@ -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. traditionally provided by cdrecord. Currently it does CD-R and CD-RW this way.
Overwriteable media DVD-RAM, DVD+RW, DVD-RW, and BD-RE are handled differently Overwriteable media DVD-RAM, DVD+RW, DVD-RW, and BD-RE are handled differently
than with cdrecord-ProDVD in order to offer TAO-like single track recording. than with cdrecord-ProDVD in order to offer TAO-like single track recording.
Sequential DVD-R[W], DVD+R, DVD+R/DL 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 multi-session. Additionally cdrskin offers cdrecord-ProDVD-like mode DAO
with DVD-R[W]. with DVD-R[W].
@@ -81,6 +81,19 @@ has to offer both, r- and w-permission.
-------------------------------------------------------------------------- --------------------------------------------------------------------------
blank=as_needed applies the suitable blanking or formatting to make
any supported type of media ready for writing from scratch.
If this is not possible, e.g. because the media is written and not
re-usable, then the program run fails.
Option blank= offers several specialized blanking and formatting types,
which one may use for particular purposes on DVD-RW, DVD-RAM and BD-RE.
(See also below: blank=format_overwrite)
The drive offers a list of possible formats by cdrskin option --list_formats.
One should aquire MMC background information before making use of them.
--------------------------------------------------------------------------
cdrskin does not only read from and write to optical drives which comply cdrskin does not only read from and write to optical drives which comply
to the MMC standard but also does the same with regular files or block to the MMC standard but also does the same with regular files or block
devices other than optical drives. devices other than optical drives.
@@ -115,7 +128,7 @@ All files used as pseudo-drives have to offer rw-permission.
-------------------------------------------------------------------------- --------------------------------------------------------------------------
The DVD capabilities of cdrskin differ from those of cdrecord-ProDVD. cdrskin The DVD capabilities of cdrskin differ from those of cdrecord-ProDVD. cdrskin
offers TAO-like multi-session with DVD-R[W], DVD+R[/DL] and TAO-like single 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 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. probably the same as the traditional cdrecord-ProDVD write mode.
@@ -126,9 +139,9 @@ disc from its initial profile "Sequential Recording" into profile state
cdrskin dev=/dev/sr0 -v blank=format_overwrite cdrskin dev=/dev/sr0 -v blank=format_overwrite
}}} }}}
DVD-RAM, DVD+RW and overwriteable DVD-RW appear to cdrskin as blank media DVD-RAM, DVD+RW, BD-RE and overwriteable DVD-RW appear to cdrskin as blank
which are capable of taking only a single track. This track may be positioned media which are capable of taking only a single track. This track may be
on a 32KiB aligned address, though. positioned on a 32KiB aligned address, though.
{{{ {{{
cdrskin ... write_start_address=2412m ... cdrskin ... write_start_address=2412m ...
}}} }}}
@@ -151,7 +164,7 @@ option -multi tolerable with media and write modes which are not suitable for
multi-session. (The default behavior of cdrskin deems me to be preferrable.) multi-session. (The default behavior of cdrskin deems me to be preferrable.)
Option --grow_overwriteable_iso gives cdrskin ISO pseudo-multi-session Option --grow_overwriteable_iso gives cdrskin ISO pseudo-multi-session
capabilities on DVD-RAM and DVD+RW similar to growisofs. capabilities on DVD-RAM, DVD+RW, BD-RE similar to growisofs.
Associated options blank=, -multi, -msinfo and -toc are available in this case. Associated options blank=, -multi, -msinfo and -toc are available in this case.
They either pretend a blank media (if there is no ISO 9660 image) or appendable They either pretend a blank media (if there is no ISO 9660 image) or appendable
media with a single session and track on it. blank= invalidates ISO images. media with a single session and track on it. blank= invalidates ISO images.
@@ -268,7 +281,7 @@ for an illustrated example with K3b 0.10 .
DVD advise: DVD advise:
For burning of DVD/BD media other than DVD-RAM, DVD+RW, DVD+R, DVD+R/DL, For burning of DVD/BD media other than DVD-RAM, DVD+RW, DVD+R, DVD+R DL,
DVD-RW, DVD-R, BD-RE, the cdrskin project currently advises to use DVD-RW, DVD-R, BD-RE, the cdrskin project currently advises to use
Andy Polyakov's dvd+rw-tools which despite their historic name are Andy Polyakov's dvd+rw-tools which despite their historic name are
capable of all the media above and more, including BD discs. capable of all the media above and more, including BD discs.
@@ -290,8 +303,8 @@ with CD media, but retrieves additional information from the existing ISO
image and finally manipulates the start sectors of this existing image. image and finally manipulates the start sectors of this existing image.
So, inspired by growisofs, cdrskin can offer DVD multi-session not only with So, inspired by growisofs, cdrskin can offer DVD multi-session not only with
sequential DVD-R[W] and with DVD+R [DL], but also with DVD-RAM, DVD+RW and sequential DVD-R[W] and with DVD+R [DL], but also with DVD-RAM, DVD+RW, BD-RE
even regular disk files or block devices other than CD/DVD writers. and even regular disk files or block devices other than CD/DVD writers.
This is enabled by option --grow_overwriteable_iso. This is enabled by option --grow_overwriteable_iso.
The libburnia project provides an integrated ISO-9660 multi-session tool The libburnia project provides an integrated ISO-9660 multi-session tool

View File

@@ -1,4 +1,4 @@
AC_INIT([libburn], [0.4.5], [http://libburnia-project.org]) AC_INIT([libburn], [0.5.0], [http://libburnia-project.org])
AC_PREREQ([2.50]) AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h]) dnl AC_CONFIG_HEADER([config.h])
@@ -60,6 +60,9 @@ dnl
dnl Neatly versioned stable releases meanwhile: dnl Neatly versioned stable releases meanwhile:
dnl 0.4.2 = libburn.so.4.7.0 dnl 0.4.2 = libburn.so.4.7.0
dnl 0.4.4 = libburn.so.4.9.0 dnl 0.4.4 = libburn.so.4.9.0
dnl 0.4.6 = libburn.so.4.11.0
dnl 0.4.8 = libburn.so.4.13.0
dnl 0.5.0 = libburn.so.4.15.0
dnl dnl
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here. dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE. dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
@@ -84,8 +87,8 @@ dnl If BURN_*_VERSION changes, be sure to change AC_INIT above to match.
dnl dnl
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_* dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
BURN_MAJOR_VERSION=0 BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=4 BURN_MINOR_VERSION=5
BURN_MICRO_VERSION=5 BURN_MICRO_VERSION=0
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
AC_SUBST(BURN_MAJOR_VERSION) AC_SUBST(BURN_MAJOR_VERSION)
@@ -96,15 +99,16 @@ AC_SUBST(BURN_VERSION)
dnl Libtool versioning dnl Libtool versioning
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
dnl dnl
dnl ts A80408 dnl ts A80717
dnl ### This was the release version libburn-0.4.4 = libburn.so.4.9.0 dnl This is the release version libburn-0.5.0 = libburn.so.4.15.0
dnl This is the development version after above release version dnl ### This is the development version after above release version
dnl LT_CURRENT++, LT_AGE++ has already happened. dnl LT_CURRENT++, LT_AGE++ has not yet happened.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl dnl
dnl SONAME = 14 - 10 = 4 . Library name = libburn.so.4.10.0 dnl SONAME = 19 - 15 = 4 . Library name = libburn.so.4.15.0
LT_CURRENT=14 LT_CURRENT=19
LT_AGE=15
LT_REVISION=0 LT_REVISION=0
LT_AGE=10
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
AC_SUBST(LT_RELEASE) AC_SUBST(LT_RELEASE)

View File

@@ -70,7 +70,7 @@ composition, updating and writing. Quite unique in the Linux world.
manipulates and writes ISO 9660 filesystem images with manipulates and writes ISO 9660 filesystem images with
Rock Ridge extensions. Manipulation is not only adding or Rock Ridge extensions. Manipulation is not only adding or
overwriting of files but also deletion, renaming, and attribute overwriting of files but also deletion, renaming, and attribute
changing. changing. An incremental backup feature is provided.
See xorriso/README for more See xorriso/README for more
- "test" is a collection of application gestures and examples given by the - "test" is a collection of application gestures and examples given by the

View File

@@ -43,7 +43,15 @@
#include "libdax_msgs.h" #include "libdax_msgs.h"
extern struct libdax_msgs *libdax_messenger; extern struct libdax_msgs *libdax_messenger;
#define SCAN_GOING() (workers && !workers->drive) /* ts A80714 : introduced type codes for the worker list */
#define Burnworker_type_scaN 0
#define Burnworker_type_erasE 1
#define Burnworker_type_formaT 2
#define Burnworker_type_writE 3
#define Burnworker_type_fifO 4
#define SCAN_GOING() (workers != NULL && \
workers->w_type == Burnworker_type_scaN)
typedef void *(*WorkerFunc) (void *); typedef void *(*WorkerFunc) (void *);
@@ -85,6 +93,9 @@ struct fifo_opts
struct w_list struct w_list
{ {
/* ts A80714 */
int w_type; /* see above define Burnworker_type_* */
struct burn_drive *drive; struct burn_drive *drive;
pthread_t thread; pthread_t thread;
@@ -113,7 +124,8 @@ static struct w_list *find_worker(struct burn_drive *d)
return NULL; return NULL;
} }
static void add_worker(struct burn_drive *d, WorkerFunc f, void *data) static void add_worker(int w_type, struct burn_drive *d,
WorkerFunc f, void *data)
{ {
struct w_list *a; struct w_list *a;
struct w_list *tmp; struct w_list *tmp;
@@ -124,6 +136,7 @@ static void add_worker(struct burn_drive *d, WorkerFunc f, void *data)
#endif #endif
a = malloc(sizeof(struct w_list)); a = malloc(sizeof(struct w_list));
a->w_type = w_type;
a->drive = d; a->drive = d;
a->u = *(union w_list_data *)data; a->u = *(union w_list_data *)data;
@@ -259,7 +272,8 @@ drive_is_active:;
o.drives = drives; o.drives = drives;
o.n_drives = n_drives; o.n_drives = n_drives;
o.done = 0; o.done = 0;
add_worker(NULL, (WorkerFunc) scan_worker_func, &o); add_worker(Burnworker_type_scaN, NULL,
(WorkerFunc) scan_worker_func, &o);
} else if (workers->u.scan.done) { } else if (workers->u.scan.done) {
/* its done */ /* its done */
ret = workers->u.scan.done; ret = workers->u.scan.done;
@@ -303,7 +317,7 @@ void burn_disc_erase(struct burn_drive *drive, int fast)
"NULL pointer caught in burn_disc_erase", 0, 0); "NULL pointer caught in burn_disc_erase", 0, 0);
return; return;
} }
if ((SCAN_GOING()) || find_worker(drive)) { if ((SCAN_GOING()) || find_worker(drive) != NULL) {
libdax_msgs_submit(libdax_messenger, drive->global_index, libdax_msgs_submit(libdax_messenger, drive->global_index,
0x00020102, 0x00020102,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
@@ -343,7 +357,8 @@ void burn_disc_erase(struct burn_drive *drive, int fast)
o.drive = drive; o.drive = drive;
o.fast = fast; o.fast = fast;
add_worker(drive, (WorkerFunc) erase_worker_func, &o); add_worker(Burnworker_type_erasE, drive,
(WorkerFunc) erase_worker_func, &o);
} }
@@ -364,7 +379,7 @@ void burn_disc_format(struct burn_drive *drive, off_t size, int flag)
int ok = 0; int ok = 0;
char msg[160]; char msg[160];
if ((SCAN_GOING()) || find_worker(drive)) { if ((SCAN_GOING()) || find_worker(drive) != NULL) {
libdax_msgs_submit(libdax_messenger, drive->global_index, libdax_msgs_submit(libdax_messenger, drive->global_index,
0x00020102, 0x00020102,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
@@ -411,7 +426,8 @@ void burn_disc_format(struct burn_drive *drive, off_t size, int flag)
o.drive = drive; o.drive = drive;
o.size = size; o.size = size;
o.flag = flag; o.flag = flag;
add_worker(drive, (WorkerFunc) format_worker_func, &o); add_worker(Burnworker_type_formaT, drive,
(WorkerFunc) format_worker_func, &o);
} }
@@ -441,7 +457,7 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
/* ts A61006 */ /* ts A61006 */
/* a ssert(!SCAN_GOING()); */ /* a ssert(!SCAN_GOING()); */
/* a ssert(!find_worker(opts->drive)); */ /* a ssert(!find_worker(opts->drive)); */
if ((SCAN_GOING()) || find_worker(opts->drive)) { if ((SCAN_GOING()) || find_worker(opts->drive) != NULL) {
libdax_msgs_submit(libdax_messenger, opts->drive->global_index, libdax_msgs_submit(libdax_messenger, opts->drive->global_index,
0x00020102, 0x00020102,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
@@ -495,7 +511,8 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
opts->refcount++; opts->refcount++;
add_worker(opts->drive, (WorkerFunc) write_disc_worker_func, &o); add_worker(Burnworker_type_writE, opts->drive,
(WorkerFunc) write_disc_worker_func, &o);
} }
@@ -523,7 +540,8 @@ int burn_fifo_start(struct burn_source *source, int flag)
o.source = source; o.source = source;
o.flag = flag; o.flag = flag;
add_worker(NULL, (WorkerFunc) fifo_worker_func, &o); add_worker(Burnworker_type_fifO, NULL,
(WorkerFunc) fifo_worker_func, &o);
fs->is_started = 1; fs->is_started = 1;
return 1; return 1;
} }

View File

@@ -540,3 +540,64 @@ int burn_fifo_inquire_status(struct burn_source *source,
return ret; return ret;
} }
int burn_fifo_peek_data(struct burn_source *source, char *buf, int bufsize,
int flag)
{
int size, free_bytes, ret, wait_count= 0;
char *status_text;
struct burn_source_fifo *fs = source->data;
/* Eventually start fifo thread by reading 0 bytes */
ret = fifo_read(source, (unsigned char *) NULL, 0);
if (ret<0)
return 0;
/* wait for at least bufsize bytes being ready */
while (1) {
ret= burn_fifo_inquire_status(source,
&size, &free_bytes, &status_text);
if (size < bufsize) {
libdax_msgs_submit(libdax_messenger, -1, 0x0002015c,
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
"Fifo size is smaller than desired peek buffer", 0, 0);
return -1;
}
if (fs->out_counter > 0 || (ret & 4) || fs->buf == NULL) {
libdax_msgs_submit(libdax_messenger, -1, 0x0002015e,
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
"Fifo is already under consumption when peeking is desired",
0, 0);
return -1;
}
if(size - free_bytes >= bufsize) {
/* <<<
fprintf(stderr,
"libburn_DEBUG: after waiting cycle %d : fifo %s , %d bytes\n",
wait_count, status_text, size - free_bytes);
*/
memcpy(buf, fs->buf, bufsize);
return 1;
}
if (ret&2) { /* input has ended, not enough data arrived */
libdax_msgs_submit(libdax_messenger, -1, 0x0002015d,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
"Fifo input ended short of desired peek buffer size",
0, 0);
return 0;
}
usleep(100000);
wait_count++;
/* <<<
if(wait_count%10==0)
fprintf(stderr,
"libburn_DEBUG: waiting cycle %d : fifo %s , %d bytes\n",
wait_count, status_text, size - free_bytes);
*/
}
return(0);
}

View File

@@ -198,10 +198,12 @@ enum burn_disc_status
BURN_DISC_FULL, BURN_DISC_FULL,
/* ts A61007 */ /* ts A61007 */
/* @since 0.2.4 */
/** The drive was not grabbed when the status was inquired */ /** The drive was not grabbed when the status was inquired */
BURN_DISC_UNGRABBED, BURN_DISC_UNGRABBED,
/* ts A61020 */ /* ts A61020 */
/* @since 0.2.6 */
/** The media seems not to be suitable for burning */ /** The media seems not to be suitable for burning */
BURN_DISC_UNSUITABLE BURN_DISC_UNSUITABLE
}; };
@@ -242,6 +244,7 @@ enum burn_drive_status
BURN_DRIVE_GRABBING, BURN_DRIVE_GRABBING,
/* ts A61102 */ /* ts A61102 */
/* @since 0.2.6 */
/** The drive gets written zeroes before the track payload data */ /** The drive gets written zeroes before the track payload data */
BURN_DRIVE_WRITING_PREGAP, BURN_DRIVE_WRITING_PREGAP,
/** The drive is told to close a track (TAO only) */ /** The drive is told to close a track (TAO only) */
@@ -250,10 +253,12 @@ enum burn_drive_status
BURN_DRIVE_CLOSING_SESSION, BURN_DRIVE_CLOSING_SESSION,
/* ts A61223 */ /* ts A61223 */
/* @since 0.3.0 */
/** The drive is formatting media */ /** The drive is formatting media */
BURN_DRIVE_FORMATTING, BURN_DRIVE_FORMATTING,
/* ts A70822 */ /* ts A70822 */
/* @since 0.4.0 */
/** The drive is busy in synchronous read (if you see this then it /** The drive is busy in synchronous read (if you see this then it
has been interrupted) */ has been interrupted) */
BURN_DRIVE_READING_SYNC, BURN_DRIVE_READING_SYNC,
@@ -307,6 +312,7 @@ struct burn_toc_entry
/* ts A70201 : DVD extension. /* ts A70201 : DVD extension.
If invalid the members are guaranteed to be 0. */ If invalid the members are guaranteed to be 0. */
/* @since 0.3.2 */
/* Tracks and session numbers are 16 bit. Here are the high bytes. */ /* Tracks and session numbers are 16 bit. Here are the high bytes. */
unsigned char session_msb; unsigned char session_msb;
unsigned char point_msb; unsigned char point_msb;
@@ -402,6 +408,7 @@ struct burn_source {
/* ts A70125 : BROKE BINARY BACKWARD COMPATIBILITY AT libburn-0.3.1. */ /* ts A70125 : BROKE BINARY BACKWARD COMPATIBILITY AT libburn-0.3.1. */
/* @since 0.3.2 */
/** Program the reply of (*get_size) to a fixed value. It is advised /** 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 . to implement this by a attribute off_t fixed_size; in *data .
The read() function does not have to take into respect this fake The read() function does not have to take into respect this fake
@@ -449,7 +456,7 @@ struct burn_source {
/* ts A71222 : Supposed to be binary backwards compatible extension. */ /* ts A71222 : Supposed to be binary backwards compatible extension. */
/* @since 0.4.2 */
/** Valid only if above member .(*read)() is NULL. This indicates a /** Valid only if above member .(*read)() is NULL. This indicates a
version of struct burn_source younger than 0. version of struct burn_source younger than 0.
From then on, member .version tells which further members exist From then on, member .version tells which further members exist
@@ -574,12 +581,14 @@ struct burn_progress {
int sector; int sector;
/* ts A61023 */ /* ts A61023 */
/* @since 0.2.6 */
/** The capacity of the drive buffer */ /** The capacity of the drive buffer */
unsigned buffer_capacity; unsigned buffer_capacity;
/** The free space in the drive buffer (might be slightly outdated) */ /** The free space in the drive buffer (might be slightly outdated) */
unsigned buffer_available; unsigned buffer_available;
/* ts A61119 */ /* ts A61119 */
/* @since 0.2.6 */
/** The number of bytes sent to the drive buffer */ /** The number of bytes sent to the drive buffer */
off_t buffered_bytes; off_t buffered_bytes;
/** The minimum number of bytes stored in buffer during write. /** The minimum number of bytes stored in buffer during write.
@@ -591,6 +600,7 @@ struct burn_progress {
/* ts A61226 */ /* ts A61226 */
/* @since 0.3.0 */
/** Description of a speed capability as reported by the drive in conjunction /** Description of a speed capability as reported by the drive in conjunction
with eventually loaded media. There can be more than one such object per with eventually loaded media. There can be more than one such object per
drive. So they are chained via .next and .prev , where NULL marks the end drive. So they are chained via .next and .prev , where NULL marks the end
@@ -673,6 +683,7 @@ void burn_finish(void);
@return 1 ok, all went well @return 1 ok, all went well
0 had to leave a drive in unclean state 0 had to leave a drive in unclean state
<0 severe error, do no use libburn again <0 severe error, do no use libburn again
@since 0.2.6
*/ */
int burn_abort(int patience, int burn_abort(int patience,
int (*pacifier_func)(void *handle, int patience, int elapsed), int (*pacifier_func)(void *handle, int patience, int elapsed),
@@ -722,6 +733,7 @@ void burn_set_verbosity(int level);
@param abort_on_busy Unconditionally abort process when a non blocking @param abort_on_busy Unconditionally abort process when a non blocking
exclusive opening attempt indicates a busy drive. exclusive opening attempt indicates a busy drive.
Use this only after thorough tests with your app. Use this only after thorough tests with your app.
@since 0.2.2
*/ */
void burn_preset_device_open(int exclusive, int blocking, int abort_on_busy); void burn_preset_device_open(int exclusive, int blocking, int abort_on_busy);
@@ -735,6 +747,7 @@ void burn_preset_device_open(int exclusive, int blocking, int abort_on_busy);
If ever then this call should be done soon after burn_initialize() before If ever then this call should be done soon after burn_initialize() before
any drive scanning. any drive scanning.
@param yes 1=allow all implemented profiles, 0=only tested media (default) @param yes 1=allow all implemented profiles, 0=only tested media (default)
@since 0.3.4
*/ */
void burn_allow_untested_profiles(int yes); void burn_allow_untested_profiles(int yes);
@@ -818,17 +831,21 @@ void burn_allow_untested_profiles(int yes);
@param load Nonzero to make the drive attempt to load a disc (close its @param load Nonzero to make the drive attempt to load a disc (close its
tray door, etc). tray door, etc).
@return 1 = success , 0 = drive not found , -1 = other error @return 1 = success , 0 = drive not found , -1 = other error
@since 0.2.2
*/ */
int burn_drive_scan_and_grab(struct burn_drive_info *drive_infos[], int burn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
char* adr, int load); char* adr, int load);
/* ts A51221 */ /* ts A51221 */
/* @since 0.2.2 */
/** Maximum number of particularly permissible drive addresses */ /** Maximum number of particularly permissible drive addresses */
#define BURN_DRIVE_WHITELIST_LEN 255 #define BURN_DRIVE_WHITELIST_LEN 255
/** Add a device to the list of permissible drives. As soon as some entry is in /** Add a device to the list of permissible drives. As soon as some entry is in
the whitelist all non-listed drives are banned from scanning. the whitelist all non-listed drives are banned from scanning.
@return 1 success, <=0 failure @return 1 success, <=0 failure
@since 0.2.2
*/ */
int burn_drive_add_whitelist(char *device_address); int burn_drive_add_whitelist(char *device_address);
@@ -875,6 +892,7 @@ int burn_drive_scan(struct burn_drive_info *drive_infos[],
Use these two only. Further values are to be defined. Use these two only. Further values are to be defined.
@return 1 on success, 2 if drive was already forgotten, @return 1 on success, 2 if drive was already forgotten,
0 if not permissible, <0 on other failures, 0 if not permissible, <0 on other failures,
@since 0.2.2
*/ */
int burn_drive_info_forget(struct burn_drive_info *drive_info, int force); int burn_drive_info_forget(struct burn_drive_info *drive_info, int force);
@@ -887,23 +905,28 @@ void burn_drive_info_free(struct burn_drive_info drive_infos[]);
/* ts A60823 */ /* ts A60823 */
/* @since 0.2.2 */
/** Maximum length+1 to expect with a persistent drive address string */ /** Maximum length+1 to expect with a persistent drive address string */
#define BURN_DRIVE_ADR_LEN 1024 #define BURN_DRIVE_ADR_LEN 1024
/* ts A70906 */
/** Inquire the persistent address of the given drive. /** Inquire the persistent address of the given drive.
@param drive The drive to inquire. @param drive The drive to inquire.
@param adr An application provided array of at least BURN_DRIVE_ADR_LEN @param adr An application provided array of at least BURN_DRIVE_ADR_LEN
characters size. The persistent address gets copied to it. characters size. The persistent address gets copied to it.
@return >0 success , <=0 error (due to libburn internal problem) @return >0 success , <=0 error (due to libburn internal problem)
@since 0.4.0
*/ */
int burn_drive_d_get_adr(struct burn_drive *drive, char adr[]); int burn_drive_d_get_adr(struct burn_drive *drive, char adr[]);
/* A60823 */
/** Inquire the persistent address of a drive via a given drive_info object. /** Inquire the persistent address of a drive via a given drive_info object.
(Note: This is a legacy call.) (Note: This is a legacy call.)
@param drive_info The drive to inquire.Usually some &(drive_infos[driveno]) @param drive_info The drive to inquire.Usually some &(drive_infos[driveno])
@param adr An application provided array of at least BURN_DRIVE_ADR_LEN @param adr An application provided array of at least BURN_DRIVE_ADR_LEN
characters size. The persistent address gets copied to it. characters size. The persistent address gets copied to it.
@return >0 success , <=0 error (due to libburn internal problem) @return >0 success , <=0 error (due to libburn internal problem)
@since 0.2.6
*/ */
int burn_drive_get_adr(struct burn_drive_info *drive_info, char adr[]); int burn_drive_get_adr(struct burn_drive_info *drive_info, char adr[]);
@@ -912,6 +935,7 @@ int burn_drive_get_adr(struct burn_drive_info *drive_info, char adr[]);
/** Evaluate whether the given address would be a possible persistent drive /** Evaluate whether the given address would be a possible persistent drive
address of libburn. address of libburn.
@return 1 means yes, 0 means no @return 1 means yes, 0 means no
@since 0.2.6
*/ */
int burn_drive_is_enumerable_adr(char *adr); int burn_drive_is_enumerable_adr(char *adr);
@@ -924,6 +948,7 @@ int burn_drive_is_enumerable_adr(char *adr);
@param adr An application provided array of at least BURN_DRIVE_ADR_LEN @param adr An application provided array of at least BURN_DRIVE_ADR_LEN
characters size. The persistent address gets copied to it. characters size. The persistent address gets copied to it.
@return 1 = success , 0 = failure , -1 = severe error @return 1 = success , 0 = failure , -1 = severe error
@since 0.2.6
*/ */
int burn_drive_convert_fs_adr(char *path, char adr[]); int burn_drive_convert_fs_adr(char *path, char adr[]);
@@ -941,6 +966,7 @@ int burn_drive_convert_fs_adr(char *path, char adr[]);
@param adr An application provided array of at least BURN_DRIVE_ADR_LEN @param adr An application provided array of at least BURN_DRIVE_ADR_LEN
characters size. The persistent address gets copied to it. characters size. The persistent address gets copied to it.
@return 1 = success , 0 = failure , -1 = severe error @return 1 = success , 0 = failure , -1 = severe error
@since 0.2.6
*/ */
int burn_drive_convert_scsi_adr(int bus_no, int host_no, int channel_no, int burn_drive_convert_scsi_adr(int bus_no, int host_no, int channel_no,
int target_no, int lun_no, char adr[]); int target_no, int lun_no, char adr[]);
@@ -951,6 +977,7 @@ int burn_drive_convert_scsi_adr(int bus_no, int host_no, int channel_no,
drive address obtained via burn_drive_d_get_adr(). It is also supposed to drive address obtained via burn_drive_d_get_adr(). It is also supposed to
succeed with any device file of a (possibly emulated) SCSI device. succeed with any device file of a (possibly emulated) SCSI device.
@return 1 = success , 0 = failure , -1 = severe error @return 1 = success , 0 = failure , -1 = severe error
@since 0.2.6
*/ */
int burn_drive_obtain_scsi_adr(char *path, int *bus_no, int *host_no, int burn_drive_obtain_scsi_adr(char *path, int *bus_no, int *host_no,
int *channel_no, int *target_no, int *lun_no); int *channel_no, int *target_no, int *lun_no);
@@ -983,6 +1010,7 @@ void burn_drive_release(struct burn_drive *drive, int eject);
@param drive The drive to release and leave locked. @param drive The drive to release and leave locked.
@param flag Bitfield for control purposes (unused yet, submit 0) @param flag Bitfield for control purposes (unused yet, submit 0)
@return 1 means success, <=0 means failure @return 1 means success, <=0 means failure
@since 0.4.0
*/ */
int burn_drive_leave_locked(struct burn_drive *d, int flag); int burn_drive_leave_locked(struct burn_drive *d, int flag);
@@ -1003,6 +1031,7 @@ enum burn_disc_status burn_disc_get_status(struct burn_drive *drive);
or BURN_DISC_UNSUITABLE. Thus marking media as writable which actually or BURN_DISC_UNSUITABLE. Thus marking media as writable which actually
failed to declare themselves either blank or (partially) filled. failed to declare themselves either blank or (partially) filled.
@return 1 drive status has been set , 0 = unsuitable drive status @return 1 drive status has been set , 0 = unsuitable drive status
@since 0.2.6
*/ */
int burn_disc_pretend_blank(struct burn_drive *drive); int burn_disc_pretend_blank(struct burn_drive *drive);
@@ -1012,6 +1041,7 @@ int burn_disc_pretend_blank(struct burn_drive *drive);
Sets the drive status to BURN_DISC_FULL if it is BURN_DISC_UNREADY Sets the drive status to BURN_DISC_FULL if it is BURN_DISC_UNREADY
or BURN_DISC_UNSUITABLE. Thus marking media as blankable which actually or BURN_DISC_UNSUITABLE. Thus marking media as blankable which actually
failed to declare themselves either blank or (partially) filled. failed to declare themselves either blank or (partially) filled.
@since 0.2.6
*/ */
int burn_disc_pretend_full(struct burn_drive *drive); int burn_disc_pretend_full(struct burn_drive *drive);
@@ -1022,6 +1052,7 @@ int burn_disc_pretend_full(struct burn_drive *drive);
burn_drive_get_start_end_lba(). The drive must be grabbed for this call. burn_drive_get_start_end_lba(). The drive must be grabbed for this call.
@param drive The drive to query. @param drive The drive to query.
@return 1=sucess, 0=no valid ATIP info read, -1 severe error @return 1=sucess, 0=no valid ATIP info read, -1 severe error
@since 0.2.6
*/ */
int burn_disc_read_atip(struct burn_drive *drive); int burn_disc_read_atip(struct burn_drive *drive);
@@ -1036,6 +1067,7 @@ int burn_disc_read_atip(struct burn_drive *drive);
@param end_lba Returns the end lba value @param end_lba Returns the end lba value
@param flag Bitfield for control purposes (unused yet, submit 0) @param flag Bitfield for control purposes (unused yet, submit 0)
@return 1 if lba values are valid , 0 if invalid @return 1 if lba values are valid , 0 if invalid
@since 0.2.6
*/ */
int burn_drive_get_start_end_lba(struct burn_drive *drive, int burn_drive_get_start_end_lba(struct burn_drive *drive,
int *start_lba, int *end_lba, int flag); int *start_lba, int *end_lba, int flag);
@@ -1053,6 +1085,7 @@ int burn_drive_get_start_end_lba(struct burn_drive *drive,
@param lba return value: start lba @param lba return value: start lba
@param nwa return value: Next Writeable Address @param nwa return value: Next Writeable Address
@return 1=nwa is valid , 0=nwa is not valid , -1=error @return 1=nwa is valid , 0=nwa is not valid , -1=error
@since 0.2.6
*/ */
int burn_disc_track_lba_nwa(struct burn_drive *d, struct burn_write_opts *o, int burn_disc_track_lba_nwa(struct burn_drive *d, struct burn_write_opts *o,
int trackno, int *lba, int *nwa); int trackno, int *lba, int *nwa);
@@ -1064,6 +1097,7 @@ int burn_disc_track_lba_nwa(struct burn_drive *d, struct burn_write_opts *o,
@param d The drive to query. @param d The drive to query.
@param start_lba returns the start address of that track @param start_lba returns the start address of that track
@return <= 0 : failure, 1 = ok @return <= 0 : failure, 1 = ok
@since 0.3.2
*/ */
int burn_disc_get_msc1(struct burn_drive *d, int *start_lba); int burn_disc_get_msc1(struct burn_drive *d, int *start_lba);
@@ -1080,6 +1114,7 @@ int burn_disc_get_msc1(struct burn_drive *d, int *start_lba);
@param d The drive to query. @param d The drive to query.
@param o If not NULL: write parameters to be set on drive before query @param o If not NULL: write parameters to be set on drive before query
@return number of most probably available free bytes @return number of most probably available free bytes
@since 0.3.4
*/ */
off_t burn_disc_available_space(struct burn_drive *d, off_t burn_disc_available_space(struct burn_drive *d,
struct burn_write_opts *o); struct burn_write_opts *o);
@@ -1107,6 +1142,7 @@ off_t burn_disc_available_space(struct burn_drive *d,
@param pno Profile Number. See also mmc5r03c.pdf, table 89 @param pno Profile Number. See also mmc5r03c.pdf, table 89
@param name Profile Name (see above list, unknown profiles have empty name) @param name Profile Name (see above list, unknown profiles have empty name)
@return 1 profile is valid, 0 no profile info available @return 1 profile is valid, 0 no profile info available
@since 0.3.0
*/ */
int burn_disc_get_profile(struct burn_drive *d, int *pno, char name[80]); int burn_disc_get_profile(struct burn_drive *d, int *pno, char name[80]);
@@ -1136,6 +1172,7 @@ struct burn_write_opts *burn_write_opts_new(struct burn_drive *drive);
/** Inquires the drive associated with a burn_write_opts object. /** Inquires the drive associated with a burn_write_opts object.
@param opts object to inquire @param opts object to inquire
@return pointer to drive @return pointer to drive
@since 0.4.0
*/ */
struct burn_drive *burn_write_opts_get_drive(struct burn_write_opts *opts); struct burn_drive *burn_write_opts_get_drive(struct burn_write_opts *opts);
@@ -1205,16 +1242,19 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
Acceptable types are: 0x00, 0x01, 0x10, 0x11, 0x13, Acceptable types are: 0x00, 0x01, 0x10, 0x11, 0x13,
0x15, 0x26, 0x30, 0x31. 0x15, 0x26, 0x30, 0x31.
If bit7 is set, bit4 is set automatically. If bit7 is set, bit4 is set automatically.
@since 0.3.0
*/ */
void burn_disc_format(struct burn_drive *drive, off_t size, int flag); void burn_disc_format(struct burn_drive *drive, off_t size, int flag);
/* ts A70112 */ /* ts A70112 */
/* @since 0.3.0 */
/** Possible formatting status values */ /** Possible formatting status values */
#define BURN_FORMAT_IS_UNFORMATTED 1 #define BURN_FORMAT_IS_UNFORMATTED 1
#define BURN_FORMAT_IS_FORMATTED 2 #define BURN_FORMAT_IS_FORMATTED 2
#define BURN_FORMAT_IS_UNKNOWN 3 #define BURN_FORMAT_IS_UNKNOWN 3
/* ts A70112 */
/** Inquire the formatting status, the associated sizes and the number of /** Inquire the formatting status, the associated sizes and the number of
available formats. The info is media specific and stems from MMC command available formats. The info is media specific and stems from MMC command
23h READ FORMAT CAPACITY. See mmc5r03c.pdf 6.24 for background details. 23h READ FORMAT CAPACITY. See mmc5r03c.pdf 6.24 for background details.
@@ -1233,10 +1273,12 @@ void burn_disc_format(struct burn_drive *drive, off_t size, int flag);
burn_disc_get_format_descr() to obtain such a format burn_disc_get_format_descr() to obtain such a format
and eventually with burn_disc_format() to select one. and eventually with burn_disc_format() to select one.
@return 1 reply is valid , <=0 failure @return 1 reply is valid , <=0 failure
@since 0.3.0
*/ */
int burn_disc_get_formats(struct burn_drive *drive, int *status, off_t *size, int burn_disc_get_formats(struct burn_drive *drive, int *status, off_t *size,
unsigned *bl_sas, int *num_formats); unsigned *bl_sas, int *num_formats);
/* ts A70112 */
/** Inquire parameters of an available media format. /** Inquire parameters of an available media format.
@param drive The drive with the disc to format. @param drive The drive with the disc to format.
@param index The index of the format item. Beginning with 0 up to reply @param index The index of the format item. Beginning with 0 up to reply
@@ -1244,10 +1286,12 @@ int burn_disc_get_formats(struct burn_drive *drive, int *status, off_t *size,
@param type The format type. See mmc5r03c.pdf, 6.5, 04h FORMAT UNIT. @param type The format type. See mmc5r03c.pdf, 6.5, 04h FORMAT UNIT.
0x00=full, 0x10=CD-RW/DVD-RW full, 0x11=CD-RW/DVD-RW grow, 0x00=full, 0x10=CD-RW/DVD-RW full, 0x11=CD-RW/DVD-RW grow,
0x15=DVD-RW quick, 0x13=DVD-RW quick grow, 0x15=DVD-RW quick, 0x13=DVD-RW quick grow,
0x26=DVD+RW background 0x26=DVD+RW background, 0x30=BD-RE with spare areas,
0x31=BD-RE without spare areas
@param size The maximum size in bytes achievable with this format. @param size The maximum size in bytes achievable with this format.
@param tdp Type Dependent Parameter. See mmc5r03c.pdf. @param tdp Type Dependent Parameter. See mmc5r03c.pdf.
@return 1 reply is valid , <=0 failure @return 1 reply is valid , <=0 failure
@since 0.3.0
*/ */
int burn_disc_get_format_descr(struct burn_drive *drive, int index, int burn_disc_get_format_descr(struct burn_drive *drive, int index,
int *type, off_t *size, unsigned *tdp); int *type, off_t *size, unsigned *tdp);
@@ -1266,6 +1310,7 @@ void burn_disc_read(struct burn_drive *drive, const struct burn_read_opts *o);
/* ts A70222 */ /* ts A70222 */
/* @since 0.3.4 */
/** The length of a rejection reasons string for burn_precheck_write() and /** The length of a rejection reasons string for burn_precheck_write() and
burn_write_opts_auto_write_type() . burn_write_opts_auto_write_type() .
*/ */
@@ -1281,6 +1326,7 @@ void burn_disc_read(struct burn_drive *drive, const struct burn_read_opts *o);
@param reasons Eventually returns a list of rejection reason statements @param reasons Eventually returns a list of rejection reason statements
@param silent 1= do not issue error messages , 0= report problems @param silent 1= do not issue error messages , 0= report problems
@return 1 ok, -1= no recordable media detected, 0= other failure @return 1 ok, -1= no recordable media detected, 0= other failure
@since 0.3.4
*/ */
int burn_precheck_write(struct burn_write_opts *o, struct burn_disc *disc, int burn_precheck_write(struct burn_write_opts *o, struct burn_disc *disc,
char reasons[BURN_REASONS_LEN], int silent); char reasons[BURN_REASONS_LEN], int silent);
@@ -1314,6 +1360,7 @@ void burn_drive_cancel(struct burn_drive *drive);
during write, a call to burn_drive_cancel() by the application thread. during write, a call to burn_drive_cancel() by the application thread.
@param d The drive to inquire. @param d The drive to inquire.
@return 1=burn seems to have went well, 0=burn failed @return 1=burn seems to have went well, 0=burn failed
@since 0.2.6
*/ */
int burn_drive_wrote_well(struct burn_drive *d); int burn_drive_wrote_well(struct burn_drive *d);
@@ -1430,6 +1477,7 @@ void burn_track_define_data(struct burn_track *t, int offset, int tail,
@param t The track to change @param t The track to change
@param swap_source_bytes 0=do not swap, 1=swap byte pairs @param swap_source_bytes 0=do not swap, 1=swap byte pairs
@return 1=success , 0=unacceptable value @return 1=success , 0=unacceptable value
@since 0.2.6
*/ */
int burn_track_set_byte_swap(struct burn_track *t, int swap_source_bytes); int burn_track_set_byte_swap(struct burn_track *t, int swap_source_bytes);
@@ -1483,6 +1531,7 @@ enum burn_source_status burn_track_set_source(struct burn_track *t,
@param t The track to change @param t The track to change
@param size The size to set @param size The size to set
@return 0=failure 1=sucess @return 0=failure 1=sucess
@since 0.3.4
*/ */
int burn_track_set_default_size(struct burn_track *t, off_t size); int burn_track_set_default_size(struct burn_track *t, off_t size);
@@ -1542,6 +1591,7 @@ struct burn_source *burn_fd_source_new(int datafd, int subfd, off_t size);
to be disposed by calling burn_source_free() for each. to be disposed by calling burn_source_free() for each.
inp can be freed immediately, the returned fifo may be inp can be freed immediately, the returned fifo may be
kept as handle for burn_fifo_inquire_status(). kept as handle for burn_fifo_inquire_status().
@since 0.4.0
*/ */
struct burn_source *burn_fifo_source_new(struct burn_source *inp, struct burn_source *burn_fifo_source_new(struct burn_source *inp,
int chunksize, int chunks, int flag); int chunksize, int chunks, int flag);
@@ -1563,17 +1613,43 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
5="abandoned" : consumption has ended prematurely 5="abandoned" : consumption has ended prematurely
6="ended" : consumption has ended without input error 6="ended" : consumption has ended without input error
7="aborted" : consumption has ended after input error 7="aborted" : consumption has ended after input error
@since 0.4.0
*/ */
int burn_fifo_inquire_status(struct burn_source *fifo, int *size, int burn_fifo_inquire_status(struct burn_source *fifo, int *size,
int *free_bytes, char **status_text); int *free_bytes, char **status_text);
/* ts A80713 */
/** Obtain a preview of the first input data of a fifo which was created
by burn_fifo_source_new(). The data will later be delivered normally to
the consumer track of the fifo.
bufsize may not be larger than the fifo size (chunk_size * chunks).
This call will succeed only if data consumption by the track has not
started yet, i.e. best before the call to burn_disc_write().
It will start the worker thread of the fifo with the expectable side
effects on the external data source. Then it waits either until enough
data have arrived or until it becomes clear that this will not happen.
The call may be repeated with increased bufsize. It will always yield
the bytes beginning from the first one in the fifo.
@param fifo The fifo object to inquire
@param buf Pointer to memory of at least bufsize bytes where to
deliver the peeked data
@param bufsize Number of bytes to peek from the start of the fifo data
@param flag Bitfield for control purposes (unused yet, submit 0).
@return <0 on severe error, 0 if not enough data, 1 if bufsize bytes read
@since 0.5.0
*/
int burn_fifo_peek_data(struct burn_source *source, char *buf, int bufsize,
int flag);
/* ts A70328 */ /* ts A70328 */
/** Sets a fixed track size after the data source object has already been /** Sets a fixed track size after the data source object has already been
created. created.
@param t The track to operate on @param t The track to operate on
@param size the number of bytes to use as track size @param size the number of bytes to use as track size
@return <=0 indicates failure , >0 success @return <=0 indicates failure , >0 success
@since 0.3.6
*/ */
int burn_track_set_size(struct burn_track *t, off_t size); int burn_track_set_size(struct burn_track *t, off_t size);
@@ -1586,7 +1662,12 @@ int burn_track_get_sectors(struct burn_track *);
/* ts A61101 */ /* ts A61101 */
/** Tells how many source bytes have been read and how many data bytes have /** Tells how many source bytes have been read and how many data bytes have
been written by the track during burn */ been written by the track during burn.
@param t The track to inquire
@param read_bytes Number of bytes read from the track source
@param written_bytes Number of bytes written to track
@since 0.2.6
*/
int burn_track_get_counters(struct burn_track *t, int burn_track_get_counters(struct burn_track *t,
off_t *read_bytes, off_t *written_bytes); off_t *read_bytes, off_t *written_bytes);
@@ -1631,6 +1712,7 @@ void burn_drive_set_speed(struct burn_drive *d, int read, int write);
@param min_percent Minimum of desired buffer oscillation: 25 to 100 @param min_percent Minimum of desired buffer oscillation: 25 to 100
@param max_percent Maximum of desired buffer oscillation: 25 to 100 @param max_percent Maximum of desired buffer oscillation: 25 to 100
@return 1=success , 0=failure @return 1=success , 0=failure
@since 0.3.8
*/ */
int burn_drive_set_buffer_waiting(struct burn_drive *d, int enable, int burn_drive_set_buffer_waiting(struct burn_drive *d, int enable,
int min_usec, int max_usec, int timeout_sec, int min_usec, int max_usec, int timeout_sec,
@@ -1668,6 +1750,7 @@ int burn_write_opts_set_write_type(struct burn_write_opts *opts,
bit1= do not issue error messages via burn_msgs queue bit1= do not issue error messages via burn_msgs queue
(is automatically set with bit0) (is automatically set with bit0)
@return Chosen write type. BURN_WRITE_NONE on failure. @return Chosen write type. BURN_WRITE_NONE on failure.
@since 0.3.2
*/ */
enum burn_write_types burn_write_opts_auto_write_type( enum burn_write_types burn_write_opts_auto_write_type(
struct burn_write_opts *opts, struct burn_disc *disc, struct burn_write_opts *opts, struct burn_disc *disc,
@@ -1732,6 +1815,7 @@ void burn_write_opts_set_mediacatalog(struct burn_write_opts *opts, unsigned cha
being the last one and thus creating a BURN_DISC_APPENDABLE media. being the last one and thus creating a BURN_DISC_APPENDABLE media.
@param opts The option object to be manipulated @param opts The option object to be manipulated
@param multi 1=media will be appendable, 0=media will be closed (default) @param multi 1=media will be appendable, 0=media will be closed (default)
@since 0.2.6
*/ */
void burn_write_opts_set_multi(struct burn_write_opts *opts, int multi); void burn_write_opts_set_multi(struct burn_write_opts *opts, int multi);
@@ -1748,6 +1832,7 @@ void burn_write_opts_set_multi(struct burn_write_opts *opts, int multi);
.start_range_low , .start_range_high . .start_range_low , .start_range_high .
@param opts The write opts to change @param opts The write opts to change
@param value The address in bytes (-1 = start at default address) @param value The address in bytes (-1 = start at default address)
@since 0.3.0
*/ */
void burn_write_opts_set_start_byte(struct burn_write_opts *opts, off_t value); void burn_write_opts_set_start_byte(struct burn_write_opts *opts, off_t value);
@@ -1760,6 +1845,7 @@ void burn_write_opts_set_start_byte(struct burn_write_opts *opts, off_t value);
by the last track of the last session. by the last track of the last session.
@param opts The write opts to change @param opts The write opts to change
@param fill_up_media If 1 : fill up by last track, if 0 = do not fill up @param fill_up_media If 1 : fill up by last track, if 0 = do not fill up
@since 0.3.4
*/ */
void burn_write_opts_set_fillup(struct burn_write_opts *opts, void burn_write_opts_set_fillup(struct burn_write_opts *opts,
int fill_up_media); int fill_up_media);
@@ -1771,6 +1857,7 @@ void burn_write_opts_set_fillup(struct burn_write_opts *opts,
- the check whether the media profile supports simulated burning - the check whether the media profile supports simulated burning
@param opts The write opts to change @param opts The write opts to change
@param use_force 1=ignore above checks, 0=refuse work on failed check @param use_force 1=ignore above checks, 0=refuse work on failed check
@since 0.3.4
*/ */
void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force); void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force);
@@ -1781,9 +1868,9 @@ void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force);
slowdown to half nominal speed. But if it speeds up writing then it also slowdown to half nominal speed. But if it speeds up writing then it also
disables error management and correction. Weigh your priorities. disables error management and correction. Weigh your priorities.
This only affects the write operations of burn_disc_write(). This only affects the write operations of burn_disc_write().
@since 0.4.6
@param opts The write opts to change @param opts The write opts to change
@param value 0=use 2Ah WRITE10, 1=use AAh WRITE12 with Streaming bit @param value 0=use 2Ah WRITE10, 1=use AAh WRITE12 with Streaming bit
@since 0.4.6
*/ */
void burn_write_opts_set_stream_recording(struct burn_write_opts *opts, void burn_write_opts_set_stream_recording(struct burn_write_opts *opts,
int value); int value);
@@ -1859,6 +1946,7 @@ int burn_drive_get_write_speed(struct burn_drive *d);
again by call burn_drive_grab() and again by call burn_disc_read_atip(). again by call burn_drive_grab() and again by call burn_disc_read_atip().
@param d Drive to query @param d Drive to query
@return Minimum write speed in K/s @return Minimum write speed in K/s
@since 0.2.6
*/ */
int burn_drive_get_min_write_speed(struct burn_drive *d); int burn_drive_get_min_write_speed(struct burn_drive *d);
@@ -1881,6 +1969,7 @@ int burn_drive_get_read_speed(struct burn_drive *d);
@param d Drive to query @param d Drive to query
@param speed_list The copy. If empty, *speed_list gets returned as NULL. @param speed_list The copy. If empty, *speed_list gets returned as NULL.
@return 1=success , 0=list empty , <0 severe error @return 1=success , 0=list empty , <0 severe error
@since 0.3.0
*/ */
int burn_drive_get_speedlist(struct burn_drive *d, int burn_drive_get_speedlist(struct burn_drive *d,
struct burn_speed_descriptor **speed_list); struct burn_speed_descriptor **speed_list);
@@ -1900,6 +1989,7 @@ int burn_drive_get_speedlist(struct burn_drive *d,
bit1= look for any source type (else look for source==2 first bit1= look for any source type (else look for source==2 first
and for any other source type only with CD media) and for any other source type only with CD media)
@return >0 indicates a valid best_descr, 0 = no valid best_descr @return >0 indicates a valid best_descr, 0 = no valid best_descr
@since 0.3.8
*/ */
int burn_drive_get_best_speed(struct burn_drive *d, int speed_goal, int burn_drive_get_best_speed(struct burn_drive *d, int speed_goal,
struct burn_speed_descriptor **best_descr, int flag); struct burn_speed_descriptor **best_descr, int flag);
@@ -1910,11 +2000,13 @@ int burn_drive_get_best_speed(struct burn_drive *d, int speed_goal,
burn_drive_get_speedlist(). burn_drive_get_speedlist().
@param speed_list The list copy. *speed_list gets set to NULL. @param speed_list The list copy. *speed_list gets set to NULL.
@return 1=list disposed , 0= *speedlist was already NULL @return 1=list disposed , 0= *speedlist was already NULL
@since 0.3.0
*/ */
int burn_drive_free_speedlist(struct burn_speed_descriptor **speed_list); int burn_drive_free_speedlist(struct burn_speed_descriptor **speed_list);
/* ts A70203 */ /* ts A70203 */
/* @since 0.3.2 */
/** The reply structure for burn_disc_get_multi_caps() /** The reply structure for burn_disc_get_multi_caps()
*/ */
struct burn_multi_caps { struct burn_multi_caps {
@@ -1992,7 +2084,8 @@ struct burn_multi_caps {
/** Wether the current profile indicates CD media. 1=yes, 0=no */ /** Wether the current profile indicates CD media. 1=yes, 0=no */
int current_is_cd_profile; int current_is_cd_profile;
/* ts A70528, added to version 0.3.7 */ /* ts A70528 */
/* @since 0.3.8 */
/** Wether the current profile is able to perform simulated write */ /** Wether the current profile is able to perform simulated write */
int might_simulate; int might_simulate;
}; };
@@ -2009,6 +2102,7 @@ struct burn_multi_caps {
@param caps returns the info structure @param caps returns the info structure
@param flag Bitfield for control purposes (unused yet, submit 0) @param flag Bitfield for control purposes (unused yet, submit 0)
@return < 0 : error , 0 : writing seems impossible , 1 : writing possible @return < 0 : error , 0 : writing seems impossible , 1 : writing possible
@since 0.3.2
*/ */
int burn_disc_get_multi_caps(struct burn_drive *d, enum burn_write_types wt, int burn_disc_get_multi_caps(struct burn_drive *d, enum burn_write_types wt,
struct burn_multi_caps **caps, int flag); struct burn_multi_caps **caps, int flag);
@@ -2017,6 +2111,7 @@ int burn_disc_get_multi_caps(struct burn_drive *d, enum burn_write_types wt,
burn_disc_get_multi_caps(). The pointer *caps gets set to NULL. burn_disc_get_multi_caps(). The pointer *caps gets set to NULL.
@param caps the info structure to dispose (note: pointer to pointer) @param caps the info structure to dispose (note: pointer to pointer)
@return 0 : *caps was already NULL, 1 : memory object was disposed @return 0 : *caps was already NULL, 1 : memory object was disposed
@since 0.3.2
*/ */
int burn_disc_free_multi_caps(struct burn_multi_caps **caps); int burn_disc_free_multi_caps(struct burn_multi_caps **caps);
@@ -2079,6 +2174,7 @@ void burn_version(int *major, int *minor, int *micro);
/* ts A80129 */ /* ts A80129 */
/* @since 0.4.4 */
/** These three release version numbers tell the revision of this header file /** 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 and of the API it describes. They are memorized by applications at build
time. time.
@@ -2096,8 +2192,8 @@ void burn_version(int *major, int *minor, int *micro);
*/ */
#define burn_header_version_major 0 #define burn_header_version_major 0
#define burn_header_version_minor 4 #define burn_header_version_minor 5
#define burn_header_version_micro 5 #define burn_header_version_micro 0
/** Note: /** Note:
Above version numbers are also recorded in configure.ac because libtool Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time. wants them as parameters at build time.
@@ -2159,12 +2255,13 @@ These two advises are mutually exclusive.
to stderr. Default: "FATAL". to stderr. Default: "FATAL".
@param print_id A text prefix to be printed before the message. @param print_id A text prefix to be printed before the message.
@return >0 for success, <=0 for error @return >0 for success, <=0 for error
@since 0.2.6
*/ */
int burn_msgs_set_severities(char *queue_severity, int burn_msgs_set_severities(char *queue_severity,
char *print_severity, char *print_id); char *print_severity, char *print_id);
/* ts A60924 : ticket 74 */ /* ts A60924 : ticket 74 */
/* @since 0.2.6 */
#define BURN_MSGS_MESSAGE_LEN 4096 #define BURN_MSGS_MESSAGE_LEN 4096
/** Obtain the oldest pending libburn message from the queue which has at /** Obtain the oldest pending libburn message from the queue which has at
@@ -2182,6 +2279,7 @@ int burn_msgs_set_severities(char *queue_severity,
@param severity Will become the severity related to the message and @param severity Will become the severity related to the message and
should provide at least 80 bytes. should provide at least 80 bytes.
@return 1 if a matching item was found, 0 if not, <0 for severe errors @return 1 if a matching item was found, 0 if not, <0 for severe errors
@since 0.2.6
*/ */
int burn_msgs_obtain(char *minimum_severity, int burn_msgs_obtain(char *minimum_severity,
int *error_code, char msg_text[], int *os_errno, int *error_code, char msg_text[], int *os_errno,
@@ -2204,6 +2302,7 @@ int burn_msgs_obtain(char *minimum_severity,
Submit NULL if the message is not specific to a Submit NULL if the message is not specific to a
particular drive object. particular drive object.
@return 1 if message was delivered, <=0 if failure @return 1 if message was delivered, <=0 if failure
@since 0.4.0
*/ */
int burn_msgs_submit(int error_code, char msg_text[], int os_errno, int burn_msgs_submit(int error_code, char msg_text[], int os_errno,
char severity[], struct burn_drive *d); char severity[], struct burn_drive *d);
@@ -2216,6 +2315,7 @@ int burn_msgs_submit(int error_code, char msg_text[], int os_errno,
@param severity_number The rank number: the higher, the more severe. @param severity_number The rank number: the higher, the more severe.
@param flag Bitfield for control purposes (unused yet, submit 0) @param flag Bitfield for control purposes (unused yet, submit 0)
@return >0 success, <=0 failure @return >0 success, <=0 failure
@since 0.4.0
*/ */
int burn_text_to_sev(char *severity_name, int *severity_number, int flag); int burn_text_to_sev(char *severity_name, int *severity_number, int flag);
@@ -2226,6 +2326,7 @@ int burn_text_to_sev(char *severity_name, int *severity_number, int flag);
@param severity_number The rank number: the higher, the more severe. @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 severity_name A name as with burn_msgs_submit(), e.g. "SORRY".
@param flag Bitfield for control purposes (unused yet, submit 0) @param flag Bitfield for control purposes (unused yet, submit 0)
@since 0.4.4
*/ */
int burn_sev_to_text(int severity_number, char **severity_name, int flag); int burn_sev_to_text(int severity_number, char **severity_name, int flag);
@@ -2237,11 +2338,13 @@ int burn_sev_to_text(int severity_number, char **severity_name, int flag);
See also: libisofs, API function iso_get_messenger(). See also: libisofs, API function iso_get_messenger().
@param messenger The foreign but compatible message handle. @param messenger The foreign but compatible message handle.
@return 1 : success, <=0 : failure @return 1 : success, <=0 : failure
@since 0.4.0
*/ */
int burn_set_messenger(void *messenger); int burn_set_messenger(void *messenger);
/* ts A61002 */ /* ts A61002 */
/* @since 0.2.6 */
/** The prototype of a handler function suitable for burn_set_abort_handling(). /** The prototype of a handler function suitable for burn_set_abort_handling().
Such a function has to return -2 if it does not want the process to Such a function has to return -2 if it does not want the process to
exit with value 1. exit with value 1.
@@ -2260,6 +2363,7 @@ typedef int (*burn_abort_handler_t)(void *handle, int signum, int flag);
Arguments (text, NULL, 0) activate the builtin abort handler. It will Arguments (text, NULL, 0) activate the builtin abort handler. It will
eventually call burn_abort() and then perform exit(1). If text is not NULL eventually call burn_abort() and then perform exit(1). If text is not NULL
then it is used as prefix for pacifier messages of burn_abort_pacifier(). then it is used as prefix for pacifier messages of burn_abort_pacifier().
@since 0.2.6
*/ */
void burn_set_signal_handling(void *handle, burn_abort_handler_t handler, void burn_set_signal_handling(void *handle, burn_abort_handler_t handler,
int mode); int mode);
@@ -2292,6 +2396,7 @@ void burn_set_signal_handling(void *handle, burn_abort_handler_t handler,
@param flag Bitfield for control purposes: @param flag Bitfield for control purposes:
bit0 = flush the drive buffer after eventual writing bit0 = flush the drive buffer after eventual writing
@return 1=sucessful , <=0 : number of transfered bytes * -1 @return 1=sucessful , <=0 : number of transfered bytes * -1
@since 0.4.0
*/ */
int burn_random_access_write(struct burn_drive *d, off_t byte_address, int burn_random_access_write(struct burn_drive *d, off_t byte_address,
char *data, off_t data_count, int flag); char *data, off_t data_count, int flag);
@@ -2316,6 +2421,7 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address,
bit0= - reserved - bit0= - reserved -
bit1= do not submit error message if read error bit1= do not submit error message if read error
@return 1=sucessful , <=0 an error occured @return 1=sucessful , <=0 an error occured
@since 0.4.0
*/ */
int burn_read_data(struct burn_drive *d, off_t byte_address, int burn_read_data(struct burn_drive *d, off_t byte_address,
char data[], off_t data_size, off_t *data_count, int flag); char data[], off_t data_size, off_t *data_count, int flag);
@@ -2329,6 +2435,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
1= real MMC drive 1= real MMC drive
2= stdio-drive, random access, read-write 2= stdio-drive, random access, read-write
3= stdio-drive, sequential, write-only 3= stdio-drive, sequential, write-only
@since 0.4.0
*/ */
int burn_drive_get_drive_role(struct burn_drive *d); int burn_drive_get_drive_role(struct burn_drive *d);
@@ -2355,6 +2462,7 @@ int burn_drive_get_drive_role(struct burn_drive *d);
prefix "stdio:". prefix "stdio:".
@return 1= adr2 leads to d1 , 0= adr2 seems not to lead to d1, @return 1= adr2 leads to d1 , 0= adr2 seems not to lead to d1,
-1 = adr2 is bad -1 = adr2 is bad
@since 0.4.0
*/ */
int burn_drive_equals_adr(struct burn_drive *d1, char *adr2, int drive_role2); int burn_drive_equals_adr(struct burn_drive *d1, char *adr2, int drive_role2);

View File

@@ -524,6 +524,11 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
0x00020157 (FATAL,HIGH) = burn_source is not a fifo object 0x00020157 (FATAL,HIGH) = burn_source is not a fifo object
0x00020158 (DEBUG,LOW) = Reporting thread disposal precautions 0x00020158 (DEBUG,LOW) = Reporting thread disposal precautions
0x00020159 (DEBUG,HIGH) = TOC Format 0 returns inconsistent data 0x00020159 (DEBUG,HIGH) = TOC Format 0 returns inconsistent data
0x0002015a (NOTE,HIGH) = Could not examine busy device
0x0002015b (HINT,HIGH) = Busy '...' seems to be a hard disk, as '...1' exists
0x0002015c (FAILURE,HIGH) = Fifo size is smaller than desired peek buffer
0x0002015d (FAILURE,HIGH) = Fifo input ended short of desired peek buffer size
0x0002015e (FATAL,HIGH) = Fifo is already under consumption when peeking
libdax_audioxtr: libdax_audioxtr:
0x00020200 (SORRY,HIGH) = Cannot open audio source file 0x00020200 (SORRY,HIGH) = Cannot open audio source file

View File

@@ -260,6 +260,37 @@ static void sg_select_device_family(void)
} }
/* ts A80701 */
/* This cares for the case that no /dev/srNN but only /dev/scdNN exists.
A theoretical case which has its complement in SuSE 10.2 having
/dev/sr but not /dev/scd.
*/
static int sg_exchange_scd_for_sr(char *fname, int flag)
{
struct stat stbuf;
char scd[17], msg[160];
if (burn_sg_use_family != 0 || strncmp(fname, "/dev/sr", 7)!=0 ||
strlen(fname)>9 || strlen(fname)<8)
return 2;
if (fname[7] < '0' || fname[7] > '9')
return 2;
if (fname [8] != 0 && (fname[7] < '0' || fname[7] > '9'))
return 2;
if (stat(fname, &stbuf) != -1)
return 2;
strcpy(scd, "/dev/scd");
strcpy(scd + 8, fname + 7);
if (stat(scd, &stbuf) == -1)
return 2;
sprintf(msg, "%s substitutes for non-existent %s", scd, fname);
libdax_msgs_submit(libdax_messenger, -1, 0x00000002,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, msg, 0, 0);
strcpy(fname, scd);
return 1;
}
static int sgio_test(int fd) static int sgio_test(int fd)
{ {
unsigned char test_ops[] = { 0, 0, 0, 0, 0, 0 }; unsigned char test_ops[] = { 0, 0, 0, 0, 0, 0 };
@@ -279,6 +310,33 @@ static int sgio_test(int fd)
static int sg_handle_busy_device(char *fname, int os_errno) static int sg_handle_busy_device(char *fname, int os_errno)
{ {
char msg[4096]; char msg[4096];
struct stat stbuf;
int looks_like_hd= 0, fd, ret;
/* ts A80713 :
check existence of /dev/hdX1 as hint for hard disk rather than CD
Hint by Giulio Orsero: check /proc/ide/hdX/media for "disk"
*/
if (strncmp(fname, "/dev/hd", 7)==0) {
sprintf(msg, "%s1", fname);
if (stat(msg, &stbuf) != -1)
looks_like_hd= 1;
sprintf(msg, "/proc/ide/hd%c/media", fname[7]);
fd = open(msg, O_RDONLY);
if (fd != -1) {
ret = read(fd, msg, 10);
if (ret < 0)
ret = 0;
msg[ret]= 0;
close(fd);
if (strncmp(msg, "disk\n", 5) == 0 ||
strcmp(msg, "disk") == 0)
looks_like_hd= 2;
else if (strncmp(msg, "cdrom\n", 6) == 0 ||
strcmp(msg, "cdrom") == 0)
looks_like_hd= 0;
}
}
/* ts A60814 : i saw no way to do this more nicely */ /* ts A60814 : i saw no way to do this more nicely */
if (burn_sg_open_abort_busy) { if (burn_sg_open_abort_busy) {
@@ -292,10 +350,26 @@ static int sg_handle_busy_device(char *fname, int os_errno)
} }
/* ts A60924 : now reporting to libdax_msgs */ /* ts A60924 : now reporting to libdax_msgs */
if (looks_like_hd == 2) { /* is surely hard disk */
;
} else if (looks_like_hd) {
sprintf(msg, "Could not examine busy device '%s'", fname);
libdax_msgs_submit(libdax_messenger, -1, 0x0002015a,
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_LOW,
msg, os_errno, 0);
sprintf(msg,
"Busy '%s' seems to be a hard disk, as '%s1' exists. But better check.",
fname, fname);
libdax_msgs_submit(libdax_messenger, -1, 0x0002015b,
LIBDAX_MSGS_SEV_HINT, LIBDAX_MSGS_PRIO_LOW,
msg, 0, 0);
} else {
sprintf(msg, "Cannot open busy device '%s'", fname); sprintf(msg, "Cannot open busy device '%s'", fname);
libdax_msgs_submit(libdax_messenger, -1, 0x00020001, libdax_msgs_submit(libdax_messenger, -1, 0x00020001,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_LOW, LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_LOW,
msg, os_errno, 0); msg, os_errno, 0);
}
return 1; return 1;
} }
@@ -646,7 +720,7 @@ static void sg_enumerate(void)
int i, fd, sibling_fds[BURN_OS_SG_MAX_SIBLINGS], sibling_count= 0, ret; int i, fd, sibling_fds[BURN_OS_SG_MAX_SIBLINGS], sibling_count= 0, ret;
int sid_ret = 0; int sid_ret = 0;
int bus_no= -1, host_no= -1, channel_no= -1, target_no= -1, lun_no= -1; int bus_no= -1, host_no= -1, channel_no= -1, target_no= -1, lun_no= -1;
char fname[10]; char fname[17];
char sibling_fnames[BURN_OS_SG_MAX_SIBLINGS][BURN_OS_SG_MAX_NAMELEN]; char sibling_fnames[BURN_OS_SG_MAX_SIBLINGS][BURN_OS_SG_MAX_NAMELEN];
sg_select_device_family(); sg_select_device_family();
@@ -661,6 +735,9 @@ static void sg_enumerate(void)
for (i = 0; i < 32; i++) { for (i = 0; i < 32; i++) {
sprintf(fname, linux_sg_device_family, i); sprintf(fname, linux_sg_device_family, i);
/* ts A80702 */
sg_exchange_scd_for_sr(fname, 0);
if (linux_sg_enumerate_debug) if (linux_sg_enumerate_debug)
fprintf(stderr, "libburn_debug: %s : ", fname); fprintf(stderr, "libburn_debug: %s : ", fname);
@@ -893,6 +970,10 @@ int sg_give_next_adr(burn_drive_enumerator_t *idx,
if (adr_size < 10) if (adr_size < 10)
return -1; return -1;
sprintf(adr, linux_sg_device_family, *idx); sprintf(adr, linux_sg_device_family, *idx);
/* ts A80702 */
sg_exchange_scd_for_sr(adr, 0);
return 1; return 1;
next_ata:; next_ata:;
baseno += sg_limit; baseno += sg_limit;
@@ -1378,7 +1459,6 @@ int sg_is_enumerable_adr(char *adr)
sg_give_next_adr(&idx, fname, sizeof(fname), -1); sg_give_next_adr(&idx, fname, sizeof(fname), -1);
return 1; return 1;
} }
} }
sg_give_next_adr(&idx, fname, sizeof(fname), -1); sg_give_next_adr(&idx, fname, sizeof(fname), -1);
return(0); return(0);

View File

@@ -1419,7 +1419,6 @@ int burn_disc_setup_dvd_plus_rw(struct burn_write_opts *o,
{ {
struct burn_drive *d = o->drive; struct burn_drive *d = o->drive;
int ret; int ret;
char msg[160];
if (d->bg_format_status==0 || d->bg_format_status==1) { if (d->bg_format_status==0 || d->bg_format_status==1) {
d->busy = BURN_DRIVE_FORMATTING; d->busy = BURN_DRIVE_FORMATTING;
@@ -1430,16 +1429,6 @@ int burn_disc_setup_dvd_plus_rw(struct burn_write_opts *o,
d->busy = BURN_DRIVE_WRITING; d->busy = BURN_DRIVE_WRITING;
d->needs_close_session = 1; d->needs_close_session = 1;
} }
d->nwa = 0;
if (o->start_byte >= 0) {
d->nwa = o->start_byte / 2048;
sprintf(msg, "Write start address is %d * 2048", d->nwa);
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020127,
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH,
msg, 0, 0);
}
/* >>> perform OPC if needed */; /* >>> perform OPC if needed */;
@@ -1559,6 +1548,16 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
msg, 0, 0); msg, 0, 0);
goto early_failure; goto early_failure;
} }
d->nwa = 0;
if (o->start_byte >= 0) {
d->nwa = o->start_byte / 2048;
sprintf(msg, "Write start address is %d * 2048",
d->nwa);
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020127,
LIBDAX_MSGS_SEV_NOTE, LIBDAX_MSGS_PRIO_HIGH,
msg, 0, 0);
}
o->obs_pad = 0; /* no filling-up of track's last 32k buffer */ o->obs_pad = 0; /* no filling-up of track's last 32k buffer */
if (d->current_profile == 0x43) /* BD-RE */ if (d->current_profile == 0x43) /* BD-RE */
o->obs = Libburn_bd_re_obS; o->obs = Libburn_bd_re_obS;