Compare commits
22 Commits
ZeroFourSi
...
ZeroFiveZe
Author | SHA1 | Date | |
---|---|---|---|
a6fc6b43f9 | |||
0c6fde1ee8 | |||
73503c9bb1 | |||
775b377b21 | |||
76e85e600c | |||
9d48bb6892 | |||
38f0399fff | |||
39198ff8cb | |||
67ca4a251a | |||
b1c6953b61 | |||
eb95d89272 | |||
548051e53f | |||
a72b38c116 | |||
a67aa2ccee | |||
2fb5ea8def | |||
55061cb7cf | |||
4b3ec06cc4 | |||
ad6bd91b21 | |||
0e2aaa2d59 | |||
4244a3c141 | |||
e4d30e4762 | |||
2856e9c984 |
@ -101,9 +101,9 @@ test_structest_CPPFLAGS = -Ilibburn
|
||||
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||
test_structest_SOURCES = test/structest.c
|
||||
|
||||
## cdrskin construction site - ts A60816 - A80408
|
||||
## cdrskin construction site - ts A60816 - A80716
|
||||
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)
|
||||
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
||||
|
29
README
29
README
@ -39,11 +39,15 @@ into its toplevel directory (here: "libburn") and execute
|
||||
./configure --prefix=/usr
|
||||
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:
|
||||
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
|
||||
launchpad.net :
|
||||
bzr branch lp:libisofs
|
||||
@ -270,12 +274,33 @@ Project history as far as known to me:
|
||||
exposed in the API to allow future development.
|
||||
|
||||
- 29th Apr 2008 libisoburn-0.1.4 was made more efficient with reading of
|
||||
image tree nodes. It now depends on libisofs-0.6.4 and libburn-0.4.4.
|
||||
image tree nodes. It now depends on libisofs-0.6.4 and libburn-0.4.4.
|
||||
xorriso makes use of new libisofs features by performing incremental
|
||||
updates of directory trees and by cutting oversized data files into
|
||||
pieces. A primitive single session emulation of cdrcord and mkisofs is
|
||||
provided.
|
||||
|
||||
- 10th May 2008 libburn-0.4.6 supports formatting and writing of BD-RE,
|
||||
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
|
||||
|
@ -4,7 +4,7 @@
|
||||
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
|
||||
Integrated sub project of libburnia-project.org but also published via:
|
||||
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
||||
http://scdbackup.sourceforge.net/cdrskin-0.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.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
@ -20,10 +20,10 @@ By using this software you agree to the disclaimer at the end of this text
|
||||
|
||||
Compilation, First Glimpse, Installation
|
||||
|
||||
Obtain cdrskin-0.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
|
||||
cd cdrskin-0.4.5
|
||||
tar xzf cdrskin-0.5.0.pl00.tar.gz
|
||||
cd cdrskin-0.5.0
|
||||
|
||||
Within that directory execute:
|
||||
|
||||
@ -53,9 +53,9 @@ try whether command
|
||||
ldconfig
|
||||
makes it accessible. With the statically linked binary this should not matter.
|
||||
|
||||
You may as well do the few necessary actions manually. If cdrskin was
|
||||
already installed by a previous version, or by "make install" in the course
|
||||
of this installation, then find out where:
|
||||
With that static binary you may as well do the few necessary actions manually.
|
||||
If cdrskin was already installed by a previous version, or by "make install"
|
||||
in the course of this installation, then find out where:
|
||||
which cdrskin
|
||||
Copy your standalone binary to exactly the address which you get as reply.
|
||||
E.g.:
|
||||
@ -139,8 +139,8 @@ Obtain some info about the drive
|
||||
Obtain some info about the drive and the inserted media
|
||||
cdrskin dev=0,1,0 -atip -v
|
||||
|
||||
Make used CD-RW or used unformatted DVD-RW writeable again
|
||||
cdrskin -v dev=0,1,0 blank=fast -eject
|
||||
Prepare CD-RW or DVD-RW for re-use, DVD-RAM or BD-RE for first use
|
||||
cdrskin -v dev=/dev/sg1 blank=as_needed -eject
|
||||
|
||||
Format DVD-RW to avoid need for blanking before re-use
|
||||
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]
|
||||
cdrskin dev=/dev/hdc padsize=300k -multi 1.iso
|
||||
cdrskin dev=/dev/hdc padsize=300k -multi -tao 2.iso
|
||||
cdrskin dev=/dev/hdc padsize=300k -multi -tao 3.iso
|
||||
cdrskin dev=/dev/hdc padsize=300k -tao 4.iso
|
||||
cdrskin dev=/dev/hdc padsize=300k -multi 2.iso
|
||||
cdrskin dev=/dev/hdc padsize=300k -multi 3.iso
|
||||
cdrskin dev=/dev/hdc padsize=300k 4.iso
|
||||
|
||||
Get multi-session info for option -C of program mkisofs:
|
||||
c_values=$(cdrskin dev=/dev/hdc -msinfo 2>/dev/null)
|
||||
mkisofs ... -C "$c_values" ...
|
||||
|
||||
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 -
|
||||
|
||||
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
|
||||
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
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
there is no difference between -sao and -tao. If ever, then -tao will be the
|
||||
mode which preserves the current behavior.
|
||||
Speed is counted in DVD units (i.e. 1x = 1,385,000 bytes/second) or BD units
|
||||
(1x = 4,495,625 bytes/second). Currently there is no difference between -sao
|
||||
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
|
||||
-msinfo and -toc, and makes blank=fast an invalidator for ISO filesystems
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
into an own session, though.
|
||||
DVD+R/DL appear as extra large DVD+R. cdrskin does not allow to set the address
|
||||
of the layer break where ia reading drive might show some delay while switching
|
||||
DVD+R DL appear as extra large DVD+R. cdrskin does not allow to set the address
|
||||
of the layer break where a reading drive might show some delay while switching
|
||||
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
|
||||
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.
|
||||
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
|
||||
damage did not occur in 1.5 years of development.
|
||||
damage did not occur in 2.5 years of development. But one never knows ...
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
|
||||
# My changes are in $changes , mainly in $changes/cdrskin
|
||||
changes="./libburn-release"
|
||||
|
||||
skin_release="0.4.4"
|
||||
skin_release="0.5.0"
|
||||
patch_level=".pl00"
|
||||
skin_rev="$skin_release""$patch_level"
|
||||
|
||||
@ -104,9 +104,9 @@ cdrskin_target="$target"/cdrskin
|
||||
libburn_target="$target"/libburn
|
||||
|
||||
# Create version timestamp
|
||||
timestamp="$(date -u '+%Y.%m.%d.%H%M%S')"
|
||||
echo "$timestamp"
|
||||
echo '#define Cdrskin_timestamP "'"$timestamp"'"' >"$cdrskin_dir"/cdrskin_timestamp.h
|
||||
# timestamp="$(date -u '+%Y.%m.%d.%H%M%S')"
|
||||
# echo "$timestamp"
|
||||
# echo '#define Cdrskin_timestamP "'"$timestamp"'"' >"$cdrskin_dir"/cdrskin_timestamp.h
|
||||
|
||||
# Add the cdrskin files
|
||||
if test -e "$cdrskin_target"
|
@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
|
||||
# My changes are in $changes , mainly in $changes/cdrskin
|
||||
changes="./libburn-develop"
|
||||
|
||||
skin_release="0.4.5"
|
||||
skin_release="0.5.1"
|
||||
patch_level=""
|
||||
skin_rev="$skin_release""$patch_level"
|
||||
|
||||
@ -239,7 +239,7 @@ rm -rf "$target"
|
||||
./"$bintarget_dynamic" -version
|
||||
./"$bintarget_static" -version
|
||||
ls -l "$cdrskin_tarball"
|
||||
ls -l "$bintarget_dynamic"*
|
||||
ls -l "$bintarget_dynamic"
|
||||
ls -l "$bintarget_static"
|
||||
ls -l $(basename "$man_page_html")
|
||||
|
@ -2,7 +2,7 @@
|
||||
.\" First parameter, NAME, should be all caps
|
||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||
.\" other parameters are allowed: see man(7), man(1)
|
||||
.TH CDRSKIN 1 "May 06, 2008"
|
||||
.TH CDRSKIN 1 "May 17, 2008"
|
||||
.\" Please adjust this date whenever revising the manpage.
|
||||
.\"
|
||||
.\" Some roff macros, for reference:
|
||||
@ -1201,11 +1201,9 @@ cdrskin dev=ATA:1,0,0 -v -atip
|
||||
.br
|
||||
cdrskin dev=/dev/hdc -toc
|
||||
.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
|
||||
cdrskin -v dev=/dev/sg1 blank=fast -eject
|
||||
.br
|
||||
cdrskin -v dev=/dev/dvd blank=all -eject
|
||||
cdrskin -v dev=/dev/sg1 blank=as_needed -eject
|
||||
.SS
|
||||
.B Format DVD-RW to avoid need for blanking before re-use:
|
||||
.br
|
||||
@ -1219,7 +1217,7 @@ cdrskin -v dev=/dev/sr0 blank=deformat_sequential
|
||||
.br
|
||||
cdrskin -v dev=/dev/hdc speed=12 fs=8m \\
|
||||
.br
|
||||
-sao -eject padsize=300k my_image.iso
|
||||
blank=as_needed -eject padsize=300k my_image.iso
|
||||
.SS
|
||||
.B Write compressed afio archive on-the-fly (not possible with minimally blanked DVD-RW):
|
||||
.br
|
||||
@ -1227,17 +1225,17 @@ find . | afio -oZ - | \\
|
||||
.br
|
||||
cdrskin -v dev=0,1,0 fs=32m speed=8 \\
|
||||
.br
|
||||
-tao padsize=300k -
|
||||
blank=as_needed padsize=300k -
|
||||
.SS
|
||||
.B Write multi-session to the same CD, DVD-R[W] or DVD+R[/DL]:
|
||||
.br
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 1.iso
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi 1.iso
|
||||
.br
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 2.iso
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi 2.iso
|
||||
.br
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 3.iso
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -multi 3.iso
|
||||
.br
|
||||
cdrskin dev=/dev/hdc -v padsize=300k -tao 4.iso
|
||||
cdrskin dev=/dev/hdc -v padsize=300k 4.iso
|
||||
.SS
|
||||
.B Get multi-session info for option -C of program mkisofs:
|
||||
.br
|
||||
@ -1245,9 +1243,9 @@ c_values=$(cdrskin dev=/dev/hdc -msinfo 2>/dev/null)
|
||||
.br
|
||||
mkisofs ... -C "$c_values" ...
|
||||
.SS
|
||||
.B Inquire free space on media for a -tao -multi run:
|
||||
.B Inquire free space on media for a -multi run:
|
||||
.br
|
||||
x=$(cdrskin dev=/dev/sr0 -tao -multi \\
|
||||
x=$(cdrskin dev=/dev/sr0 -multi \\
|
||||
.br
|
||||
--tell_media_space 2>/dev/null)
|
||||
.br
|
||||
|
@ -7,7 +7,7 @@ A cdrecord compatible command line interface for libburn.
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
Interested users of cdrecord are encouraged to contribute further option
|
||||
@ -88,7 +88,7 @@ or
|
||||
|
||||
/** The official program version */
|
||||
#ifndef Cdrskin_prog_versioN
|
||||
#define Cdrskin_prog_versioN "0.4.5"
|
||||
#define Cdrskin_prog_versioN "0.5.0"
|
||||
#endif
|
||||
|
||||
/** The official libburn interface revision to use.
|
||||
@ -98,10 +98,10 @@ or
|
||||
#define Cdrskin_libburn_majoR 0
|
||||
#endif
|
||||
#ifndef Cdrskin_libburn_minoR
|
||||
#define Cdrskin_libburn_minoR 4
|
||||
#define Cdrskin_libburn_minoR 5
|
||||
#endif
|
||||
#ifndef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_micrO 4
|
||||
#define Cdrskin_libburn_micrO 0
|
||||
#endif
|
||||
|
||||
|
||||
@ -135,46 +135,44 @@ or
|
||||
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
||||
|
||||
|
||||
#ifdef Cdrskin_libburn_0_4_4
|
||||
#define Cdrskin_libburn_versioN "0.4.4"
|
||||
#ifdef Cdrskin_libburn_0_5_0
|
||||
#define Cdrskin_libburn_versioN "0.5.0"
|
||||
#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
|
||||
#define Cdrskin_libburn_versioN "0.4.5"
|
||||
#ifdef Cdrskin_libburn_0_5_1
|
||||
#define Cdrskin_libburn_versioN "0.5.1"
|
||||
#define Cdrskin_libburn_from_pykix_svN 1
|
||||
|
||||
/* Place novelty switch macros here.
|
||||
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_4_5 */
|
||||
#endif /* Cdrskin_libburn_0_5_1 */
|
||||
|
||||
#ifndef Cdrskin_libburn_versioN
|
||||
#define Cdrskin_libburn_0_4_4
|
||||
#define Cdrskin_libburn_versioN "0.4.4"
|
||||
#define Cdrskin_libburn_0_5_0
|
||||
#define Cdrskin_libburn_versioN "0.5.0"
|
||||
#define Cdrskin_libburn_from_pykix_svN 1
|
||||
#endif
|
||||
|
||||
#ifdef Cdrskin_libburn_0_4_4
|
||||
#ifdef Cdrskin_libburn_0_5_0
|
||||
#undef Cdrskin_libburn_majoR
|
||||
#undef Cdrskin_libburn_minoR
|
||||
#undef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_majoR 0
|
||||
#define Cdrskin_libburn_minoR 4
|
||||
#define Cdrskin_libburn_micrO 4
|
||||
#define Cdrskin_libburn_minoR 5
|
||||
#define Cdrskin_libburn_micrO 0
|
||||
#endif
|
||||
#ifdef Cdrskin_libburn_0_4_5
|
||||
#ifdef Cdrskin_libburn_0_5_1
|
||||
#undef Cdrskin_libburn_majoR
|
||||
#undef Cdrskin_libburn_minoR
|
||||
#undef Cdrskin_libburn_micrO
|
||||
#define Cdrskin_libburn_majoR 0
|
||||
#define Cdrskin_libburn_minoR 4
|
||||
#define Cdrskin_libburn_micrO 5
|
||||
#define Cdrskin_libburn_minoR 5
|
||||
#define Cdrskin_libburn_micrO 1
|
||||
#endif
|
||||
|
||||
|
||||
@ -242,10 +240,20 @@ or
|
||||
#define Cdrskin_libburn_has_drive_equals_adR 1
|
||||
|
||||
/* 0.4.2 */
|
||||
/* no novel features but rather organizational changes */
|
||||
/* no novel libburn features but rather organizational changes */
|
||||
|
||||
/* 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
|
||||
|
||||
@ -4934,7 +4942,7 @@ int Cdrskin_list_formats(struct CdrskiN *skin, int flag)
|
||||
&num_formats);
|
||||
if(ret <= 0) {
|
||||
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);
|
||||
printf("Media current: ");
|
||||
@ -4982,7 +4990,7 @@ ex:;
|
||||
|
||||
fprintf(stderr,
|
||||
"cdrskin: SORRY: libburn is too old to obtain format list info\n");
|
||||
return(2);
|
||||
return(0);
|
||||
|
||||
#endif /* Cdrskin_libburn_has_burn_disc_formaT */
|
||||
}
|
||||
@ -5131,7 +5139,7 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
|
||||
do_format= 4;
|
||||
else
|
||||
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.
|
||||
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");
|
||||
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.
|
||||
It is done here only for testing it from time to time */
|
||||
Cdrpreskin_queue_msgs(skin->preskin,1);
|
||||
|
||||
|
||||
#ifndef Cdrskin_oldfashioned_api_usE
|
||||
if(stdio_drive) {
|
||||
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 */
|
||||
Cdrpreskin_queue_msgs(skin->preskin,0);
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<HEAD>
|
||||
<META NAME="description" CONTENT="cdrskin, a limited cdrecord compatibility wrapper for libburn">
|
||||
<META NAME="keywords" CONTENT="cdrskin, libburn, libburnia, burn, CD, DVD, linux, recording, burning, CD-R, CD-RW, DVD-R, DVD-RW, DVD+RW, DVD+R, 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">
|
||||
<TITLE>cdrskin homepage english</TITLE>
|
||||
</HEAD>
|
||||
@ -17,15 +17,14 @@
|
||||
</A>
|
||||
<P><H2> Homepage of </H2>
|
||||
<H1> cdrskin </H1>
|
||||
<!-- <FONT SIZE=+0><A HREF="cdrskin_ger.html">deutsch (german)</A></FONT> -->
|
||||
|
||||
<H2>Limited cdrecord compatibility wrapper for libburn</H2>
|
||||
</CENTER>
|
||||
|
||||
<P>
|
||||
<H2>Purpose:</H2>
|
||||
Burns preformatted data to CD and DVD media:<BR>
|
||||
CD-R, DVD-R, DVD+R, DVD+R/DL, CD-RW, DVD-RW, DVD-RAM, DVD+RW
|
||||
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, BD-RE
|
||||
</P>
|
||||
<P>
|
||||
|
||||
@ -35,10 +34,10 @@ CD-R, DVD-R, DVD+R, DVD+R/DL, CD-RW, DVD-RW, DVD-RAM, DVD+RW
|
||||
|
||||
<P>
|
||||
<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>
|
||||
(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>
|
||||
</P>
|
||||
|
||||
@ -58,10 +57,10 @@ and to MMC-5 for DVD).
|
||||
GPL software included:<BR>
|
||||
</H2>
|
||||
<DL>
|
||||
<DT>libburn-0.4.4</DT>
|
||||
<DT>libburn-0.5.0</DT>
|
||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||
furthered by team of libburnia-project.org)</DD>
|
||||
<DD>transfers data to CD and DVD</DD>
|
||||
furthered since August 2006 by Thomas Schmitt from team of libburnia-project.org)</DD>
|
||||
<DD>transfers data to CD, DVD, BD-RE</DD>
|
||||
</DL>
|
||||
</P>
|
||||
|
||||
@ -86,10 +85,10 @@ Ports to other usable systems are appreciated. Reports are welcome.
|
||||
<DL>
|
||||
<DT>The most common options of cdrecord for data and audio on CD media
|
||||
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.
|
||||
Other than with cdrecord, options -multi and -tao are supported with
|
||||
certain DVD types.
|
||||
Other than with cdrecord, option -multi is supported with many DVD types and
|
||||
write mode -tao works with anything but quickly blanked DVD-RW.
|
||||
</DT>
|
||||
<BR><BR>
|
||||
<DT>Get an overview of drives and their addresses</DT>
|
||||
@ -107,9 +106,8 @@ as listed by option --devices.</DT>
|
||||
<DD>$<KBD> cdrskin dev=ATA:1,0,0 -v -atip</KBD></DD>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -toc</KBD></DD>
|
||||
|
||||
<DT>Make used CD-RW or used unformatted DVD-RW writable again:</DT>
|
||||
<DD>$<KBD> cdrskin -v dev=/dev/sg1 blank=fast -eject</KBD></DD>
|
||||
<DD>$<KBD> cdrskin -v dev=/dev/dvd blank=all -eject</KBD></DD>
|
||||
<DT>Prepare CD-RW or DVD-RW for re-use, DVD-RAM or BD-RE for first use:</DT>
|
||||
<DD>$<KBD> cdrskin -v dev=/dev/sg1 blank=as_needed -eject</KBD></DD>
|
||||
|
||||
<DT>Format DVD-RW to avoid need for blanking before re-use:</DT>
|
||||
<DD>$<KBD> 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>
|
||||
<DD>$<KBD> cdrskin -v dev=/dev/hdc speed=12 fs=8m \</KBD></DD>
|
||||
<DD><KBD> -sao -eject padsize=300k my_image.iso</KBD></DD>
|
||||
<DD><KBD> blank=as_needed -eject padsize=300k my_image.iso</KBD></DD>
|
||||
|
||||
<DT>Write compressed afio archive on-the-fly:</DT>
|
||||
<DD>$<KBD> find . | afio -oZ - | \</KBD></DD>
|
||||
<DD><KBD> cdrskin -v dev=0,1,0 fs=32m speed=8 \</KBD></DD>
|
||||
<DD><KBD> -tao padsize=300k -</KBD></DD>
|
||||
<DD><KBD> blank=as_needed padsize=300k -</KBD></DD>
|
||||
|
||||
<DT>Write several sessions to the same CD, DVD-R[W] or DVD+R[/DL]:</DT>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 1.iso</KBD>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k -multi 1.iso</KBD>
|
||||
</DD>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 2.iso</KBD>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k -multi 2.iso</KBD>
|
||||
</DD>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k -multi -tao 3.iso</KBD>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k -multi 3.iso</KBD>
|
||||
</DD>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k -tao 4.iso</KBD></DD>
|
||||
<DD>$<KBD> cdrskin dev=/dev/hdc -v padsize=300k 4.iso</KBD></DD>
|
||||
|
||||
<DT>Get multi-session info for option -C of program mkisofs:</DT>
|
||||
<DD>$<KBD> c_values=$(cdrskin dev=/dev/sr0 -msinfo 2>/dev/null)</KBD></DD>
|
||||
<DD>$<KBD> mkisofs ... -C "$c_values" ...</KBD></DD>
|
||||
|
||||
<DT>Inquire free space on media for a -tao -multi run:</DT>
|
||||
<DD>$<KBD> x=$(cdrskin dev=/dev/sr0 -tao -multi \</KBD></DD>
|
||||
<DT>Inquire free space on media for a -multi run:</DT>
|
||||
<DD>$<KBD> x=$(cdrskin dev=/dev/sr0 -multi \</KBD></DD>
|
||||
<DD><KBD> --tell_media_space 2>/dev/null)</KBD></DD>
|
||||
<DD>$<KBD> echo "Available: $x blocks of 2048 data bytes"</KBD></DD>
|
||||
|
||||
@ -176,8 +174,8 @@ Standalone ISO 9660 multi-session CD/DVD tool
|
||||
</DD>
|
||||
</DL>
|
||||
|
||||
Testers wanted who are willing to risk some double layer DVD-R media
|
||||
or to do experiments on BD-RE.
|
||||
Testers wanted who are willing to risk some DVD-R DL media
|
||||
or to do experiments on BD-R media.
|
||||
|
||||
</P>
|
||||
|
||||
@ -188,8 +186,8 @@ or to do experiments on BD-RE.
|
||||
<P>
|
||||
<DL>
|
||||
<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>
|
||||
(715 KB).
|
||||
<DD><A HREF="cdrskin-0.5.0.pl00.tar.gz">cdrskin-0.5.0.pl00.tar.gz</A>
|
||||
(730 KB).
|
||||
</DD>
|
||||
<DD>
|
||||
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.
|
||||
</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> </DD>
|
||||
<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">
|
||||
@ -238,17 +236,18 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
||||
<HR>
|
||||
|
||||
<P>
|
||||
Enhancements towards previous stable version cdrskin-0.4.2:
|
||||
Enhancements towards previous stable version cdrskin-0.4.8.pl00:
|
||||
<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>
|
||||
|
||||
<!--
|
||||
Bug fixes towards cdrskin-0.4.2.pl00:
|
||||
Bug fixes towards cdrskin-0.4.8.pl00:
|
||||
<UL>
|
||||
<LI>none yet</LI>
|
||||
<LI>Option drive_scsi_dev_family=scd lead to buffer overflow</LI>
|
||||
</UL>
|
||||
-->
|
||||
|
||||
</P>
|
||||
|
||||
@ -256,27 +255,20 @@ Enhancements towards previous stable version cdrskin-0.4.2:
|
||||
|
||||
<P>
|
||||
<DL>
|
||||
<DT><H3>Development snapshot, version 0.4.5 :</H3></DT>
|
||||
<DD>Enhancements towards stable version 0.4.4.pl00:
|
||||
<DT><H3>Development snapshot, version 0.5.1 :</H3></DT>
|
||||
<DD>Enhancements towards current stable version 0.5.0.pl00:
|
||||
<UL>
|
||||
<!--
|
||||
<LI>none yet</LI>
|
||||
-->
|
||||
<LI>Support for BD-RE media is now official</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_<number></LI>
|
||||
<LI>none yet</LI>
|
||||
|
||||
</UL>
|
||||
</DD>
|
||||
<DD> </DD>
|
||||
<DD><A HREF="README_cdrskin_devel">README 0.4.5</A>
|
||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.4.5 --help</A></DD>
|
||||
<DD><A HREF="cdrskin_help_devel">cdrskin_0.4.5 -help</A></DD>
|
||||
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.4.5)</A></DD>
|
||||
<DD><A HREF="README_cdrskin_devel">README 0.5.1</A>
|
||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.5.1 --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.5.1)</A></DD>
|
||||
<DD> </DD>
|
||||
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
||||
@ -296,11 +288,11 @@ admins with full system souvereignty.</DT>
|
||||
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
||||
</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).
|
||||
</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
|
||||
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">
|
||||
<P>
|
||||
<DL>
|
||||
<DT>Example for a setup of device permissions. To be done by the superuser:</DT>
|
||||
<DT>(CD devices which offer no rw-permission are invisible to normal users.)
|
||||
<DT>Example for a setup of device permissions.</DT>
|
||||
<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>
|
||||
<DD># <KBD><B>cdrskin --devices</B></KBD></DD>
|
||||
<DD><KBD>...</KBD></DD>
|
||||
<DD><KBD>0 dev='/dev/sr0' rwrwr- : 'TEAC' 'CD-ROM CD-532S'</KBD></DD>
|
||||
<DD><KBD>0 dev='/dev/sr0' rwr-r- : 'TEAC' 'CD-ROM CD-532S'</KBD></DD>
|
||||
<DD><KBD>1 dev='/dev/hdc' rwrw-- : '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>
|
||||
<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>
|
||||
</P>
|
||||
|
||||
@ -430,7 +441,7 @@ cdrecord but not vice versa.
|
||||
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
|
||||
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>
|
||||
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).
|
||||
|
@ -1 +1 @@
|
||||
#define Cdrskin_timestamP "2008.05.09.145205"
|
||||
#define Cdrskin_timestamP "2008.07.16.070001"
|
||||
|
@ -5219,7 +5219,7 @@ Documented last minute changes
|
||||
* libburn: Improved read performance from stdio: pseudo-drives
|
||||
|
||||
|
||||
2008.04.08.132344 []
|
||||
2008.04.08.132344 [1674]
|
||||
Makefile.am
|
||||
configure.ac
|
||||
README
|
||||
@ -5234,19 +5234,454 @@ doc/comments
|
||||
cdrskin/changelog.txt
|
||||
Made number transition
|
||||
|
||||
------------------------------------ cycle - cdrskin-0.4.5 -
|
||||
------------------------------------ cycle - cdrskin-0.4.5 -
|
||||
8 Apr 2008 [1675]
|
||||
- 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
|
||||
===============================================================================
|
||||
|
||||
@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
|
||||
|
||||
Refuse writing if track size exceeds free media space
|
||||
|
||||
problem with telltoc: double descriptor list from before load and after load
|
||||
|
||||
|
||||
@ -5256,9 +5691,6 @@ cdrskin/README
|
||||
Thin out
|
||||
|
||||
|
||||
[]
|
||||
open(,O_LARGEFILE) ?
|
||||
|
||||
[]
|
||||
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 ?)
|
||||
|
||||
|
||||
@ -5282,14 +5706,6 @@ After cooking: review of -do_diet ?
|
||||
|
||||
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.
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
debug_opts="-O2"
|
||||
def_opts=
|
||||
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"
|
||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||
@ -33,15 +33,15 @@ do
|
||||
libdax_audioxtr_o=
|
||||
libdax_msgs_o="libburn/message.o"
|
||||
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
||||
elif test "$i" = "-libburn_0_4_4"
|
||||
elif test "$i" = "-libburn_0_5_0"
|
||||
then
|
||||
libvers="-DCdrskin_libburn_0_4_4"
|
||||
libvers="-DCdrskin_libburn_0_5_0"
|
||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||
cleanup_src_or_obj="libburn/cleanup.o"
|
||||
elif test "$i" = "-libburn_svn"
|
||||
then
|
||||
libvers="-DCdrskin_libburn_0_4_5"
|
||||
libvers="-DCdrskin_libburn_0_5_1"
|
||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||
cleanup_src_or_obj="libburn/cleanup.o"
|
||||
@ -76,7 +76,7 @@ do
|
||||
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
||||
echo " -compile_dewav compile program test/dewav without libburn."
|
||||
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
|
||||
echo " -libburn_0_4_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 " -no_largefile do not use 64 bit off_t (must match libburn)."
|
||||
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
||||
|
@ -10,7 +10,7 @@ Schilling's cdrtools. cdrskin strives to be a second source for the services
|
||||
traditionally provided by cdrecord. Currently it does CD-R and CD-RW this way.
|
||||
Overwriteable media DVD-RAM, DVD+RW, DVD-RW, and BD-RE are handled differently
|
||||
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
|
||||
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
|
||||
to the MMC standard but also does the same with regular files or block
|
||||
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
|
||||
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
|
||||
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
|
||||
}}}
|
||||
|
||||
DVD-RAM, DVD+RW and overwriteable DVD-RW appear to cdrskin as blank media
|
||||
which are capable of taking only a single track. This track may be positioned
|
||||
on a 32KiB aligned address, though.
|
||||
DVD-RAM, DVD+RW, BD-RE and overwriteable DVD-RW appear to cdrskin as blank
|
||||
media which are capable of taking only a single track. This track may be
|
||||
positioned on a 32KiB aligned address, though.
|
||||
{{{
|
||||
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.)
|
||||
|
||||
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.
|
||||
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.
|
||||
@ -268,7 +281,7 @@ for an illustrated example with K3b 0.10 .
|
||||
|
||||
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
|
||||
Andy Polyakov's dvd+rw-tools which despite their historic name are
|
||||
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.
|
||||
|
||||
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
|
||||
even regular disk files or block devices other than CD/DVD writers.
|
||||
sequential DVD-R[W] and with DVD+R [DL], but also with DVD-RAM, DVD+RW, BD-RE
|
||||
and even regular disk files or block devices other than CD/DVD writers.
|
||||
This is enabled by option --grow_overwriteable_iso.
|
||||
|
||||
The libburnia project provides an integrated ISO-9660 multi-session tool
|
||||
|
24
configure.ac
24
configure.ac
@ -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])
|
||||
dnl AC_CONFIG_HEADER([config.h])
|
||||
|
||||
@ -60,6 +60,9 @@ dnl
|
||||
dnl Neatly versioned stable releases meanwhile:
|
||||
dnl 0.4.2 = libburn.so.4.7.0
|
||||
dnl 0.4.4 = libburn.so.4.9.0
|
||||
dnl 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 So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
|
||||
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 As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
|
||||
BURN_MAJOR_VERSION=0
|
||||
BURN_MINOR_VERSION=4
|
||||
BURN_MICRO_VERSION=5
|
||||
BURN_MINOR_VERSION=5
|
||||
BURN_MICRO_VERSION=0
|
||||
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||
|
||||
AC_SUBST(BURN_MAJOR_VERSION)
|
||||
@ -96,15 +99,16 @@ AC_SUBST(BURN_VERSION)
|
||||
dnl Libtool versioning
|
||||
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||
dnl
|
||||
dnl ts A80408
|
||||
dnl ### This was the release version libburn-0.4.4 = libburn.so.4.9.0
|
||||
dnl This is the development version after above release version
|
||||
dnl LT_CURRENT++, LT_AGE++ has already happened.
|
||||
dnl ts A80717
|
||||
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 LT_CURRENT++, LT_AGE++ has not yet happened.
|
||||
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||
dnl
|
||||
dnl SONAME = 14 - 10 = 4 . Library name = libburn.so.4.10.0
|
||||
LT_CURRENT=14
|
||||
dnl SONAME = 19 - 15 = 4 . Library name = libburn.so.4.15.0
|
||||
LT_CURRENT=19
|
||||
LT_AGE=15
|
||||
LT_REVISION=0
|
||||
LT_AGE=10
|
||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||
|
||||
AC_SUBST(LT_RELEASE)
|
||||
|
@ -70,7 +70,7 @@ composition, updating and writing. Quite unique in the Linux world.
|
||||
manipulates and writes ISO 9660 filesystem images with
|
||||
Rock Ridge extensions. Manipulation is not only adding or
|
||||
overwriting of files but also deletion, renaming, and attribute
|
||||
changing.
|
||||
changing. An incremental backup feature is provided.
|
||||
See xorriso/README for more
|
||||
|
||||
- "test" is a collection of application gestures and examples given by the
|
||||
|
@ -43,7 +43,15 @@
|
||||
#include "libdax_msgs.h"
|
||||
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 *);
|
||||
|
||||
@ -85,6 +93,9 @@ struct fifo_opts
|
||||
|
||||
struct w_list
|
||||
{
|
||||
/* ts A80714 */
|
||||
int w_type; /* see above define Burnworker_type_* */
|
||||
|
||||
struct burn_drive *drive;
|
||||
pthread_t thread;
|
||||
|
||||
@ -113,7 +124,8 @@ static struct w_list *find_worker(struct burn_drive *d)
|
||||
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 *tmp;
|
||||
@ -124,6 +136,7 @@ static void add_worker(struct burn_drive *d, WorkerFunc f, void *data)
|
||||
#endif
|
||||
|
||||
a = malloc(sizeof(struct w_list));
|
||||
a->w_type = w_type;
|
||||
a->drive = d;
|
||||
a->u = *(union w_list_data *)data;
|
||||
|
||||
@ -259,7 +272,8 @@ drive_is_active:;
|
||||
o.drives = drives;
|
||||
o.n_drives = n_drives;
|
||||
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) {
|
||||
/* its 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);
|
||||
return;
|
||||
}
|
||||
if ((SCAN_GOING()) || find_worker(drive)) {
|
||||
if ((SCAN_GOING()) || find_worker(drive) != NULL) {
|
||||
libdax_msgs_submit(libdax_messenger, drive->global_index,
|
||||
0x00020102,
|
||||
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.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;
|
||||
char msg[160];
|
||||
|
||||
if ((SCAN_GOING()) || find_worker(drive)) {
|
||||
if ((SCAN_GOING()) || find_worker(drive) != NULL) {
|
||||
libdax_msgs_submit(libdax_messenger, drive->global_index,
|
||||
0x00020102,
|
||||
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.size = size;
|
||||
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 */
|
||||
/* a ssert(!SCAN_GOING()); */
|
||||
/* 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,
|
||||
0x00020102,
|
||||
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++;
|
||||
|
||||
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.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;
|
||||
return 1;
|
||||
}
|
||||
|
@ -540,3 +540,64 @@ int burn_fifo_inquire_status(struct burn_source *source,
|
||||
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);
|
||||
}
|
||||
|
@ -198,10 +198,12 @@ enum burn_disc_status
|
||||
BURN_DISC_FULL,
|
||||
|
||||
/* ts A61007 */
|
||||
/* @since 0.2.4 */
|
||||
/** The drive was not grabbed when the status was inquired */
|
||||
BURN_DISC_UNGRABBED,
|
||||
|
||||
/* ts A61020 */
|
||||
/* @since 0.2.6 */
|
||||
/** The media seems not to be suitable for burning */
|
||||
BURN_DISC_UNSUITABLE
|
||||
};
|
||||
@ -242,6 +244,7 @@ enum burn_drive_status
|
||||
BURN_DRIVE_GRABBING,
|
||||
|
||||
/* ts A61102 */
|
||||
/* @since 0.2.6 */
|
||||
/** The drive gets written zeroes before the track payload data */
|
||||
BURN_DRIVE_WRITING_PREGAP,
|
||||
/** The drive is told to close a track (TAO only) */
|
||||
@ -250,10 +253,12 @@ enum burn_drive_status
|
||||
BURN_DRIVE_CLOSING_SESSION,
|
||||
|
||||
/* ts A61223 */
|
||||
/* @since 0.3.0 */
|
||||
/** The drive is formatting media */
|
||||
BURN_DRIVE_FORMATTING,
|
||||
|
||||
/* ts A70822 */
|
||||
/* @since 0.4.0 */
|
||||
/** The drive is busy in synchronous read (if you see this then it
|
||||
has been interrupted) */
|
||||
BURN_DRIVE_READING_SYNC,
|
||||
@ -307,6 +312,7 @@ struct burn_toc_entry
|
||||
|
||||
/* ts A70201 : DVD extension.
|
||||
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. */
|
||||
unsigned char session_msb;
|
||||
unsigned char point_msb;
|
||||
@ -402,6 +408,7 @@ struct burn_source {
|
||||
|
||||
|
||||
/* 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
|
||||
to implement this by a attribute off_t fixed_size; in *data .
|
||||
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. */
|
||||
|
||||
/* @since 0.4.2 */
|
||||
/** Valid only if above member .(*read)() is NULL. This indicates a
|
||||
version of struct burn_source younger than 0.
|
||||
From then on, member .version tells which further members exist
|
||||
@ -574,12 +581,14 @@ struct burn_progress {
|
||||
int sector;
|
||||
|
||||
/* ts A61023 */
|
||||
/* @since 0.2.6 */
|
||||
/** The capacity of the drive buffer */
|
||||
unsigned buffer_capacity;
|
||||
/** The free space in the drive buffer (might be slightly outdated) */
|
||||
unsigned buffer_available;
|
||||
|
||||
/* ts A61119 */
|
||||
/* @since 0.2.6 */
|
||||
/** The number of bytes sent to the drive buffer */
|
||||
off_t buffered_bytes;
|
||||
/** The minimum number of bytes stored in buffer during write.
|
||||
@ -591,6 +600,7 @@ struct burn_progress {
|
||||
|
||||
|
||||
/* ts A61226 */
|
||||
/* @since 0.3.0 */
|
||||
/** 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
|
||||
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
|
||||
0 had to leave a drive in unclean state
|
||||
<0 severe error, do no use libburn again
|
||||
@since 0.2.6
|
||||
*/
|
||||
int burn_abort(int patience,
|
||||
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
|
||||
exclusive opening attempt indicates a busy drive.
|
||||
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);
|
||||
|
||||
@ -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
|
||||
any drive scanning.
|
||||
@param yes 1=allow all implemented profiles, 0=only tested media (default)
|
||||
@since 0.3.4
|
||||
*/
|
||||
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
|
||||
tray door, etc).
|
||||
@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[],
|
||||
char* adr, int load);
|
||||
|
||||
|
||||
/* ts A51221 */
|
||||
/* @since 0.2.2 */
|
||||
/** Maximum number of particularly permissible drive addresses */
|
||||
#define BURN_DRIVE_WHITELIST_LEN 255
|
||||
|
||||
/** 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.
|
||||
@return 1 success, <=0 failure
|
||||
@since 0.2.2
|
||||
*/
|
||||
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.
|
||||
@return 1 on success, 2 if drive was already forgotten,
|
||||
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);
|
||||
|
||||
@ -887,23 +905,28 @@ void burn_drive_info_free(struct burn_drive_info drive_infos[]);
|
||||
|
||||
|
||||
/* ts A60823 */
|
||||
/* @since 0.2.2 */
|
||||
/** Maximum length+1 to expect with a persistent drive address string */
|
||||
#define BURN_DRIVE_ADR_LEN 1024
|
||||
|
||||
/* ts A70906 */
|
||||
/** Inquire the persistent address of the given drive.
|
||||
@param drive The drive to inquire.
|
||||
@param adr An application provided array of at least BURN_DRIVE_ADR_LEN
|
||||
characters size. The persistent address gets copied to it.
|
||||
@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[]);
|
||||
|
||||
/* A60823 */
|
||||
/** Inquire the persistent address of a drive via a given drive_info object.
|
||||
(Note: This is a legacy call.)
|
||||
@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
|
||||
characters size. The persistent address gets copied to it.
|
||||
@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[]);
|
||||
|
||||
@ -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
|
||||
address of libburn.
|
||||
@return 1 means yes, 0 means no
|
||||
@since 0.2.6
|
||||
*/
|
||||
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
|
||||
characters size. The persistent address gets copied to it.
|
||||
@return 1 = success , 0 = failure , -1 = severe error
|
||||
@since 0.2.6
|
||||
*/
|
||||
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
|
||||
characters size. The persistent address gets copied to it.
|
||||
@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 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
|
||||
succeed with any device file of a (possibly emulated) SCSI device.
|
||||
@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 *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 flag Bitfield for control purposes (unused yet, submit 0)
|
||||
@return 1 means success, <=0 means failure
|
||||
@since 0.4.0
|
||||
*/
|
||||
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
|
||||
failed to declare themselves either blank or (partially) filled.
|
||||
@return 1 drive status has been set , 0 = unsuitable drive status
|
||||
@since 0.2.6
|
||||
*/
|
||||
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
|
||||
or BURN_DISC_UNSUITABLE. Thus marking media as blankable which actually
|
||||
failed to declare themselves either blank or (partially) filled.
|
||||
@since 0.2.6
|
||||
*/
|
||||
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.
|
||||
@param drive The drive to query.
|
||||
@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);
|
||||
|
||||
@ -1036,6 +1067,7 @@ int burn_disc_read_atip(struct burn_drive *drive);
|
||||
@param end_lba Returns the end lba value
|
||||
@param flag Bitfield for control purposes (unused yet, submit 0)
|
||||
@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 *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 nwa return value: Next Writeable Address
|
||||
@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 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 start_lba returns the start address of that track
|
||||
@return <= 0 : failure, 1 = ok
|
||||
@since 0.3.2
|
||||
*/
|
||||
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 o If not NULL: write parameters to be set on drive before query
|
||||
@return number of most probably available free bytes
|
||||
@since 0.3.4
|
||||
*/
|
||||
off_t burn_disc_available_space(struct burn_drive *d,
|
||||
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 name Profile Name (see above list, unknown profiles have empty name)
|
||||
@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]);
|
||||
|
||||
@ -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.
|
||||
@param opts object to inquire
|
||||
@return pointer to drive
|
||||
@since 0.4.0
|
||||
*/
|
||||
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,
|
||||
0x15, 0x26, 0x30, 0x31.
|
||||
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);
|
||||
|
||||
|
||||
/* ts A70112 */
|
||||
/* @since 0.3.0 */
|
||||
/** Possible formatting status values */
|
||||
#define BURN_FORMAT_IS_UNFORMATTED 1
|
||||
#define BURN_FORMAT_IS_FORMATTED 2
|
||||
#define BURN_FORMAT_IS_UNKNOWN 3
|
||||
|
||||
/* ts A70112 */
|
||||
/** Inquire the formatting status, the associated sizes and the number of
|
||||
available formats. The info is media specific and stems from MMC command
|
||||
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
|
||||
and eventually with burn_disc_format() to select one.
|
||||
@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,
|
||||
unsigned *bl_sas, int *num_formats);
|
||||
|
||||
/* ts A70112 */
|
||||
/** Inquire parameters of an available media format.
|
||||
@param drive The drive with the disc to format.
|
||||
@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.
|
||||
0x00=full, 0x10=CD-RW/DVD-RW full, 0x11=CD-RW/DVD-RW 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 tdp Type Dependent Parameter. See mmc5r03c.pdf.
|
||||
@return 1 reply is valid , <=0 failure
|
||||
@since 0.3.0
|
||||
*/
|
||||
int burn_disc_get_format_descr(struct burn_drive *drive, int index,
|
||||
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 */
|
||||
/* @since 0.3.4 */
|
||||
/** The length of a rejection reasons string for burn_precheck_write() and
|
||||
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 silent 1= do not issue error messages , 0= report problems
|
||||
@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,
|
||||
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.
|
||||
@param d The drive to inquire.
|
||||
@return 1=burn seems to have went well, 0=burn failed
|
||||
@since 0.2.6
|
||||
*/
|
||||
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 swap_source_bytes 0=do not swap, 1=swap byte pairs
|
||||
@return 1=success , 0=unacceptable value
|
||||
@since 0.2.6
|
||||
*/
|
||||
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 size The size to set
|
||||
@return 0=failure 1=sucess
|
||||
@since 0.3.4
|
||||
*/
|
||||
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.
|
||||
inp can be freed immediately, the returned fifo may be
|
||||
kept as handle for burn_fifo_inquire_status().
|
||||
@since 0.4.0
|
||||
*/
|
||||
struct burn_source *burn_fifo_source_new(struct burn_source *inp,
|
||||
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
|
||||
6="ended" : consumption has ended without 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 *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 */
|
||||
/** Sets a fixed track size after the data source object has already been
|
||||
created.
|
||||
@param t The track to operate on
|
||||
@param size the number of bytes to use as track size
|
||||
@return <=0 indicates failure , >0 success
|
||||
@since 0.3.6
|
||||
*/
|
||||
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 */
|
||||
/** 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,
|
||||
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 max_percent Maximum of desired buffer oscillation: 25 to 100
|
||||
@return 1=success , 0=failure
|
||||
@since 0.3.8
|
||||
*/
|
||||
int burn_drive_set_buffer_waiting(struct burn_drive *d, int enable,
|
||||
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
|
||||
(is automatically set with bit0)
|
||||
@return Chosen write type. BURN_WRITE_NONE on failure.
|
||||
@since 0.3.2
|
||||
*/
|
||||
enum burn_write_types burn_write_opts_auto_write_type(
|
||||
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.
|
||||
@param opts The option object to be manipulated
|
||||
@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);
|
||||
|
||||
@ -1748,6 +1832,7 @@ void burn_write_opts_set_multi(struct burn_write_opts *opts, int multi);
|
||||
.start_range_low , .start_range_high .
|
||||
@param opts The write opts to change
|
||||
@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);
|
||||
|
||||
@ -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.
|
||||
@param opts The write opts to change
|
||||
@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,
|
||||
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
|
||||
@param opts The write opts to change
|
||||
@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);
|
||||
|
||||
@ -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
|
||||
disables error management and correction. Weigh your priorities.
|
||||
This only affects the write operations of burn_disc_write().
|
||||
@since 0.4.6
|
||||
@param opts The write opts to change
|
||||
@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,
|
||||
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().
|
||||
@param d Drive to query
|
||||
@return Minimum write speed in K/s
|
||||
@since 0.2.6
|
||||
*/
|
||||
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 speed_list The copy. If empty, *speed_list gets returned as NULL.
|
||||
@return 1=success , 0=list empty , <0 severe error
|
||||
@since 0.3.0
|
||||
*/
|
||||
int burn_drive_get_speedlist(struct burn_drive *d,
|
||||
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
|
||||
and for any other source type only with CD media)
|
||||
@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,
|
||||
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().
|
||||
@param speed_list The list copy. *speed_list gets set to 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);
|
||||
|
||||
|
||||
/* ts A70203 */
|
||||
/* @since 0.3.2 */
|
||||
/** The reply structure for burn_disc_get_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 */
|
||||
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 */
|
||||
int might_simulate;
|
||||
};
|
||||
@ -2009,6 +2102,7 @@ struct burn_multi_caps {
|
||||
@param caps returns the info structure
|
||||
@param flag Bitfield for control purposes (unused yet, submit 0)
|
||||
@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,
|
||||
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.
|
||||
@param caps the info structure to dispose (note: pointer to pointer)
|
||||
@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);
|
||||
|
||||
@ -2079,6 +2174,7 @@ void burn_version(int *major, int *minor, int *micro);
|
||||
|
||||
|
||||
/* ts A80129 */
|
||||
/* @since 0.4.4 */
|
||||
/** These three release version numbers tell the revision of this header file
|
||||
and of the API it describes. They are memorized by applications at build
|
||||
time.
|
||||
@ -2096,8 +2192,8 @@ void burn_version(int *major, int *minor, int *micro);
|
||||
|
||||
*/
|
||||
#define burn_header_version_major 0
|
||||
#define burn_header_version_minor 4
|
||||
#define burn_header_version_micro 5
|
||||
#define burn_header_version_minor 5
|
||||
#define burn_header_version_micro 0
|
||||
/** Note:
|
||||
Above version numbers are also recorded in configure.ac because libtool
|
||||
wants them as parameters at build time.
|
||||
@ -2159,12 +2255,13 @@ These two advises are mutually exclusive.
|
||||
to stderr. Default: "FATAL".
|
||||
@param print_id A text prefix to be printed before the message.
|
||||
@return >0 for success, <=0 for error
|
||||
|
||||
@since 0.2.6
|
||||
*/
|
||||
int burn_msgs_set_severities(char *queue_severity,
|
||||
char *print_severity, char *print_id);
|
||||
|
||||
/* ts A60924 : ticket 74 */
|
||||
/* @since 0.2.6 */
|
||||
#define BURN_MSGS_MESSAGE_LEN 4096
|
||||
|
||||
/** 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
|
||||
should provide at least 80 bytes.
|
||||
@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 *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
|
||||
particular drive object.
|
||||
@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,
|
||||
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 flag Bitfield for control purposes (unused yet, submit 0)
|
||||
@return >0 success, <=0 failure
|
||||
@since 0.4.0
|
||||
*/
|
||||
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_name A name as with burn_msgs_submit(), e.g. "SORRY".
|
||||
@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);
|
||||
|
||||
@ -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().
|
||||
@param messenger The foreign but compatible message handle.
|
||||
@return 1 : success, <=0 : failure
|
||||
@since 0.4.0
|
||||
*/
|
||||
int burn_set_messenger(void *messenger);
|
||||
|
||||
|
||||
/* ts A61002 */
|
||||
/* @since 0.2.6 */
|
||||
/** 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
|
||||
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
|
||||
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().
|
||||
@since 0.2.6
|
||||
*/
|
||||
void burn_set_signal_handling(void *handle, burn_abort_handler_t handler,
|
||||
int mode);
|
||||
@ -2292,6 +2396,7 @@ void burn_set_signal_handling(void *handle, burn_abort_handler_t handler,
|
||||
@param flag Bitfield for control purposes:
|
||||
bit0 = flush the drive buffer after eventual writing
|
||||
@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,
|
||||
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 -
|
||||
bit1= do not submit error message if read error
|
||||
@return 1=sucessful , <=0 an error occured
|
||||
@since 0.4.0
|
||||
*/
|
||||
int burn_read_data(struct burn_drive *d, off_t byte_address,
|
||||
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
|
||||
2= stdio-drive, random access, read-write
|
||||
3= stdio-drive, sequential, write-only
|
||||
@since 0.4.0
|
||||
*/
|
||||
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:".
|
||||
@return 1= adr2 leads to d1 , 0= adr2 seems not to lead to d1,
|
||||
-1 = adr2 is bad
|
||||
@since 0.4.0
|
||||
*/
|
||||
int burn_drive_equals_adr(struct burn_drive *d1, char *adr2, int drive_role2);
|
||||
|
||||
|
@ -524,6 +524,11 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
||||
0x00020157 (FATAL,HIGH) = burn_source is not a fifo object
|
||||
0x00020158 (DEBUG,LOW) = Reporting thread disposal precautions
|
||||
0x00020159 (DEBUG,HIGH) = TOC Format 0 returns inconsistent data
|
||||
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:
|
||||
0x00020200 (SORRY,HIGH) = Cannot open audio source 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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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 */
|
||||
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 */
|
||||
sprintf(msg, "Cannot open busy device '%s'", fname);
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020001,
|
||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_LOW,
|
||||
msg, os_errno, 0);
|
||||
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);
|
||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020001,
|
||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_LOW,
|
||||
msg, os_errno, 0);
|
||||
}
|
||||
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 sid_ret = 0;
|
||||
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];
|
||||
|
||||
sg_select_device_family();
|
||||
@ -661,6 +735,9 @@ static void sg_enumerate(void)
|
||||
for (i = 0; i < 32; i++) {
|
||||
sprintf(fname, linux_sg_device_family, i);
|
||||
|
||||
/* ts A80702 */
|
||||
sg_exchange_scd_for_sr(fname, 0);
|
||||
|
||||
if (linux_sg_enumerate_debug)
|
||||
fprintf(stderr, "libburn_debug: %s : ", fname);
|
||||
|
||||
@ -893,6 +970,10 @@ int sg_give_next_adr(burn_drive_enumerator_t *idx,
|
||||
if (adr_size < 10)
|
||||
return -1;
|
||||
sprintf(adr, linux_sg_device_family, *idx);
|
||||
|
||||
/* ts A80702 */
|
||||
sg_exchange_scd_for_sr(adr, 0);
|
||||
|
||||
return 1;
|
||||
next_ata:;
|
||||
baseno += sg_limit;
|
||||
@ -1378,7 +1459,6 @@ int sg_is_enumerable_adr(char *adr)
|
||||
sg_give_next_adr(&idx, fname, sizeof(fname), -1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
sg_give_next_adr(&idx, fname, sizeof(fname), -1);
|
||||
return(0);
|
||||
|
@ -1419,7 +1419,6 @@ int burn_disc_setup_dvd_plus_rw(struct burn_write_opts *o,
|
||||
{
|
||||
struct burn_drive *d = o->drive;
|
||||
int ret;
|
||||
char msg[160];
|
||||
|
||||
if (d->bg_format_status==0 || d->bg_format_status==1) {
|
||||
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->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 */;
|
||||
|
||||
@ -1559,6 +1548,16 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
|
||||
msg, 0, 0);
|
||||
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 */
|
||||
if (d->current_profile == 0x43) /* BD-RE */
|
||||
o->obs = Libburn_bd_re_obS;
|
||||
|
Reference in New Issue
Block a user