Compare commits
4 Commits
1.0.0
...
ZeroEightS
Author | SHA1 | Date | |
---|---|---|---|
4fa7c8d477 | |||
6d2fd6e947 | |||
5ae5205553 | |||
45e252ec1a |
18
ChangeLog
18
ChangeLog
@ -1,21 +1,3 @@
|
|||||||
SVN trunk (to become libburn-1.0.2.pl00.tar.gz)
|
|
||||||
===============================================================================
|
|
||||||
- no novelties yet
|
|
||||||
|
|
||||||
libburn-1.0.0.pl00.tar.gz Sun Jan 16 2011
|
|
||||||
===============================================================================
|
|
||||||
* Allowed umask to create stdio-drive files with rw-permissions for all
|
|
||||||
* cdrskin now refuses to burn if the foreseeable size exceeds media capacity
|
|
||||||
|
|
||||||
libburn-0.9.0.pl00.tar.gz Wed Dec 08 2010
|
|
||||||
===============================================================================
|
|
||||||
* Regression fix: SCSI reply data logging was disabled in release 0.8.6
|
|
||||||
|
|
||||||
libburn-0.8.8.pl00.tar.gz Wed Oct 20 2010
|
|
||||||
===============================================================================
|
|
||||||
* New API call burn_offst_source_new()
|
|
||||||
* New API call burn_disc_get_bd_spare_info()
|
|
||||||
|
|
||||||
libburn-0.8.6.pl00.tar.gz Fri Sep 17 2010
|
libburn-0.8.6.pl00.tar.gz Fri Sep 17 2010
|
||||||
===============================================================================
|
===============================================================================
|
||||||
* Lifted test reservation on DVD-R DL media.
|
* Lifted test reservation on DVD-R DL media.
|
||||||
|
11
Makefile.am
11
Makefile.am
@ -75,15 +75,11 @@ libburn_libburn_la_SOURCES = \
|
|||||||
libinclude_HEADERS = \
|
libinclude_HEADERS = \
|
||||||
libburn/libburn.h
|
libburn/libburn.h
|
||||||
|
|
||||||
install-exec-hook:
|
|
||||||
$(LIBBURNIA_LDCONFIG_CMD) "$(DESTDIR)$(libdir)" || echo 'NOTE: Explicite dynamic library configuration failed. If needed, configure manually for:' "$(DESTDIR)$(libdir)"
|
|
||||||
|
|
||||||
## ========================================================================= ##
|
## ========================================================================= ##
|
||||||
|
|
||||||
## Build test applications
|
## Build test applications
|
||||||
noinst_PROGRAMS = \
|
noinst_PROGRAMS = \
|
||||||
test/libburner \
|
test/libburner \
|
||||||
test/offst_source \
|
|
||||||
test/telltoc \
|
test/telltoc \
|
||||||
test/dewav \
|
test/dewav \
|
||||||
test/fake_au \
|
test/fake_au \
|
||||||
@ -98,9 +94,6 @@ LIBBURN_EXTRALIBS = $(LIBBURN_ARCH_LIBS) $(THREAD_LIBS)
|
|||||||
test_libburner_CPPFLAGS = -Ilibburn
|
test_libburner_CPPFLAGS = -Ilibburn
|
||||||
test_libburner_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
test_libburner_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
test_libburner_SOURCES = test/libburner.c
|
test_libburner_SOURCES = test/libburner.c
|
||||||
test_offst_source_CPPFLAGS = -Ilibburn
|
|
||||||
test_offst_source_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
|
||||||
test_offst_source_SOURCES = test/offst_source.c
|
|
||||||
test_telltoc_CPPFLAGS = -Ilibburn
|
test_telltoc_CPPFLAGS = -Ilibburn
|
||||||
test_telltoc_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
test_telltoc_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
test_telltoc_SOURCES = test/telltoc.c
|
test_telltoc_SOURCES = test/telltoc.c
|
||||||
@ -117,9 +110,9 @@ test_structest_CPPFLAGS = -Ilibburn
|
|||||||
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
test_structest_SOURCES = test/structest.c
|
test_structest_SOURCES = test/structest.c
|
||||||
|
|
||||||
## cdrskin construction site - ts A60816 - B10116
|
## cdrskin construction site - ts A60816 - B00611
|
||||||
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
||||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_1_0_0
|
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_8_6
|
||||||
|
|
||||||
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
|
||||||
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
||||||
|
53
README
53
README
@ -6,12 +6,12 @@ This all is under GPL.
|
|||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
libburn-project.org
|
libburn-project.org
|
||||||
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
|
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Copyright (C) 2006-2011 Mario Danic, Thomas Schmitt
|
Copyright (C) 2006-2010 Mario Danic, Thomas Schmitt
|
||||||
Still containing parts of Libburn. By Derek Foreman <derek@signalmarketing.com>
|
Still containing parts of Libburn. By Derek Foreman <derek@signalmarketing.com>
|
||||||
and Ben Jansens <xor@orodu.net>
|
and Ben Jansens <xor@orodu.net>
|
||||||
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
||||||
|
|
||||||
http://files.libburnia-project.org/releases/libburn-1.0.0.pl00.tar.gz
|
http://files.libburnia-project.org/releases/libburn-0.8.6.pl00.tar.gz
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -19,10 +19,10 @@ Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
|
|||||||
|
|
||||||
From tarball
|
From tarball
|
||||||
|
|
||||||
Obtain libburn-1.0.0.pl00.tar.gz, take it to a directory of your choice and do:
|
Obtain libburn-0.8.6.pl00.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf libburn-1.0.0.pl00.tar.gz
|
tar xzf libburn-0.8.6.pl00.tar.gz
|
||||||
cd libburn-1.0.0
|
cd libburn-0.8.6
|
||||||
./configure --prefix=/usr
|
./configure --prefix=/usr
|
||||||
make
|
make
|
||||||
|
|
||||||
@ -60,11 +60,6 @@ Warning: The trunk might contain experimental features which might not
|
|||||||
|
|
||||||
Special ./configure options
|
Special ./configure options
|
||||||
|
|
||||||
make install on GNU/Linux will try to run program ldconfig with the library
|
|
||||||
installation directory as only argument. Failure to do so will not abort
|
|
||||||
installation. One may disable ldconfig by ./configure option:
|
|
||||||
--disable-ldconfig-at-install
|
|
||||||
|
|
||||||
In some situations Linux may deliver a better write performance to drives if
|
In some situations Linux may deliver a better write performance to drives if
|
||||||
the track input is read with O_DIRECT (see man 2 open). The API call
|
the track input is read with O_DIRECT (see man 2 open). The API call
|
||||||
burn_os_open_track_src() and the input readers of cdrskin and libburn fifo
|
burn_os_open_track_src() and the input readers of cdrskin and libburn fifo
|
||||||
@ -559,44 +554,6 @@ Project history as far as known to me:
|
|||||||
|
|
||||||
- Fri Sep 17 2010 libburn-0.8.6 lifts the test reservation on DVD-R DL media.
|
- Fri Sep 17 2010 libburn-0.8.6 lifts the test reservation on DVD-R DL media.
|
||||||
|
|
||||||
- Sat Sep 18 2010 Release 0.6.2.pl00 of libisoburn introduces a partition
|
|
||||||
with non-zero offset for ISO 9660 images on USB sticks, improves mkisofs
|
|
||||||
emulation, and fixes a regression which existed since version 0.4.2.
|
|
||||||
|
|
||||||
- Wed Oct 20 2010 libburn-0.8.8 can report the used amount of BD spare blocks.
|
|
||||||
|
|
||||||
- Sat Oct 23 2010 Version 0.6.38 of libisofs can use libjte to produce jigdo
|
|
||||||
files along with the ISO image. Further filesystem images may be appended
|
|
||||||
as MBR partitions 1 to 4. The capability was added to produce boot blocks
|
|
||||||
for computers with MIPS CPU.
|
|
||||||
|
|
||||||
- Tue Oct 26 2010 Release 0.6.4.pl00 of libisoburn and xorriso makes use of
|
|
||||||
the new libisofs capabilities.
|
|
||||||
|
|
||||||
- Wed Dec 08 2010 libburn-0.9.0 fixes a regression with SCSI command logging.
|
|
||||||
|
|
||||||
- Fri Dec 10 2010 Version 0.6.40 of libisofs makes the prediction of the
|
|
||||||
emerging image size less expensive and is able to make images bootable
|
|
||||||
for SUN SPARC systems.
|
|
||||||
|
|
||||||
- Sun Dec 12 2010 Release 0.6.6.pl00 of libisoburn and xorriso can read ISO
|
|
||||||
images which were copied to a different start address than they were prepared
|
|
||||||
for.
|
|
||||||
|
|
||||||
- Mon Jan 17 2011 we go for release 1.0.0. This does not indicate a
|
|
||||||
technological overhaul but shall emphasize the maturity of the software.
|
|
||||||
libisofs-1.0.0 fixes a bug about the length of ECMA-119 directory names and
|
|
||||||
is ready to allow untranslated ECMA-119 names (violating the specs).
|
|
||||||
libburn-1.0.0.pl00 allows umask to create stdio-drive files with
|
|
||||||
rw-permissions for all. cdrskin now refuses to burn if the foreseeable size
|
|
||||||
exceeds media capacity
|
|
||||||
libisoburn-1.0.0.pl00 allows to create an ISO 9660:1999 directory tree,
|
|
||||||
improved the emulation fidelity of command -as mkisofs, lowered the default
|
|
||||||
abort threshold for xorriso batch mode, and increased that threshold for
|
|
||||||
xorriso dialog mode.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -16,13 +16,11 @@ AC_DEFUN([TARGET_SHIZZLE],
|
|||||||
|
|
||||||
AC_MSG_CHECKING([target operating system])
|
AC_MSG_CHECKING([target operating system])
|
||||||
|
|
||||||
LIBBURNIA_LDCONFIG_CMD="echo 'No ldconfig run performed. If needed, configure manually for:'"
|
|
||||||
|
|
||||||
case $target_os in
|
case $target_os in
|
||||||
linux*)
|
linux*)
|
||||||
ARCH=linux
|
ARCH=linux
|
||||||
LIBBURN_ARCH_LIBS=
|
LIBBURN_ARCH_LIBS=
|
||||||
LIBBURNIA_LDCONFIG_CMD=ldconfig
|
|
||||||
;;
|
;;
|
||||||
freebsd*)
|
freebsd*)
|
||||||
ARCH=freebsd
|
ARCH=freebsd
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
|
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Integrated sub project of libburnia-project.org but also published via:
|
Integrated sub project of libburnia-project.org but also published via:
|
||||||
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
||||||
http://scdbackup.sourceforge.net/cdrskin-1.0.0.pl00.tar.gz
|
http://scdbackup.sourceforge.net/cdrskin-0.8.6.pl00.tar.gz
|
||||||
|
|
||||||
Copyright (C) 2006-2011 Thomas Schmitt, provided under GPL version 2 or later.
|
Copyright (C) 2006-2010 Thomas Schmitt, provided under GPL version 2 or later.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@ -26,10 +26,10 @@ By using this software you agree to the disclaimer at the end of this text
|
|||||||
|
|
||||||
Compilation, First Glimpse, Installation
|
Compilation, First Glimpse, Installation
|
||||||
|
|
||||||
Obtain cdrskin-1.0.0.pl00.tar.gz, take it to a directory of your choice and do:
|
Obtain cdrskin-0.8.6.pl00.tar.gz, take it to a directory of your choice and do:
|
||||||
|
|
||||||
tar xzf cdrskin-1.0.0.pl00.tar.gz
|
tar xzf cdrskin-0.8.6.pl00.tar.gz
|
||||||
cd cdrskin-1.0.0
|
cd cdrskin-0.8.6
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
@ -310,11 +310,10 @@ Add-on session (equivalent to growisofs -M):
|
|||||||
cdrskin dev=/dev/sr0 --grow_overwriteable_iso ... -
|
cdrskin dev=/dev/sr0 --grow_overwriteable_iso ... -
|
||||||
|
|
||||||
|
|
||||||
DVD-RW , DVD-R , DVD-R DL
|
DVD-RW and DVD-R
|
||||||
|
|
||||||
DVD-RW are usable if formatted to state "Restricted Overwrite" or if in state
|
DVD-RW are usable if formatted to state "Restricted Overwrite" or if in state
|
||||||
"Sequential Recording". DVD-R are always in sequential state. DVD-R DL are
|
"Sequential Recording". DVD-R are always in sequential state.
|
||||||
always sequential and incapable of multi-session.
|
|
||||||
|
|
||||||
"Sequential" is the state of unused media and of media previously blanked
|
"Sequential" is the state of unused media and of media previously blanked
|
||||||
or written by cdrecord. dvd+rw-format -blank can also achieve this state.
|
or written by cdrecord. dvd+rw-format -blank can also achieve this state.
|
||||||
|
@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
|
|||||||
# My changes are in $changes , mainly in $changes/cdrskin
|
# My changes are in $changes , mainly in $changes/cdrskin
|
||||||
changes="./libburn-release"
|
changes="./libburn-release"
|
||||||
|
|
||||||
skin_release="1.0.0"
|
skin_release="0.8.6"
|
||||||
patch_level=".pl00"
|
patch_level=".pl00"
|
||||||
skin_rev="$skin_release""$patch_level"
|
skin_rev="$skin_release""$patch_level"
|
||||||
|
|
@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
|
|||||||
# My changes are in $changes , mainly in $changes/cdrskin
|
# My changes are in $changes , mainly in $changes/cdrskin
|
||||||
changes="./libburn-develop"
|
changes="./libburn-develop"
|
||||||
|
|
||||||
skin_release="1.0.1"
|
skin_release="0.8.7"
|
||||||
patch_level=""
|
patch_level=""
|
||||||
skin_rev="$skin_release""$patch_level"
|
skin_rev="$skin_release""$patch_level"
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH CDRSKIN 1 "Jan 09, 2011"
|
.TH CDRSKIN 1 "Aug 21, 2010"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -554,9 +554,6 @@ which appear to be in the desired blank or format state already.
|
|||||||
This option enables a burn run with option -dummy even if libburn believes
|
This option enables a burn run with option -dummy even if libburn believes
|
||||||
that drive and media will not simulate the write mode but will write for real.
|
that drive and media will not simulate the write mode but will write for real.
|
||||||
.br
|
.br
|
||||||
It enables a burn run where cdrskin expects to exceed the available media
|
|
||||||
capacity.
|
|
||||||
.br
|
|
||||||
.B Caution:
|
.B Caution:
|
||||||
Use this only when in urgent need.
|
Use this only when in urgent need.
|
||||||
.TP
|
.TP
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
cdrskin.c , Copyright 2006-2011 Thomas Schmitt <scdbackup@gmx.net>
|
cdrskin.c , Copyright 2006-2010 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
|
|
||||||
A cdrecord compatible command line interface for libburn.
|
A cdrecord compatible command line interface for libburn.
|
||||||
@ -88,20 +88,20 @@ or
|
|||||||
|
|
||||||
/** The official program version */
|
/** The official program version */
|
||||||
#ifndef Cdrskin_prog_versioN
|
#ifndef Cdrskin_prog_versioN
|
||||||
#define Cdrskin_prog_versioN "1.0.0"
|
#define Cdrskin_prog_versioN "0.8.6"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** The official libburn interface revision to use.
|
/** The official libburn interface revision to use.
|
||||||
(May get changed further below)
|
(May get changed further below)
|
||||||
*/
|
*/
|
||||||
#ifndef Cdrskin_libburn_majoR
|
#ifndef Cdrskin_libburn_majoR
|
||||||
#define Cdrskin_libburn_majoR 1
|
#define Cdrskin_libburn_majoR 0
|
||||||
#endif
|
#endif
|
||||||
#ifndef Cdrskin_libburn_minoR
|
#ifndef Cdrskin_libburn_minoR
|
||||||
#define Cdrskin_libburn_minoR 0
|
#define Cdrskin_libburn_minoR 8
|
||||||
#endif
|
#endif
|
||||||
#ifndef Cdrskin_libburn_micrO
|
#ifndef Cdrskin_libburn_micrO
|
||||||
#define Cdrskin_libburn_micrO 0
|
#define Cdrskin_libburn_micrO 6
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -135,13 +135,13 @@ or
|
|||||||
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
||||||
|
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_1_0_0
|
#ifdef Cdrskin_libburn_0_8_6
|
||||||
#define Cdrskin_libburn_versioN "1.0.0"
|
#define Cdrskin_libburn_versioN "0.8.6"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif /* Cdrskin_libburn_1_0_0 */
|
#endif /* Cdrskin_libburn_0_8_6 */
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_1_0_1
|
#ifdef Cdrskin_libburn_0_8_7
|
||||||
#define Cdrskin_libburn_versioN "1.0.1"
|
#define Cdrskin_libburn_versioN "0.8.7"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
|
|
||||||
/* Place novelty switch macros here.
|
/* Place novelty switch macros here.
|
||||||
@ -153,29 +153,29 @@ or
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#endif /* Cdrskin_libburn_1_0_1 */
|
#endif /* Cdrskin_libburn_0_8_7 */
|
||||||
|
|
||||||
#ifndef Cdrskin_libburn_versioN
|
#ifndef Cdrskin_libburn_versioN
|
||||||
#define Cdrskin_libburn_1_0_0
|
#define Cdrskin_libburn_0_8_6
|
||||||
#define Cdrskin_libburn_versioN "1.0.0"
|
#define Cdrskin_libburn_versioN "0.8.6"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_1_0_0
|
#ifdef Cdrskin_libburn_0_8_6
|
||||||
#undef Cdrskin_libburn_majoR
|
#undef Cdrskin_libburn_majoR
|
||||||
#undef Cdrskin_libburn_minoR
|
#undef Cdrskin_libburn_minoR
|
||||||
#undef Cdrskin_libburn_micrO
|
#undef Cdrskin_libburn_micrO
|
||||||
#define Cdrskin_libburn_majoR 1
|
#define Cdrskin_libburn_majoR 0
|
||||||
#define Cdrskin_libburn_minoR 0
|
#define Cdrskin_libburn_minoR 8
|
||||||
#define Cdrskin_libburn_micrO 0
|
#define Cdrskin_libburn_micrO 6
|
||||||
#endif
|
#endif
|
||||||
#ifdef Cdrskin_libburn_1_0_1
|
#ifdef Cdrskin_libburn_0_8_7
|
||||||
#undef Cdrskin_libburn_majoR
|
#undef Cdrskin_libburn_majoR
|
||||||
#undef Cdrskin_libburn_minoR
|
#undef Cdrskin_libburn_minoR
|
||||||
#undef Cdrskin_libburn_micrO
|
#undef Cdrskin_libburn_micrO
|
||||||
#define Cdrskin_libburn_majoR 1
|
#define Cdrskin_libburn_majoR 0
|
||||||
#define Cdrskin_libburn_minoR 0
|
#define Cdrskin_libburn_minoR 8
|
||||||
#define Cdrskin_libburn_micrO 1
|
#define Cdrskin_libburn_micrO 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -5143,7 +5143,7 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
|
|||||||
#endif
|
#endif
|
||||||
char media_class[80];
|
char media_class[80];
|
||||||
int nominal_sessions= 1, ftils= 1, ltils= 1, first_track= 1, read_capacity= 0;
|
int nominal_sessions= 1, ftils= 1, ltils= 1, first_track= 1, read_capacity= 0;
|
||||||
int app_code, cd_info_valid, lra, alloc_blocks, free_blocks;
|
int app_code, cd_info_valid, lra;
|
||||||
off_t avail, buf_count;
|
off_t avail, buf_count;
|
||||||
char disc_type[80], bar_code[9], buf[2 * 2048];
|
char disc_type[80], bar_code[9], buf[2 * 2048];
|
||||||
unsigned int disc_id;
|
unsigned int disc_id;
|
||||||
@ -5239,11 +5239,6 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
|
|||||||
printf("Disk type: unrecognizable\n");
|
printf("Disk type: unrecognizable\n");
|
||||||
if(cd_info_valid & 2)
|
if(cd_info_valid & 2)
|
||||||
printf("Disk id: 0x%-X\n", disc_id);
|
printf("Disk id: 0x%-X\n", disc_id);
|
||||||
ret= burn_disc_get_bd_spare_info(drive, &alloc_blocks, &free_blocks, 0);
|
|
||||||
if(ret == 1) {
|
|
||||||
printf("BD Spare Area consumed: %d\n", alloc_blocks - free_blocks);
|
|
||||||
printf("BD Spare Area available: %d\n", free_blocks);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Track Sess Type Start Addr End Addr Size\n");
|
printf("Track Sess Type Start Addr End Addr Size\n");
|
||||||
@ -5644,7 +5639,7 @@ ex:;
|
|||||||
int Cdrskin_list_formats(struct CdrskiN *skin, int flag)
|
int Cdrskin_list_formats(struct CdrskiN *skin, int flag)
|
||||||
{
|
{
|
||||||
struct burn_drive *drive;
|
struct burn_drive *drive;
|
||||||
int ret, i, status, num_formats, profile_no, type, alloc_blocks, free_blocks;
|
int ret, i, status, num_formats, profile_no, type;
|
||||||
off_t size;
|
off_t size;
|
||||||
unsigned dummy;
|
unsigned dummy;
|
||||||
char status_text[80], profile_name[90];
|
char status_text[80], profile_name[90];
|
||||||
@ -5691,10 +5686,6 @@ int Cdrskin_list_formats(struct CdrskiN *skin, int flag)
|
|||||||
} else
|
} else
|
||||||
sprintf(status_text, "illegal status according to MMC-5");
|
sprintf(status_text, "illegal status according to MMC-5");
|
||||||
printf("Format status: %s\n", status_text);
|
printf("Format status: %s\n", status_text);
|
||||||
ret= burn_disc_get_bd_spare_info(drive, &alloc_blocks, &free_blocks, 0);
|
|
||||||
if(ret == 1)
|
|
||||||
printf("BD Spare Area: %d blocks consumed, %d blocks available\n",
|
|
||||||
alloc_blocks - free_blocks, free_blocks);
|
|
||||||
|
|
||||||
for (i = 0; i < num_formats; i++) {
|
for (i = 0; i < num_formats; i++) {
|
||||||
ret= burn_disc_get_format_descr(drive, i, &type, &size, &dummy);
|
ret= burn_disc_get_format_descr(drive, i, &type, &size, &dummy);
|
||||||
@ -7081,10 +7072,6 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag)
|
|||||||
double put_counter, get_counter, empty_counter, full_counter;
|
double put_counter, get_counter, empty_counter, full_counter;
|
||||||
int total_min_fill, fifo_percent;
|
int total_min_fill, fifo_percent;
|
||||||
#endif
|
#endif
|
||||||
#ifdef Cdrskin_libburn_has_get_spacE
|
|
||||||
off_t free_space;
|
|
||||||
char msg[80];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(skin->tell_media_space)
|
if(skin->tell_media_space)
|
||||||
doing= "estimating";
|
doing= "estimating";
|
||||||
@ -7328,12 +7315,17 @@ burn_failed:;
|
|||||||
/* write capacity estimation and return without actual burning */
|
/* write capacity estimation and return without actual burning */
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_has_get_spacE
|
#ifdef Cdrskin_libburn_has_get_spacE
|
||||||
free_space= burn_disc_available_space(drive,o);
|
{
|
||||||
sprintf(msg,"%d\n",(int) (free_space/(off_t) 2048));
|
off_t free_space;
|
||||||
if(skin->preskin->result_fd>=0) {
|
char msg[80];
|
||||||
write(skin->preskin->result_fd,msg,strlen(msg));
|
|
||||||
} else
|
free_space= burn_disc_available_space(drive,o);
|
||||||
printf("%s",msg);
|
sprintf(msg,"%d\n",(int) (free_space/(off_t) 2048));
|
||||||
|
if(skin->preskin->result_fd>=0) {
|
||||||
|
write(skin->preskin->result_fd,msg,strlen(msg));
|
||||||
|
} else
|
||||||
|
printf("%s",msg);
|
||||||
|
}
|
||||||
#endif /* Cdrskin_libburn_has_get_spacE */
|
#endif /* Cdrskin_libburn_has_get_spacE */
|
||||||
|
|
||||||
if(skin->track_counter>0)
|
if(skin->track_counter>0)
|
||||||
@ -7343,23 +7335,6 @@ burn_failed:;
|
|||||||
{ret= 1; goto ex;}
|
{ret= 1; goto ex;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_has_get_spacE
|
|
||||||
if(skin->fixed_size > 0 && !skin->force_is_set) {
|
|
||||||
free_space= burn_disc_available_space(drive,o);
|
|
||||||
if(skin->fixed_size > free_space && free_space > 0) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"cdrskin: FATAL : predicted session size %lus does not fit on media (%lus)\n",
|
|
||||||
(unsigned long) ((skin->fixed_size + 2047.0) / 2048.0),
|
|
||||||
(unsigned long) ((free_space + 2047) / 2048));
|
|
||||||
ClN(fprintf(stderr,
|
|
||||||
"cdrskin: HINT : This test may be disabled by option -force\n");)
|
|
||||||
{ret= 0; goto ex;}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* Cdrskin_libburn_has_get_spacE */
|
|
||||||
|
|
||||||
|
|
||||||
Cdrskin_adjust_speed(skin,0);
|
Cdrskin_adjust_speed(skin,0);
|
||||||
|
|
||||||
#ifndef Cdrskin_extra_leaN
|
#ifndef Cdrskin_extra_leaN
|
||||||
|
@ -65,7 +65,7 @@ connected via SCSI, PATA (aka IDE, ATA), USB, or SATA.
|
|||||||
GPL software included:<BR>
|
GPL software included:<BR>
|
||||||
</H2>
|
</H2>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>libburn-1.0.0</DT>
|
<DT>libburn-0.8.6</DT>
|
||||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||||
developed and maintained since August 2006 by
|
developed and maintained since August 2006 by
|
||||||
Thomas Schmitt from team of libburnia-project.org)
|
Thomas Schmitt from team of libburnia-project.org)
|
||||||
@ -200,8 +200,8 @@ Standalone ISO 9660 multi-session CD/DVD/BD tool
|
|||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>Download as source code (see README):</DT>
|
<DT>Download as source code (see README):</DT>
|
||||||
<DD><A HREF="cdrskin-1.0.0.pl00.tar.gz">cdrskin-1.0.0.pl00.tar.gz</A>
|
<DD><A HREF="cdrskin-0.8.6.pl00.tar.gz">cdrskin-0.8.6.pl00.tar.gz</A>
|
||||||
(870 KB).
|
(850 KB).
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
The cdrskin tarballs are source code identical with libburn releases
|
The cdrskin tarballs are source code identical with libburn releases
|
||||||
@ -250,18 +250,17 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
|||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Enhancements towards previous stable version cdrskin-0.9.0.pl00:
|
Enhancements towards previous stable version cdrskin-0.8.4.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>
|
<LI>
|
||||||
<LI>Allowed umask to create stdio-drive files with rw-permissions for all</LI>
|
Lifted test reservation on DVD-R DL media.
|
||||||
<LI>cdrskin now refuses to burn if the foreseeable size exceeds media capacity
|
|
||||||
</LI>
|
</LI>
|
||||||
<!--
|
<!--
|
||||||
<LI>none</LI>
|
<LI>none</LI>
|
||||||
-->
|
-->
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
Bug fixes towards cdrskin-0.9.0.pl00:
|
Bug fixes towards cdrskin-0.8.4.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none</LI>
|
<LI>none</LI>
|
||||||
<!--
|
<!--
|
||||||
@ -273,8 +272,8 @@ Bug fixes towards cdrskin-0.9.0.pl00:
|
|||||||
|
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Development snapshot, version 1.0.1 :</H3></DT>
|
<DT><H3>Development snapshot, version 0.8.7 :</H3></DT>
|
||||||
<DD>Enhancements towards current stable version 1.0.0.pl00:
|
<DD>Enhancements towards current stable version 0.8.6.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
<LI>none yet</LI>
|
||||||
<!--
|
<!--
|
||||||
@ -284,7 +283,7 @@ Bug fixes towards cdrskin-0.9.0.pl00:
|
|||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DD>Bug fixes towards cdrskin-1.0.0.pl00:
|
<DD>Bug fixes towards cdrskin-0.8.6.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
<LI>none yet</LI>
|
||||||
<!--
|
<!--
|
||||||
@ -294,10 +293,10 @@ Bug fixes towards cdrskin-0.9.0.pl00:
|
|||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DD><A HREF="README_cdrskin_devel">README 1.0.1</A>
|
<DD><A HREF="README_cdrskin_devel">README 0.8.7</A>
|
||||||
<DD><A HREF="cdrskin__help_devel">cdrskin-1.0.1 --help</A></DD>
|
<DD><A HREF="cdrskin__help_devel">cdrskin_0.8.7 --help</A></DD>
|
||||||
<DD><A HREF="cdrskin_help_devel">cdrskin-1.0.1 -help</A></DD>
|
<DD><A HREF="cdrskin_help_devel">cdrskin_0.8.7 -help</A></DD>
|
||||||
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 1.0.1)</A></DD>
|
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.8.7)</A></DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
||||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
||||||
@ -317,8 +316,8 @@ admins with full system souvereignty.</DT>
|
|||||||
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
<A HREF="cdrskin-1.0.1.tar.gz">cdrskin-1.0.1.tar.gz</A>
|
<A HREF="cdrskin-0.8.7.tar.gz">cdrskin-0.8.7.tar.gz</A>
|
||||||
(870 KB).
|
(850 KB).
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<!-- This is not offered any more since spring 2008
|
<!-- This is not offered any more since spring 2008
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2011.01.16.123001"
|
#define Cdrskin_timestamP "2010.09.16.113001"
|
||||||
|
@ -8763,348 +8763,28 @@ Made number transition to 0.8.6
|
|||||||
+ cdrskin/add_ts_changes_to_libburn_0_8_7
|
+ cdrskin/add_ts_changes_to_libburn_0_8_7
|
||||||
Updated cdrskin tarball generator
|
Updated cdrskin tarball generator
|
||||||
|
|
||||||
16 Sep 2010 [3376]
|
16 Sep 2010 []
|
||||||
ChangeLog
|
ChangeLog
|
||||||
cdrskin/changelog.txt
|
cdrskin/changelog.txt
|
||||||
Documented changes and release timestamp
|
Documented changes and release timestamp
|
||||||
|
|
||||||
------------------------------ release - cdrskin-0.8.6.pl00 - 2010.09.16.113001
|
------------------------------ release - cdrskin-0.8.4.pl00 - 2010.06.30.100001
|
||||||
* Lifted test reservation on DVD-R DL media.
|
* Lifted test reservation on DVD-R DL media.
|
||||||
* Hiding all non-API symbols from the linker by use of --version-script
|
* Hiding all non-API symbols from the linker by use of --version-script
|
||||||
|
|
||||||
|
|
||||||
2010.09.17.073827 [3377]
|
|
||||||
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.8.7
|
|
||||||
|
|
||||||
17 Sep 2010 [3378]
|
------------------------------------ cycle - cdrskin-0.8.7 -
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_8_4
|
------------------------------------ cycle - cdrskin-0.8.7 -
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_8_5
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_8_6
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_8_7
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
17 Sep 2010 [3379]
|
|
||||||
ChangeLog
|
|
||||||
cdrskin/changelog.txt
|
|
||||||
Documented changes and release timestamp
|
|
||||||
|
|
||||||
17 Sep 2010 [3381]
|
|
||||||
svn move -m libburn release 0.8.6 is ready
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroEightSix
|
|
||||||
http://svn.libburnia-project.org/libburn/tags/ZeroEightSix
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.8.7 - 2010.09.17.082926
|
|
||||||
|
|
||||||
2010.09.22.105426 [3395]
|
|
||||||
acinclude.m4
|
|
||||||
configure.ac
|
|
||||||
Makefile.am
|
|
||||||
README
|
|
||||||
On Linux: Run ldconfig during make install,if not --disable-ldconfig-at-install
|
|
||||||
|
|
||||||
2010.09.22.175054 [3397]
|
|
||||||
libburn/libburn.h
|
|
||||||
libburn/libburn.ver
|
|
||||||
libburn/libdax_msgs.h
|
|
||||||
libburn/file.h
|
|
||||||
libburn/file.c
|
|
||||||
libburn/source.h
|
|
||||||
libburn/source.c
|
|
||||||
New API call burn_offst_source_new()
|
|
||||||
|
|
||||||
2010.09.22.180921 [3398]
|
|
||||||
Makefile.am
|
|
||||||
+ test/offst_source.c
|
|
||||||
Temporarily added test program for burn_offst_source_new()
|
|
||||||
|
|
||||||
22 Sep 2010 [3399]
|
|
||||||
test/offst_source.c
|
|
||||||
Better default input file for test/offst_source.c
|
|
||||||
|
|
||||||
2010.09.24.090631 [3401]
|
|
||||||
libburn/libburn.h
|
|
||||||
libburn/drive.c
|
|
||||||
libburn/mmc.h
|
|
||||||
libburn/mmc.c
|
|
||||||
ChangeLog
|
|
||||||
New API call burn_disc_get_bd_spare_info()
|
|
||||||
|
|
||||||
2010.09.24.090731 [3402]
|
|
||||||
cdrskin/cdrskin.c
|
|
||||||
Displaying eventual BD spare area information with -minfo
|
|
||||||
|
|
||||||
2010.09.24.091902 [3403]
|
|
||||||
cdrskin/cdrskin.c
|
|
||||||
Displaying eventual BD spare area information with --list_formats
|
|
||||||
|
|
||||||
2010.09.24.092535 [3404]
|
|
||||||
libburn/libburn.ver
|
|
||||||
Making new API call available in dynamic library
|
|
||||||
|
|
||||||
2010.09.24.100255 [3405]
|
|
||||||
cdrskin/cdrskin.c
|
|
||||||
Polished appearance of BD spare info with --list_formats
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.8.7 - 2010.09.24.100255
|
|
||||||
* New API call burn_offst_source_new()
|
|
||||||
* New API call burn_disc_get_bd_spare_info()
|
|
||||||
|
|
||||||
|
|
||||||
2010.09.28.101043 [3408]
|
|
||||||
libburn/mmc.c
|
|
||||||
Avoiding to inquire spare area of unsuitable media
|
|
||||||
|
|
||||||
2010.10.15.191717 [3445]
|
|
||||||
libburn/write.c
|
|
||||||
libburn/libdax_msgs.h
|
|
||||||
Issue warning after writing a BD-R with more than 300 sessions
|
|
||||||
|
|
||||||
2010.10.19.165908 [3450]
|
|
||||||
libburn/async.c
|
|
||||||
libburn/write.c
|
|
||||||
libburn/libdax_msgs.h
|
|
||||||
Issueing messages with all cases of burn canceling
|
|
||||||
|
|
||||||
20 Oct 2010 [3453]
|
|
||||||
svn copy -m Branching for libburn release 0.8.8
|
|
||||||
http://svn.libburnia-project.org/libburn/trunk
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroEightEight
|
|
||||||
|
|
||||||
2010.10.20.120001 [3454]
|
|
||||||
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.8.8
|
|
||||||
|
|
||||||
20 Oct 2010 [3455]
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_8_6
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_8_7
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_8_8
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_8_9
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
20 Oct 2010 [3456]
|
|
||||||
ChangeLog
|
|
||||||
cdrskin/changelog.txt
|
|
||||||
Documented changes and release timestamp
|
|
||||||
|
|
||||||
------------------------------ release - cdrskin-0.8.8.pl00 - 2010.10.20.120001
|
|
||||||
* New API call burn_offst_source_new()
|
|
||||||
* New API call burn_disc_get_bd_spare_info()
|
|
||||||
|
|
||||||
|
|
||||||
2010.10.20.125207 [3457]
|
|
||||||
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.8.9
|
|
||||||
|
|
||||||
20 Oct 2010 [3458]
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_8_6
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_8_7
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_8_8
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_8_9
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
20 Oct 2010 [3459]
|
|
||||||
ChangeLog
|
|
||||||
cdrskin/changelog.txt
|
|
||||||
Documented changes and release timestamp
|
|
||||||
|
|
||||||
20 Oct 2010
|
|
||||||
svn move -m libburn release 0.8.8 is ready
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroEightEight
|
|
||||||
http://svn.libburnia-project.org/libburn/tags/ZeroEightEight
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.8.9 - 2010.10.20.134102
|
|
||||||
|
|
||||||
|
|
||||||
2010.10.29.164059 [3474]
|
|
||||||
libburn/mmc.c
|
|
||||||
libburn/libdax_msgs.h
|
|
||||||
Issueing error messages if cache syncing or closing fails
|
|
||||||
|
|
||||||
2010.10.29.174455 [3476]
|
|
||||||
libburn/spc.c
|
|
||||||
Regression fix: SCSI reply data logging was disabled in rev 3368, 0.8.6
|
|
||||||
|
|
||||||
2010.11.16.131221 [3483]
|
|
||||||
libburn/sg-linux.c
|
|
||||||
libburn/sg-freebsd.c
|
|
||||||
libburn/sg-libcdio.c
|
|
||||||
libburn/sg-solaris.c
|
|
||||||
Removed outdated development macros
|
|
||||||
|
|
||||||
08 Dec 2010 [3502]
|
|
||||||
svn copy -m Branching for libburn release 0.9.0
|
|
||||||
http://svn.libburnia-project.org/libburn/trunk
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroNineZero
|
|
||||||
|
|
||||||
2010.12.08.133001 [3503]
|
|
||||||
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.9.0
|
|
||||||
|
|
||||||
08 Dec 2010 [3504]
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_8_8
|
|
||||||
- cdrskin/add_ts_changes_to_lisburn_0_8_9
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_9_0
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_9_1
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
08 Dec 2010 [3505]
|
|
||||||
ChangeLog
|
|
||||||
cdrskin/changelog.txt
|
|
||||||
Documented changes and release timestamp
|
|
||||||
|
|
||||||
------------------------------ release - cdrskin-0.9.0.pl00 - 2010.12.08.133001
|
|
||||||
Regression fix: SCSI reply data logging was disabled in release 0.8.6
|
|
||||||
|
|
||||||
|
|
||||||
2010.12.08.131934 [3506]
|
|
||||||
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.9.1
|
|
||||||
|
|
||||||
08 Dec 2010 [3507]
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_8_8
|
|
||||||
- cdrskin/add_ts_changes_to_lisburn_0_8_9
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_9_0
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_0_9_1
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
08 Dec 2010 [3508]
|
|
||||||
ChangeLog
|
|
||||||
cdrskin/changelog.txt
|
|
||||||
Documented changes and release timestamp
|
|
||||||
|
|
||||||
08 Dec 2010 [3509]
|
|
||||||
svn move -m libburn release 0.9.0 is ready
|
|
||||||
http://svn.libburnia-project.org/libburn/branches/ZeroNineZero
|
|
||||||
http://svn.libburnia-project.org/libburn/tags/ZeroNineZero
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.9.1 - 2010.12.08.154833
|
|
||||||
|
|
||||||
2010.12.13.075956 [3522]
|
|
||||||
configure.ac
|
|
||||||
Prepending ./configure generated options to CFLAGS rather than appending them
|
|
||||||
|
|
||||||
23 Dec 2010 [3528]
|
|
||||||
doc/comments
|
|
||||||
Updated API introduction
|
|
||||||
|
|
||||||
2010.12.28.071904 [3537]
|
|
||||||
libburn/write.c
|
|
||||||
Allowed umask to create stdio-drive files with rw-permissions for all
|
|
||||||
|
|
||||||
2011.01.03.195125 [3542]
|
|
||||||
libburn/write.c
|
|
||||||
libburn/sector.c
|
|
||||||
libburn/structure.h
|
|
||||||
libburn/structure.c
|
|
||||||
Allowed stdio tracks of known size to end in TAO mode on premature EOF
|
|
||||||
|
|
||||||
2011.01.09.135915 [3546]
|
|
||||||
cdrskin/cdrskin.c
|
|
||||||
cdrskin/cdrskin.1
|
|
||||||
Refusing to burn if foreseeable size exceeds media capacity
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-0.9.1 - 2011.01.09.140240
|
|
||||||
* Allowed umask to create stdio-drive files with rw-permissions for all
|
|
||||||
* cdrskin now refuses to burn if the foreseeable size exceeds media capacity
|
|
||||||
|
|
||||||
|
|
||||||
09 Jan 2011 [3547]
|
|
||||||
cdrskin/cdrskin_eng.html
|
|
||||||
ChangeLog
|
|
||||||
Updated change log and web page
|
|
||||||
|
|
||||||
16 Jan 2011 [3548]
|
|
||||||
svn copy -m "Branching for libburn release 1.0.0" \
|
|
||||||
http://svn.libburnia-project.org/libburn/trunk \
|
|
||||||
http://svn.libburnia-project.org/libburn/1.0.0"
|
|
||||||
|
|
||||||
2011.01.16.123001 [3549] [3550]
|
|
||||||
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 1.0.0
|
|
||||||
|
|
||||||
16 Jan 2011 [3551]
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_9_0
|
|
||||||
- cdrskin/add_ts_changes_to_libburn_0_9_1
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_1_0_0
|
|
||||||
+ cdrskin/add_ts_changes_to_libburn_1_0_1
|
|
||||||
Updated cdrskin tarball generator
|
|
||||||
|
|
||||||
[]
|
|
||||||
ChangeLog
|
|
||||||
cdrskin/changelog.txt
|
|
||||||
Documented changes and release timestamp
|
|
||||||
|
|
||||||
------------------------------ release - cdrskin-1.0.0.pl00 - 2011.01.16.123001
|
|
||||||
* Allowed umask to create stdio-drive files with rw-permissions for all
|
|
||||||
* cdrskin now refuses to burn if the foreseeable size exceeds media capacity
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------ cycle - cdrskin-1.0.1 -
|
|
||||||
------------------------------------ cycle - cdrskin-1.0.1 -
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**********************************************************************
|
|
||||||
Important: When adding a public API function then add its name to file
|
|
||||||
libburn/libburn.ver
|
|
||||||
**********************************************************************
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
TODO
|
TODO
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
||||||
|
|
||||||
Better motivation of burn_set_signal_handling() in libburn.h.
|
Better motivation of burn_set_signal_handling() in libburn.h.
|
||||||
|
|
||||||
|
|
||||||
-------------------------------- Solaris -----------------------------------
|
-------------------------------- Solaris -----------------------------------
|
||||||
|
|
||||||
Locking of device files.
|
Locking of device files.
|
||||||
@ -9126,6 +8806,11 @@ pntadm -A 10.0.0.24 -f MANUAL -i 010008544255E7 -m 10.0.0.0 -y 10.0.0.0
|
|||||||
|
|
||||||
--------------------------------- bugs -------------------------------------
|
--------------------------------- bugs -------------------------------------
|
||||||
|
|
||||||
|
- recognise sense data format 0x72 rather than 0x70
|
||||||
|
Key=[1], ASC=[2], ASCQ=[3]
|
||||||
|
(check libcdio too)
|
||||||
|
|
||||||
|
|
||||||
- handle HD DVD profiles 0x50 "HD DVD-ROM", 0x51 "HD DVD-R", 0x52 "HD DVD-RAM"
|
- handle HD DVD profiles 0x50 "HD DVD-ROM", 0x51 "HD DVD-R", 0x52 "HD DVD-RAM"
|
||||||
as readable.
|
as readable.
|
||||||
|
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# compile_cdrskin.sh
|
# compile_cdrskin.sh
|
||||||
# Copyright 2005 - 2011 Thomas Schmitt, scdbackup@gmx.net, GPL
|
# Copyright 2005 - 2010 Thomas Schmitt, scdbackup@gmx.net, GPL
|
||||||
# to be executed within ./libburn-* resp ./cdrskin-*
|
# to be executed within ./libburn-* resp ./cdrskin-*
|
||||||
|
|
||||||
debug_opts="-O2"
|
debug_opts="-O2"
|
||||||
def_opts=
|
def_opts=
|
||||||
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
||||||
fifo_opts=""
|
fifo_opts=""
|
||||||
libvers="-DCdrskin_libburn_1_0_0"
|
libvers="-DCdrskin_libburn_0_8_6"
|
||||||
|
|
||||||
# To be used if Makefile.am uses libburn_libburn_la_CFLAGS
|
# To be used if Makefile.am uses libburn_libburn_la_CFLAGS
|
||||||
# burn="libburn/libburn_libburn_la-"
|
# burn="libburn/libburn_libburn_la-"
|
||||||
@ -47,15 +47,15 @@ do
|
|||||||
libdax_audioxtr_o=
|
libdax_audioxtr_o=
|
||||||
libdax_msgs_o="$burn"message.o
|
libdax_msgs_o="$burn"message.o
|
||||||
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
||||||
elif test "$i" = "-libburn_1_0_0"
|
elif test "$i" = "-libburn_0_8_6"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_1_0_0"
|
libvers="-DCdrskin_libburn_0_8_6"
|
||||||
libdax_audioxtr_o="$burn"libdax_audioxtr.o
|
libdax_audioxtr_o="$burn"libdax_audioxtr.o
|
||||||
libdax_msgs_o="$burn"libdax_msgs.o
|
libdax_msgs_o="$burn"libdax_msgs.o
|
||||||
cleanup_src_or_obj="$burn"cleanup.o
|
cleanup_src_or_obj="$burn"cleanup.o
|
||||||
elif test "$i" = "-libburn_svn"
|
elif test "$i" = "-libburn_svn"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_1_0_1"
|
libvers="-DCdrskin_libburn_0_8_7"
|
||||||
libdax_audioxtr_o="$burn"libdax_audioxtr.o
|
libdax_audioxtr_o="$burn"libdax_audioxtr.o
|
||||||
libdax_msgs_o="$burn"libdax_msgs.o
|
libdax_msgs_o="$burn"libdax_msgs.o
|
||||||
cleanup_src_or_obj="$burn"cleanup.o
|
cleanup_src_or_obj="$burn"cleanup.o
|
||||||
@ -109,7 +109,7 @@ do
|
|||||||
echo "Options:"
|
echo "Options:"
|
||||||
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
||||||
echo " -compile_dewav compile program test/dewav without libburn."
|
echo " -compile_dewav compile program test/dewav without libburn."
|
||||||
echo " -libburn_1_0_0 set macro to match libburn-1.0.0"
|
echo " -libburn_0_8_6 set macro to match libburn-0.8.6"
|
||||||
echo " -libburn_svn set macro to match current libburn-SVN."
|
echo " -libburn_svn set macro to match current libburn-SVN."
|
||||||
echo " -dvd_obs_64k 64 KB default size for DVD/BD writing."
|
echo " -dvd_obs_64k 64 KB default size for DVD/BD writing."
|
||||||
echo " -use_libcdio link with -lcdio because libburn uses it."
|
echo " -use_libcdio link with -lcdio because libburn uses it."
|
||||||
|
50
configure.ac
50
configure.ac
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([libburn], [1.0.0], [http://libburnia-project.org])
|
AC_INIT([libburn], [0.8.6], [http://libburnia-project.org])
|
||||||
AC_PREREQ([2.50])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -9,7 +9,7 @@ LIBBURNIA_SET_FLAGS
|
|||||||
|
|
||||||
AM_INIT_AUTOMAKE([subdir-objects])
|
AM_INIT_AUTOMAKE([subdir-objects])
|
||||||
|
|
||||||
dnl Notes by ts A71207 - B10116 :
|
dnl Notes by ts A71207 - B00630 :
|
||||||
dnl
|
dnl
|
||||||
dnl Regrettably the meaning of the various version types was misunderstood
|
dnl Regrettably the meaning of the various version types was misunderstood
|
||||||
dnl before version 0.4.1.
|
dnl before version 0.4.1.
|
||||||
@ -84,9 +84,6 @@ dnl 0.8.0 = libburn.so.4.45.0
|
|||||||
dnl 0.8.2 = libburn.so.4.47.0
|
dnl 0.8.2 = libburn.so.4.47.0
|
||||||
dnl 0.8.4 = libburn.so.4.49.0
|
dnl 0.8.4 = libburn.so.4.49.0
|
||||||
dnl 0.8.6 = libburn.so.4.51.0
|
dnl 0.8.6 = libburn.so.4.51.0
|
||||||
dnl 0.8.8 = libburn.so.4.53.0
|
|
||||||
dnl 0.9.0 = libburn.so.4.55.0
|
|
||||||
dnl 1.0.0 = libburn.so.4.57.0
|
|
||||||
dnl
|
dnl
|
||||||
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
|
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
|
||||||
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
|
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
|
||||||
@ -110,9 +107,9 @@ dnl
|
|||||||
dnl If BURN_*_VERSION changes, be sure to change AC_INIT above to match.
|
dnl If BURN_*_VERSION changes, be sure to change AC_INIT above to match.
|
||||||
dnl
|
dnl
|
||||||
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
|
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
|
||||||
BURN_MAJOR_VERSION=1
|
BURN_MAJOR_VERSION=0
|
||||||
BURN_MINOR_VERSION=0
|
BURN_MINOR_VERSION=8
|
||||||
BURN_MICRO_VERSION=0
|
BURN_MICRO_VERSION=6
|
||||||
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||||
|
|
||||||
AC_SUBST(BURN_MAJOR_VERSION)
|
AC_SUBST(BURN_MAJOR_VERSION)
|
||||||
@ -123,14 +120,14 @@ AC_SUBST(BURN_VERSION)
|
|||||||
dnl Libtool versioning
|
dnl Libtool versioning
|
||||||
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||||
dnl
|
dnl
|
||||||
dnl ### This is the release version libburn-1.0.0
|
dnl ### This is the release version libburn-0.8.6
|
||||||
dnl This is the development version after above release version
|
dnl This is the development version after above release version
|
||||||
dnl LT_CURRENT++, LT_AGE++ has not yet happened.
|
dnl LT_CURRENT++, LT_AGE++ has not yet happened.
|
||||||
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||||
dnl
|
dnl
|
||||||
dnl SONAME = 61 - 57 = 4 . Linux library name = libburn.so.4.57.0
|
dnl SONAME = 55 - 51 = 4 . Linux library name = libburn.so.4.51.0
|
||||||
LT_CURRENT=61
|
LT_CURRENT=55
|
||||||
LT_AGE=57
|
LT_AGE=51
|
||||||
LT_REVISION=0
|
LT_REVISION=0
|
||||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||||
|
|
||||||
@ -188,7 +185,7 @@ AC_CHECK_HEADER(sys/statvfs.h, X=, STATVFS_DEF=)
|
|||||||
AC_CHECK_FUNC([statvfs], X=, STATVFS_DEF=)
|
AC_CHECK_FUNC([statvfs], X=, STATVFS_DEF=)
|
||||||
dnl If this would be done more specifically in Makefile.am
|
dnl If this would be done more specifically in Makefile.am
|
||||||
dnl via libburn_libburn_la_CFLAGS then undesired .o file names would emerge
|
dnl via libburn_libburn_la_CFLAGS then undesired .o file names would emerge
|
||||||
CFLAGS="$STATVFS_DEF $CFLAGS"
|
CFLAGS="$CFLAGS $STATVFS_DEF"
|
||||||
|
|
||||||
dnl ts A91122
|
dnl ts A91122
|
||||||
AC_ARG_ENABLE(track-src-odirect,
|
AC_ARG_ENABLE(track-src-odirect,
|
||||||
@ -203,7 +200,7 @@ else
|
|||||||
fi
|
fi
|
||||||
dnl Avoid the need for libburn_libburn_la_CFLAGS in Makefile.am (ugly .o names)
|
dnl Avoid the need for libburn_libburn_la_CFLAGS in Makefile.am (ugly .o names)
|
||||||
dnl ### AC_SUBST(LIBBURN_O_DIRECT_DEF)
|
dnl ### AC_SUBST(LIBBURN_O_DIRECT_DEF)
|
||||||
CFLAGS="$LIBBURN_O_DIRECT_DEF $CFLAGS"
|
CFLAGS="$CFLAGS $LIBBURN_O_DIRECT_DEF"
|
||||||
|
|
||||||
dnl ts A91116
|
dnl ts A91116
|
||||||
AC_ARG_ENABLE(dvd-obs-64k,
|
AC_ARG_ENABLE(dvd-obs-64k,
|
||||||
@ -216,7 +213,7 @@ else
|
|||||||
LIBBURN_DVD_OBS_64K=
|
LIBBURN_DVD_OBS_64K=
|
||||||
echo "disabled write size default 64 KB on DVD and BD"
|
echo "disabled write size default 64 KB on DVD and BD"
|
||||||
fi
|
fi
|
||||||
CFLAGS="$LIBBURN_DVD_OBS_64K $CFLAGS"
|
CFLAGS="$CFLAGS $LIBBURN_DVD_OBS_64K"
|
||||||
|
|
||||||
dnl ts A91218
|
dnl ts A91218
|
||||||
AC_ARG_ENABLE(libcdio,
|
AC_ARG_ENABLE(libcdio,
|
||||||
@ -239,7 +236,7 @@ then
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "enabled EXPERIMENTAL use of libcdio as system adapter"
|
echo "enabled EXPERIMENTAL use of libcdio as system adapter"
|
||||||
CFLAGS="$LIBCDIO_DEF $CFLAGS"
|
CFLAGS="$CFLAGS $LIBCDIO_DEF"
|
||||||
|
|
||||||
LIBCDIO_REQUIRED=0.83
|
LIBCDIO_REQUIRED=0.83
|
||||||
PKG_CHECK_MODULES(LIBCDIO, libcdio >= $LIBCDIO_REQUIRED)
|
PKG_CHECK_MODULES(LIBCDIO, libcdio >= $LIBCDIO_REQUIRED)
|
||||||
@ -267,17 +264,6 @@ else
|
|||||||
echo "disabled strict symbol encapsulation"
|
echo "disabled strict symbol encapsulation"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE(ldconfig-at-install,
|
|
||||||
[ --enable-ldconfig-at-install On GNU/Linux run ldconfig, default=yes],
|
|
||||||
, ldconfig_at_install=yes)
|
|
||||||
if test x$ldconfig_at_install = xyes; then
|
|
||||||
dummy=dummy
|
|
||||||
else
|
|
||||||
LIBBURNIA_LDCONFIG_CMD="echo 'NOTE: ldconfig is disabled. If needed, configure manually for:'"
|
|
||||||
echo "disabled run of ldconfig during installation on GNU/Linux"
|
|
||||||
fi
|
|
||||||
AC_SUBST(LIBBURNIA_LDCONFIG_CMD)
|
|
||||||
|
|
||||||
|
|
||||||
dnl Add compiler-specific flags
|
dnl Add compiler-specific flags
|
||||||
|
|
||||||
@ -287,15 +273,15 @@ AC_ARG_ENABLE(debug,
|
|||||||
, enable_debug=yes)
|
, enable_debug=yes)
|
||||||
if test x$enable_debug != xyes; then
|
if test x$enable_debug != xyes; then
|
||||||
if test x$GCC = xyes; then
|
if test x$GCC = xyes; then
|
||||||
CFLAGS="-O3 $CFLAGS"
|
CFLAGS="$CFLAGS -O3"
|
||||||
CFLAGS="-fexpensive-optimizations $CFLAGS"
|
CFLAGS="$CFLAGS -fexpensive-optimizations"
|
||||||
fi
|
fi
|
||||||
CFLAGS="-DNDEBUG $CFLAGS"
|
CFLAGS="$CFLAGS -DNDEBUG"
|
||||||
else
|
else
|
||||||
if test x$GCC = xyes; then
|
if test x$GCC = xyes; then
|
||||||
CFLAGS="-g -pedantic -Wall $CFLAGS"
|
CFLAGS="$CFLAGS -g -pedantic -Wall"
|
||||||
fi
|
fi
|
||||||
CFLAGS="-DDEBUG $CFLAGS"
|
CFLAGS="$CFLAGS -DDEBUG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl Determine target directory for libburn-*.pc
|
dnl Determine target directory for libburn-*.pc
|
||||||
|
13
doc/comments
13
doc/comments
@ -8,13 +8,14 @@
|
|||||||
Libburnia is an open-source project for reading, mastering and writing
|
Libburnia is an open-source project for reading, mastering and writing
|
||||||
optical discs. This page is about its capability to handle optical media.
|
optical discs. This page is about its capability to handle optical media.
|
||||||
For now this means CD-R, CD-RW, DVD-RAM, DVD+RW, DVD+R, DVD+R/DL, DVD-RW,
|
For now this means CD-R, CD-RW, DVD-RAM, DVD+RW, DVD+R, DVD+R/DL, DVD-RW,
|
||||||
DVD-R, DVD-R/DL, BD-R, BD-RE.
|
DVD-R, BD-R, BD-RE.
|
||||||
|
|
||||||
Our scope is currently Linux 2.4 and 2.6, or FreeBSD, or Solaris . For ports
|
Not supported yet are DVD-R/DL. Testers wanted.
|
||||||
to other systems we would need : login on a development machine resp.
|
|
||||||
an OS ithat is installable on an AMD 64-bit PC, advise from a system person
|
Our scope is currently Linux 2.4 and 2.6, or FreeBSD . For ports to other
|
||||||
about the equivalent of Linux sg or FreeBSD CAM, volunteers for testing of
|
systems we would need : login on a development machine resp. a live OS on CD
|
||||||
realistic use cases.
|
or DVD, advise from a system person about the equivalent of Linux sg or FreeBSD
|
||||||
|
CAM, volunteers for testing of realistic use cases.
|
||||||
|
|
||||||
libburn is the library by which preformatted data get onto optical media.
|
libburn is the library by which preformatted data get onto optical media.
|
||||||
Its code is independent of cdrecord. Its DVD capabilities are learned from
|
Its code is independent of cdrecord. Its DVD capabilities are learned from
|
||||||
|
@ -644,13 +644,8 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
|||||||
d->cancel = 1;
|
d->cancel = 1;
|
||||||
|
|
||||||
/* ts A70203 : people have been warned in API specs */
|
/* ts A70203 : people have been warned in API specs */
|
||||||
if (opts->write_type == BURN_WRITE_NONE) {
|
if (opts->write_type == BURN_WRITE_NONE)
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
|
||||||
0x0002017c,
|
|
||||||
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
"No valid write type selected", 0, 0);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if (d->drive_role == 0) {
|
if (d->drive_role == 0) {
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
|
@ -2836,18 +2836,3 @@ int burn_disc_get_cd_info(struct burn_drive *d, char disc_type[80],
|
|||||||
*valid = d->disc_info_valid;
|
*valid = d->disc_info_valid;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ts B00924 : API */
|
|
||||||
int burn_disc_get_bd_spare_info(struct burn_drive *d,
|
|
||||||
int *alloc_blocks, int *free_blocks, int flag)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (burn_drive_get_drive_role(d) != 1)
|
|
||||||
return 0;
|
|
||||||
*alloc_blocks = *free_blocks = 0;
|
|
||||||
ret = mmc_get_bd_spare_info(d, alloc_blocks, free_blocks, 0);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
164
libburn/file.c
164
libburn/file.c
@ -481,11 +481,10 @@ int burn_fifo_source_shoveller(struct burn_source *source, int flag)
|
|||||||
|
|
||||||
int burn_fifo_cancel(struct burn_source *source)
|
int burn_fifo_cancel(struct burn_source *source)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
struct burn_source_fifo *fs = source->data;
|
struct burn_source_fifo *fs = source->data;
|
||||||
|
|
||||||
ret = burn_source_cancel(fs->inp);
|
burn_source_cancel(fs->inp);
|
||||||
return ret;
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -748,162 +747,3 @@ int burn_fifo_fill(struct burn_source *source, int bufsize, int flag)
|
|||||||
1 | ((flag & 1) << 1));
|
1 | ((flag & 1) << 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------- Offset source ----------------------------- */
|
|
||||||
/* ts B00922 */
|
|
||||||
|
|
||||||
static void offst_free(struct burn_source *source);
|
|
||||||
|
|
||||||
static struct burn_source_offst *offst_auth(struct burn_source *source)
|
|
||||||
{
|
|
||||||
if (source->free_data != offst_free) {
|
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x0002017a,
|
|
||||||
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
"Expected offset source object as parameter",
|
|
||||||
0, 0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return (struct burn_source_offst *) source->data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static off_t offst_get_size(struct burn_source *source)
|
|
||||||
{
|
|
||||||
struct burn_source_offst *fs;
|
|
||||||
|
|
||||||
if ((fs = offst_auth(source)) == NULL)
|
|
||||||
return (off_t) 0;
|
|
||||||
return fs->size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int offst_set_size(struct burn_source *source, off_t size)
|
|
||||||
{
|
|
||||||
struct burn_source_offst *fs;
|
|
||||||
|
|
||||||
if ((fs = offst_auth(source)) == NULL)
|
|
||||||
return 0;
|
|
||||||
fs->size = size;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void offst_free(struct burn_source *source)
|
|
||||||
{
|
|
||||||
struct burn_source_offst *fs;
|
|
||||||
|
|
||||||
if ((fs = offst_auth(source)) == NULL)
|
|
||||||
return;
|
|
||||||
if (fs->prev != NULL)
|
|
||||||
offst_auth(fs->prev)->next = fs->next;
|
|
||||||
if (fs->next != NULL)
|
|
||||||
offst_auth(fs->next)->prev = fs->prev;
|
|
||||||
if (fs->inp != NULL)
|
|
||||||
burn_source_free(fs->inp); /* i.e. decrement refcount */
|
|
||||||
free(source->data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int offst_read(struct burn_source *source, unsigned char *buffer,
|
|
||||||
int size)
|
|
||||||
{
|
|
||||||
int ret, to_read, todo;
|
|
||||||
struct burn_source_offst *fs;
|
|
||||||
|
|
||||||
if ((fs = offst_auth(source)) == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
/* Eventually skip bytes up to start position */;
|
|
||||||
if (!fs->running) {
|
|
||||||
if (fs->prev != NULL)
|
|
||||||
fs->pos = offst_auth(fs->prev)->pos;
|
|
||||||
fs->running= 1;
|
|
||||||
}
|
|
||||||
if(fs->pos < fs->start) {
|
|
||||||
todo = fs->start - fs->pos;
|
|
||||||
while (todo > 0) {
|
|
||||||
to_read = todo;
|
|
||||||
if (to_read > size)
|
|
||||||
to_read = size;
|
|
||||||
ret = burn_source_read(fs->inp, buffer, to_read);
|
|
||||||
if (ret <= 0)
|
|
||||||
return ret;
|
|
||||||
todo -= ret;
|
|
||||||
fs->pos += ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Produce EOF if source size is exhausted.
|
|
||||||
burn_source delivers no incomplete sector buffers.
|
|
||||||
*/
|
|
||||||
if (fs->pos + size > fs->start + fs->size)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Read payload */
|
|
||||||
ret = burn_source_read(fs->inp, buffer, size);
|
|
||||||
if (ret > 0)
|
|
||||||
fs->pos += ret;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int offst_cancel(struct burn_source *source)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct burn_source_offst *fs;
|
|
||||||
|
|
||||||
if ((fs = offst_auth(source)) == NULL)
|
|
||||||
return -1;
|
|
||||||
ret = burn_source_cancel(fs->inp);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct burn_source *burn_offst_source_new(
|
|
||||||
struct burn_source *inp, struct burn_source *prev,
|
|
||||||
off_t start, off_t size, int flag)
|
|
||||||
{
|
|
||||||
struct burn_source *src;
|
|
||||||
struct burn_source_offst *fs, *prev_fs = NULL;
|
|
||||||
|
|
||||||
if (prev != NULL)
|
|
||||||
if ((prev_fs = offst_auth(prev)) == NULL)
|
|
||||||
return NULL; /* Not type burn_source_offst */
|
|
||||||
|
|
||||||
fs = calloc(1, sizeof(struct burn_source_offst));
|
|
||||||
if (fs == NULL)
|
|
||||||
return NULL;
|
|
||||||
src = burn_source_new();
|
|
||||||
if (src == NULL) {
|
|
||||||
free((char *) fs);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
src->read = NULL;
|
|
||||||
src->read_sub = NULL;
|
|
||||||
src->get_size = offst_get_size;
|
|
||||||
src->set_size = offst_set_size;
|
|
||||||
src->free_data = offst_free;
|
|
||||||
src->data = fs;
|
|
||||||
src->version= 1;
|
|
||||||
src->read_xt = offst_read;
|
|
||||||
src->cancel= offst_cancel;
|
|
||||||
fs->inp = inp;
|
|
||||||
fs->prev = prev;
|
|
||||||
fs->next = NULL;
|
|
||||||
if (prev != NULL) {
|
|
||||||
if (prev_fs->next != NULL) {
|
|
||||||
offst_auth(prev_fs->next)->prev = src;
|
|
||||||
fs->next = prev_fs->next;
|
|
||||||
}
|
|
||||||
prev_fs->next = src;
|
|
||||||
if (prev_fs->start + prev_fs->size > start) {
|
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020179,
|
|
||||||
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
"Offset source start address is before end of previous source",
|
|
||||||
0, 0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fs->start = start;
|
|
||||||
fs->size = size;
|
|
||||||
fs->running = 0;
|
|
||||||
fs->pos = 0;
|
|
||||||
inp->refcount++; /* make sure inp lives longer than src */
|
|
||||||
|
|
||||||
return src;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -74,22 +74,4 @@ struct burn_source_fifo {
|
|||||||
int burn_fifo_source_shoveller(struct burn_source *source, int flag);
|
int burn_fifo_source_shoveller(struct burn_source *source, int flag);
|
||||||
|
|
||||||
|
|
||||||
/* ts B00922 */
|
|
||||||
struct burn_source_offst {
|
|
||||||
|
|
||||||
/* See burn_offst_source_new() */
|
|
||||||
struct burn_source *inp;
|
|
||||||
struct burn_source *prev;
|
|
||||||
off_t start;
|
|
||||||
off_t size;
|
|
||||||
|
|
||||||
/* To help offst_free() */
|
|
||||||
struct burn_source *next;
|
|
||||||
|
|
||||||
/* The current reading position */
|
|
||||||
int running;
|
|
||||||
off_t pos;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* LIBBURN__FILE_H */
|
#endif /* LIBBURN__FILE_H */
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2010 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
|
|
||||||
This is the official API definition of libburn.
|
This is the official API definition of libburn.
|
||||||
@ -1237,29 +1237,12 @@ char *burn_guess_cd_manufacturer(int m_li, int s_li, int f_li,
|
|||||||
bit5= Disc is nominally erasable (Erasable bit)
|
bit5= Disc is nominally erasable (Erasable bit)
|
||||||
This will be set with overwriteable media which
|
This will be set with overwriteable media which
|
||||||
libburn normally considers to be unerasable blank.
|
libburn normally considers to be unerasable blank.
|
||||||
@return 1 success, <= 0 an error occured
|
|
||||||
@since 0.7.2
|
@since 0.7.2
|
||||||
*/
|
*/
|
||||||
int burn_disc_get_cd_info(struct burn_drive *d, char disc_type[80],
|
int burn_disc_get_cd_info(struct burn_drive *d, char disc_type[80],
|
||||||
unsigned int *disc_id, char bar_code[9], int *app_code,
|
unsigned int *disc_id, char bar_code[9], int *app_code,
|
||||||
int *valid);
|
int *valid);
|
||||||
|
|
||||||
/* ts B00924 */
|
|
||||||
/** Read the current usage of the eventual BD Spare Area. This area gets
|
|
||||||
reserved on BD media during formatting. During writing it is used to
|
|
||||||
host replacements of blocks which failed the checkread immediately after
|
|
||||||
writing.
|
|
||||||
This call applies only to recordable BD media. I.e. profiles 0x41 to 0x43.
|
|
||||||
@param d The drive to query.
|
|
||||||
@param alloc_blocks Returns the number of blocks reserved as Spare Area
|
|
||||||
@param free_blocks Returns the number of yet unused blocks in that area
|
|
||||||
@param flag Bitfield for control purposes (unused yet, submit 0)
|
|
||||||
@return 1 = reply prarameters are valid,
|
|
||||||
<=0 = reply is invalid (e.g. because no BD profile)
|
|
||||||
@since 0.8.8
|
|
||||||
*/
|
|
||||||
int burn_disc_get_bd_spare_info(struct burn_drive *d,
|
|
||||||
int *alloc_blocks, int *free_blocks, int flag);
|
|
||||||
|
|
||||||
/* ts A61110 */
|
/* ts A61110 */
|
||||||
/** Read start lba and Next Writeable Address of a track from media.
|
/** Read start lba and Next Writeable Address of a track from media.
|
||||||
@ -1328,10 +1311,9 @@ off_t burn_disc_available_space(struct burn_drive *d,
|
|||||||
0xffff "stdio file"
|
0xffff "stdio file"
|
||||||
Note: 0xffff is not a MMC profile but a libburn invention.
|
Note: 0xffff is not a MMC profile but a libburn invention.
|
||||||
Read-only are the profiles
|
Read-only are the profiles
|
||||||
0x08 "CD-ROM",
|
0x08 "CD-ROM", 0x10 "DVD-ROM",
|
||||||
0x10 "DVD-ROM",
|
|
||||||
0x40 "BD-ROM",
|
0x40 "BD-ROM",
|
||||||
Read-only for now is this BD-R profile (testers wanted)
|
For now read-only is BD-R profile (testers wanted)
|
||||||
0x42 "BD-R random recording"
|
0x42 "BD-R random recording"
|
||||||
@param d The drive where the media is inserted.
|
@param d The drive where the media is inserted.
|
||||||
@param pno Profile Number. See also mmc5r03c.pdf, table 89
|
@param pno Profile Number. See also mmc5r03c.pdf, table 89
|
||||||
@ -1907,41 +1889,6 @@ int burn_os_free_buffer(void *buffer, size_t amount, int flag);
|
|||||||
struct burn_source *burn_fd_source_new(int datafd, int subfd, off_t size);
|
struct burn_source *burn_fd_source_new(int datafd, int subfd, off_t size);
|
||||||
|
|
||||||
|
|
||||||
/* ts B00922 */
|
|
||||||
/** Creates an offset source which shall provide a byte interval of a stream
|
|
||||||
to its consumer. It is supposed to be chain-linked with other offset
|
|
||||||
sources which serve neighboring consumers. The chronological sequence
|
|
||||||
of consumers and the sequence of offset sources must match. The intervals
|
|
||||||
of the sources must not overlap.
|
|
||||||
|
|
||||||
A chain of these burn_source objects may be used to feed multiple tracks
|
|
||||||
from one single stream of input bytes.
|
|
||||||
Each of the offset sources will skip the bytes up to its start address and
|
|
||||||
provide the prescribed number of bytes to the track. Skipping takes into
|
|
||||||
respect the bytes which have been processed by eventual predecessors in the
|
|
||||||
chain.
|
|
||||||
Important: It is not allowed to free an offset source before its successor
|
|
||||||
has ended its work. Best is to keep them all until all tracks
|
|
||||||
are done.
|
|
||||||
|
|
||||||
@param inp The burn_source object from which to read stream data.
|
|
||||||
E.g. created by burn_file_source_new().
|
|
||||||
@param prev The eventual offset source object which shall read data from
|
|
||||||
inp before the new offset source will begin its own work.
|
|
||||||
This must either be a result of burn_offst_source_new() or
|
|
||||||
it must be NULL.
|
|
||||||
@param start The byte address where to start reading bytes for the
|
|
||||||
consumer. inp bytes may get skipped to reach this address.
|
|
||||||
@param size The number of bytes to be delivered to the consumer.
|
|
||||||
@param flag Bitfield for control purposes (unused yet, submit 0).
|
|
||||||
@return Pointer to a burn_source object, later to be freed by
|
|
||||||
burn_source_free(). NULL indicates failure.
|
|
||||||
@since 0.8.8
|
|
||||||
*/
|
|
||||||
struct burn_source *burn_offst_source_new(
|
|
||||||
struct burn_source *inp, struct burn_source *prev,
|
|
||||||
off_t start, off_t size, int flag);
|
|
||||||
|
|
||||||
/* ts A70930 */
|
/* ts A70930 */
|
||||||
/** Creates a fifo which acts as proxy for an already existing data source.
|
/** Creates a fifo which acts as proxy for an already existing data source.
|
||||||
The fifo provides a ring buffer which shall smoothen the data stream
|
The fifo provides a ring buffer which shall smoothen the data stream
|
||||||
@ -2690,9 +2637,9 @@ void burn_version(int *major, int *minor, int *micro);
|
|||||||
}
|
}
|
||||||
|
|
||||||
*/
|
*/
|
||||||
#define burn_header_version_major 1
|
#define burn_header_version_major 0
|
||||||
#define burn_header_version_minor 0
|
#define burn_header_version_minor 8
|
||||||
#define burn_header_version_micro 0
|
#define burn_header_version_micro 6
|
||||||
/** Note:
|
/** Note:
|
||||||
Above version numbers are also recorded in configure.ac because libtool
|
Above version numbers are also recorded in configure.ac because libtool
|
||||||
wants them as parameters at build time.
|
wants them as parameters at build time.
|
||||||
|
@ -11,7 +11,6 @@ burn_disc_erase;
|
|||||||
burn_disc_format;
|
burn_disc_format;
|
||||||
burn_disc_free;
|
burn_disc_free;
|
||||||
burn_disc_free_multi_caps;
|
burn_disc_free_multi_caps;
|
||||||
burn_disc_get_bd_spare_info;
|
|
||||||
burn_disc_get_cd_info;
|
burn_disc_get_cd_info;
|
||||||
burn_disc_get_format_descr;
|
burn_disc_get_format_descr;
|
||||||
burn_disc_get_formats;
|
burn_disc_get_formats;
|
||||||
@ -84,7 +83,6 @@ burn_msgs_obtain;
|
|||||||
burn_msgs_set_severities;
|
burn_msgs_set_severities;
|
||||||
burn_msgs_submit;
|
burn_msgs_submit;
|
||||||
burn_obtain_profile_name;
|
burn_obtain_profile_name;
|
||||||
burn_offst_source_new;
|
|
||||||
burn_os_alloc_buffer;
|
burn_os_alloc_buffer;
|
||||||
burn_os_free_buffer;
|
burn_os_free_buffer;
|
||||||
burn_os_open_track_src;
|
burn_os_open_track_src;
|
||||||
|
@ -558,13 +558,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
|||||||
0x00020176 (NOTE,HIGH) = Stream recording disabled because of small OS buffer
|
0x00020176 (NOTE,HIGH) = Stream recording disabled because of small OS buffer
|
||||||
0x00020177 (ABORT,HIGH) = Urged drive worker threads to do emergency halt
|
0x00020177 (ABORT,HIGH) = Urged drive worker threads to do emergency halt
|
||||||
0x00020178 (DEBUG,HIGH) = Write thread ended
|
0x00020178 (DEBUG,HIGH) = Write thread ended
|
||||||
0x00020179 (FAILURE,HIGH) = Offset source start address is before end of previous source
|
|
||||||
0x0002017a (FAILURE,HIGH) = Expected offset source object as parameter
|
|
||||||
0x0002017b (WARNING,HIGH) = Sequential BD-R media likely to soon fail writing
|
|
||||||
0x0002017c (FAILURE,HIGH) = No valid write type selected
|
|
||||||
0x0002017d (FATAL,HIGH) = Invalid file descriptor with stdio pseudo-drive
|
|
||||||
0x0002017e (FAILURE,HIGH) = Failed to close track, session, or disc
|
|
||||||
0x0002017f (FAILURE,HIGH) = Failed to synchronize drive cache
|
|
||||||
|
|
||||||
libdax_audioxtr:
|
libdax_audioxtr:
|
||||||
0x00020200 (SORRY,HIGH) = Cannot open audio source file
|
0x00020200 (SORRY,HIGH) = Cannot open audio source file
|
||||||
|
@ -521,8 +521,6 @@ void mmc_close_session(struct burn_write_opts *o)
|
|||||||
void mmc_close(struct burn_drive *d, int session, int track)
|
void mmc_close(struct burn_drive *d, int session, int track)
|
||||||
{
|
{
|
||||||
struct command c;
|
struct command c;
|
||||||
char msg[256];
|
|
||||||
int key, asc, ascq;
|
|
||||||
|
|
||||||
if (mmc_function_spy(d, "mmc_close") <= 0)
|
if (mmc_function_spy(d, "mmc_close") <= 0)
|
||||||
return;
|
return;
|
||||||
@ -546,16 +544,6 @@ void mmc_close(struct burn_drive *d, int session, int track)
|
|||||||
|
|
||||||
/* ts A70918 : Immed : wait for drive to complete command */
|
/* ts A70918 : Immed : wait for drive to complete command */
|
||||||
if (c.error) {
|
if (c.error) {
|
||||||
sprintf(msg, "Failed to close %s (%d)",
|
|
||||||
session > 1 ? "disc" : session > 0 ? "session" : "track",
|
|
||||||
((session & 3) << 1) | !!track);
|
|
||||||
sprintf(msg + strlen(msg), ". SCSI error : ");
|
|
||||||
scsi_error_msg(d, c.sense, 14, msg + strlen(msg),
|
|
||||||
&key, &asc, &ascq);
|
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
|
||||||
0x0002017e,
|
|
||||||
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
msg, 0, 0);
|
|
||||||
d->cancel = 1;
|
d->cancel = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2910,8 +2898,6 @@ int mmc_read_format_capacities(struct burn_drive *d, int top_wanted)
|
|||||||
void mmc_sync_cache(struct burn_drive *d)
|
void mmc_sync_cache(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
struct command c;
|
struct command c;
|
||||||
char msg[256];
|
|
||||||
int key, asc, ascq;
|
|
||||||
|
|
||||||
if (mmc_function_spy(d, "mmc_sync_cache") <= 0)
|
if (mmc_function_spy(d, "mmc_sync_cache") <= 0)
|
||||||
return;
|
return;
|
||||||
@ -2947,14 +2933,6 @@ void mmc_sync_cache(struct burn_drive *d)
|
|||||||
|
|
||||||
/* ts A70918 */
|
/* ts A70918 */
|
||||||
if (c.error) {
|
if (c.error) {
|
||||||
sprintf(msg, "Failed to synchronize drive cache");
|
|
||||||
sprintf(msg + strlen(msg), ". SCSI error : ");
|
|
||||||
scsi_error_msg(d, c.sense, 14, msg + strlen(msg),
|
|
||||||
&key, &asc, &ascq);
|
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
|
||||||
0x0002017f,
|
|
||||||
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
msg, 0, 0);
|
|
||||||
d->cancel = 1;
|
d->cancel = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3898,11 +3876,6 @@ int mmc_compose_mode_page_5(struct burn_drive *d,
|
|||||||
|
|
||||||
pd[4] = spc_block_type(o->block_type);
|
pd[4] = spc_block_type(o->block_type);
|
||||||
|
|
||||||
/*
|
|
||||||
fprintf(stderr, "libburn_EXPERIMENTAL: block_type = %d, pd[4]= %u\n",
|
|
||||||
o->block_type, (unsigned int) pd[4]);
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* ts A61104 */
|
/* ts A61104 */
|
||||||
if(!(o->control&4)) /* audio (MMC-1 table 61) */
|
if(!(o->control&4)) /* audio (MMC-1 table 61) */
|
||||||
if(o->write_type == BURN_WRITE_TAO)
|
if(o->write_type == BURN_WRITE_TAO)
|
||||||
@ -4154,7 +4127,7 @@ static int mmc_set_product_id(char *reply,
|
|||||||
|
|
||||||
|
|
||||||
/* ts A90903 */
|
/* ts A90903 */
|
||||||
/* MMC backend of API call burn_disc_get_media_id()
|
/* MMC backend of API call burn_get_media_product_id()
|
||||||
See also doc/mediainfo.txt
|
See also doc/mediainfo.txt
|
||||||
@param flag Bitfield for control purposes
|
@param flag Bitfield for control purposes
|
||||||
bit0= do not escape " _/" (not suitable for
|
bit0= do not escape " _/" (not suitable for
|
||||||
@ -4341,33 +4314,6 @@ ex:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ts B00924
|
|
||||||
MMC-5, 6.23.3.3.4 Format Code 0Ah: Spare Area Information
|
|
||||||
*/
|
|
||||||
int mmc_get_bd_spare_info(struct burn_drive *d,
|
|
||||||
int *alloc_blocks, int *free_blocks, int flag)
|
|
||||||
{
|
|
||||||
int ret, reply_len, prf;
|
|
||||||
char *reply = NULL;
|
|
||||||
|
|
||||||
prf = d->current_profile;
|
|
||||||
if (!(prf == 0x41 || prf == 0x43 || prf == 0x42))
|
|
||||||
return 0; /* Not a BD loaded */
|
|
||||||
|
|
||||||
ret = mmc_read_disc_structure(d, 1, 0, 0x0a, 12, &reply,
|
|
||||||
&reply_len, 0);
|
|
||||||
if (ret <= 0)
|
|
||||||
goto ex;
|
|
||||||
*alloc_blocks = mmc_four_char_to_int((unsigned char *) reply + 8);
|
|
||||||
*free_blocks = mmc_four_char_to_int((unsigned char *) reply + 4);
|
|
||||||
ret = 1;
|
|
||||||
ex:;
|
|
||||||
if (reply != NULL)
|
|
||||||
free(reply);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ts A61021 : the mmc specific part of sg.c:enumerate_common()
|
/* ts A61021 : the mmc specific part of sg.c:enumerate_common()
|
||||||
*/
|
*/
|
||||||
int mmc_setup_drive(struct burn_drive *d)
|
int mmc_setup_drive(struct burn_drive *d)
|
||||||
|
@ -106,8 +106,5 @@ int mmc_function_spy(struct burn_drive *d, char * text);
|
|||||||
/* ts A91118 */
|
/* ts A91118 */
|
||||||
int mmc_start_if_needed(struct burn_drive *d, int flag);
|
int mmc_start_if_needed(struct burn_drive *d, int flag);
|
||||||
|
|
||||||
/* ts B00924 */
|
|
||||||
int mmc_get_bd_spare_info(struct burn_drive *d,
|
|
||||||
int *alloc_blocks, int *free_blocks, int flag);
|
|
||||||
|
|
||||||
#endif /*__MMC*/
|
#endif /*__MMC*/
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2010 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -179,14 +179,10 @@ static void get_bytes(struct burn_track *track, int count, unsigned char *data)
|
|||||||
if (!shortage)
|
if (!shortage)
|
||||||
goto ex;
|
goto ex;
|
||||||
|
|
||||||
/* ts A61031 - B10103 */
|
/* ts A61031 */
|
||||||
if (shortage >= count)
|
if (shortage >= count)
|
||||||
track->track_data_done = 1;
|
track->track_data_done = 1;
|
||||||
if (track->end_on_premature_eoi && !track->open_ended) {
|
if (track->open_ended)
|
||||||
/* Memorize that premature end of input happened */
|
|
||||||
track->end_on_premature_eoi = 2;
|
|
||||||
}
|
|
||||||
if (track->open_ended || track->end_on_premature_eoi)
|
|
||||||
goto ex;
|
goto ex;
|
||||||
|
|
||||||
/* If we're still short, and there's a "next" pointer, we pull from that.
|
/* If we're still short, and there's a "next" pointer, we pull from that.
|
||||||
@ -692,7 +688,7 @@ int sector_data(struct burn_write_opts *o, struct burn_track *t, int psub)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* ts A61031 */
|
/* ts A61031 */
|
||||||
if ((t->open_ended || t->end_on_premature_eoi) && t->track_data_done) {
|
if (t->open_ended && t->track_data_done) {
|
||||||
unget_sector(o, t->mode);
|
unget_sector(o, t->mode);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
@ -766,6 +766,8 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
static FILE *fp = NULL;
|
static FILE *fp = NULL;
|
||||||
time_t start_time;
|
time_t start_time;
|
||||||
|
|
||||||
|
#define Libburn_use_scsi_eval_cmd_outcomE yes
|
||||||
|
|
||||||
snprintf(buf, sizeof (buf),
|
snprintf(buf, sizeof (buf),
|
||||||
"sg_issue_command d->cam=%p d->released=%d",
|
"sg_issue_command d->cam=%p d->released=%d",
|
||||||
(void*)d->cam, d->released);
|
(void*)d->cam, d->released);
|
||||||
@ -959,19 +961,67 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
no_retry = 1;
|
no_retry = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* >>> Need own duration time measurement.
|
|
||||||
Then remove bit1 from flag.
|
#ifdef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
*/
|
|
||||||
done = scsi_eval_cmd_outcome(d, c, fp, c->sense,
|
done = scsi_eval_cmd_outcome(d, c, fp, c->sense,
|
||||||
sense_len, 0, start_time,
|
sense_len, 0, start_time,
|
||||||
timeout_ms, i,
|
timeout_ms, i,
|
||||||
2 | !!ignore_error);
|
2 | !!ignore_error);
|
||||||
|
|
||||||
|
#else /* Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
|
if (no_retry || ignore_error || !c->retry) {
|
||||||
|
c->error = 1;
|
||||||
|
{ret = 1; goto ex;}
|
||||||
|
}
|
||||||
|
switch (scsi_error(d, c->sense, 0)) {
|
||||||
|
case RETRY:
|
||||||
|
done = 0;
|
||||||
|
if (burn_sg_log_scsi & 3) {
|
||||||
|
/* >>> Need own duration time
|
||||||
|
measurement. Then remove bit1 */
|
||||||
|
scsi_log_err(c, fp, c->sense,
|
||||||
|
sense_len > 0 ? sense_len : 18,
|
||||||
|
0, 1 | 2);
|
||||||
|
scsi_log_cmd(c,fp,0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FAIL:
|
||||||
|
done = 1;
|
||||||
|
c->error = 1;
|
||||||
|
break;
|
||||||
|
case GO_ON:
|
||||||
|
if (burn_sg_log_scsi & 3)
|
||||||
|
/* >>> Need own duration time
|
||||||
|
measurement. Then remove bit1 */
|
||||||
|
scsi_log_err(c, fp, c->sense,
|
||||||
|
sense_len > 0 ? sense_len : 18,
|
||||||
|
0, 1 | 2);
|
||||||
|
{ret = 1; goto ex;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* ! Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
done = 1;
|
done = 1;
|
||||||
}
|
}
|
||||||
} while (!done);
|
} while (!done);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
ex:;
|
ex:;
|
||||||
|
|
||||||
|
#ifndef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
|
||||||
|
if (c->error)
|
||||||
|
scsi_notify_error(d, c, c->sense, 18, 0);
|
||||||
|
|
||||||
|
if (burn_sg_log_scsi & 3)
|
||||||
|
/* >>> Need own duration time measurement. Then remove bit1 */
|
||||||
|
scsi_log_err(c, fp, c->sense, sense_len > 0 ? sense_len : 18,
|
||||||
|
0, (c->error != 0) | 2);
|
||||||
|
|
||||||
|
#endif /* ! Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
cam_freeccb(ccb);
|
cam_freeccb(ccb);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -586,6 +586,9 @@ int sg_release(struct burn_drive *d)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define Libburn_use_scsi_eval_cmd_outcomE yes
|
||||||
|
|
||||||
|
|
||||||
/** Sends a SCSI command to the drive, receives reply and evaluates wether
|
/** Sends a SCSI command to the drive, receives reply and evaluates wether
|
||||||
the command succeeded or shall be retried or finally failed.
|
the command succeeded or shall be retried or finally failed.
|
||||||
Returned SCSI errors shall not lead to a return value indicating failure.
|
Returned SCSI errors shall not lead to a return value indicating failure.
|
||||||
@ -608,6 +611,10 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
CdIo_t *p_cdio;
|
CdIo_t *p_cdio;
|
||||||
unsigned char *sense_pt = NULL;
|
unsigned char *sense_pt = NULL;
|
||||||
|
|
||||||
|
#ifndef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
int usleep_time;
|
||||||
|
#endif
|
||||||
|
|
||||||
c->error = 0;
|
c->error = 0;
|
||||||
if (d->p_cdio == NULL) {
|
if (d->p_cdio == NULL) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -688,13 +695,68 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i_status != 0 || (key || asc || ascq)) {
|
if (i_status != 0 || (key || asc || ascq)) {
|
||||||
|
|
||||||
|
#ifdef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
|
||||||
done = scsi_eval_cmd_outcome(d, c, fp, c->sense, 18,
|
done = scsi_eval_cmd_outcome(d, c, fp, c->sense, 18,
|
||||||
0, start_time, timeout_ms, i, 2);
|
0, start_time, timeout_ms, i, 2);
|
||||||
|
|
||||||
|
#else /* Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
|
if (no_retry || !c->retry) {
|
||||||
|
c->error = 1;
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
switch (scsi_error(d, c->sense, 18)) {
|
||||||
|
case RETRY:
|
||||||
|
if (burn_sg_log_scsi & 3) {
|
||||||
|
/* >>> Need own duration time
|
||||||
|
measurement. Then remove bit1 */
|
||||||
|
scsi_log_err(c, fp, c->sense, 18, 0,
|
||||||
|
1 | 2);
|
||||||
|
scsi_log_cmd(c,fp,0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FAIL:
|
||||||
|
c->error = 1;
|
||||||
|
goto ex;
|
||||||
|
case GO_ON:
|
||||||
|
if (burn_sg_log_scsi & 3)
|
||||||
|
/* >>> Need own duration time
|
||||||
|
measurement. Then remove bit1 */
|
||||||
|
scsi_log_err(c, fp, c->sense, 18, 0,
|
||||||
|
1 | 2);
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Calming down retries and breaking up endless cycle
|
||||||
|
*/
|
||||||
|
usleep_time = Libburn_sg_libcdio_retry_usleeP +
|
||||||
|
i * Libburn_sg_libcdio_retry_incR;
|
||||||
|
if (time(NULL) + usleep_time / 1000000 - start_time >
|
||||||
|
timeout_ms / 1000 + 1) {
|
||||||
|
c->error = 1;
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
usleep(usleep_time);
|
||||||
|
#endif /* ! Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
} else
|
} else
|
||||||
done = 1;
|
done = 1;
|
||||||
|
|
||||||
} /* end of retry-loop */
|
} /* end of retry-loop */
|
||||||
|
|
||||||
|
#ifndef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
|
||||||
|
ex:;
|
||||||
|
if (c->error)
|
||||||
|
scsi_notify_error(d, c, c->sense, 18, 0);
|
||||||
|
if (burn_sg_log_scsi & 3)
|
||||||
|
/* >>> Need own duration time measurement. Then remove bit1 */
|
||||||
|
scsi_log_err(c, fp, c->sense, 18, 0, (c->error != 0) | 2);
|
||||||
|
|
||||||
|
#endif /* ! Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,6 +731,10 @@ failed:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define Libburn_drive_new_deaL 1
|
||||||
|
|
||||||
|
#ifdef Libburn_drive_new_deaL
|
||||||
|
|
||||||
/* ts A80731 */
|
/* ts A80731 */
|
||||||
static int is_ata_drive(char *fname)
|
static int is_ata_drive(char *fname)
|
||||||
{
|
{
|
||||||
@ -896,12 +900,23 @@ static int is_scsi_drive(char *fname, int *bus_no, int *host_no,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* Libburn_drive_new_deaL */
|
||||||
|
|
||||||
|
|
||||||
/** Speciality of GNU/Linux: detect non-SCSI ATAPI (EIDE) which will from
|
/** Speciality of GNU/Linux: detect non-SCSI ATAPI (EIDE) which will from
|
||||||
then on used used via generic SCSI as is done with (emulated) SCSI drives */
|
then on used used via generic SCSI as is done with (emulated) SCSI drives */
|
||||||
static void ata_enumerate(void)
|
static void ata_enumerate(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifdef Libburn_drive_new_deaL
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
#else
|
||||||
|
struct hd_driveid tm;
|
||||||
|
int fd;
|
||||||
|
#endif
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
char fname[10];
|
char fname[10];
|
||||||
|
|
||||||
@ -923,11 +938,57 @@ static void ata_enumerate(void)
|
|||||||
fprintf(stderr, "not in whitelist\n");
|
fprintf(stderr, "not in whitelist\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Libburn_drive_new_deaL
|
||||||
|
|
||||||
ret = is_ata_drive(fname);
|
ret = is_ata_drive(fname);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
break;
|
break;
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
#else /* Libburn_drive_new_deaL */
|
||||||
|
|
||||||
|
fd = sg_open_drive_fd(fname, 1);
|
||||||
|
if (fd == -1) {
|
||||||
|
if (linux_ata_enumerate_verbous)
|
||||||
|
fprintf(stderr,"open failed, errno=%d '%s'\n",
|
||||||
|
errno, strerror(errno));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* found a drive */
|
||||||
|
ioctl(fd, HDIO_GET_IDENTITY, &tm);
|
||||||
|
|
||||||
|
/* not atapi */
|
||||||
|
if (!(tm.config & 0x8000) || (tm.config & 0x4000)) {
|
||||||
|
if (linux_ata_enumerate_verbous)
|
||||||
|
fprintf(stderr, "not marked as ATAPI\n");
|
||||||
|
sg_close_drive_fd(fname, -1, &fd, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if SG_IO fails on an atapi device, we should stop trying to
|
||||||
|
use hd* devices */
|
||||||
|
if (sgio_test(fd) == -1) {
|
||||||
|
if (linux_ata_enumerate_verbous)
|
||||||
|
fprintf(stderr,
|
||||||
|
"FATAL: sgio_test() failed: errno=%d '%s'\n",
|
||||||
|
errno, strerror(errno));
|
||||||
|
sg_close_drive_fd(fname, -1, &fd, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (sg_close_drive_fd(fname, -1, &fd, 1) <= 0) {
|
||||||
|
if (linux_ata_enumerate_verbous)
|
||||||
|
fprintf(stderr,
|
||||||
|
"cannot close properly, errno=%d '%s'\n",
|
||||||
|
errno, strerror(errno));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* Libburn_drive_new_deaL */
|
||||||
|
|
||||||
|
|
||||||
if (linux_ata_enumerate_verbous)
|
if (linux_ata_enumerate_verbous)
|
||||||
fprintf(stderr, "accepting as drive without SCSI address\n");
|
fprintf(stderr, "accepting as drive without SCSI address\n");
|
||||||
enumerate_common(fname, -1, -1, -1, -1, -1);
|
enumerate_common(fname, -1, -1, -1, -1, -1);
|
||||||
@ -938,6 +999,15 @@ static void ata_enumerate(void)
|
|||||||
/** Detects (probably emulated) SCSI drives */
|
/** Detects (probably emulated) SCSI drives */
|
||||||
static void sg_enumerate(void)
|
static void sg_enumerate(void)
|
||||||
{
|
{
|
||||||
|
#ifdef Libburn_drive_new_deaL
|
||||||
|
|
||||||
|
#else
|
||||||
|
struct sg_scsi_id sid;
|
||||||
|
int fd, sibling_fds[BURN_OS_SG_MAX_SIBLINGS], sibling_count= 0;
|
||||||
|
char sibling_fnames[BURN_OS_SG_MAX_SIBLINGS][BURN_OS_SG_MAX_NAMELEN];
|
||||||
|
int sid_ret = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
int i, ret;
|
int i, ret;
|
||||||
int bus_no= -1, host_no= -1, channel_no= -1, target_no= -1, lun_no= -1;
|
int bus_no= -1, host_no= -1, channel_no= -1, target_no= -1, lun_no= -1;
|
||||||
char fname[17];
|
char fname[17];
|
||||||
@ -967,6 +1037,9 @@ static void sg_enumerate(void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef Libburn_drive_new_deaL
|
||||||
|
|
||||||
ret = is_scsi_drive(fname, &bus_no, &host_no, &channel_no,
|
ret = is_scsi_drive(fname, &bus_no, &host_no, &channel_no,
|
||||||
&target_no, &lun_no);
|
&target_no, &lun_no);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -979,10 +1052,132 @@ static void sg_enumerate(void)
|
|||||||
enumerate_common(fname, bus_no, host_no, channel_no,
|
enumerate_common(fname, bus_no, host_no, channel_no,
|
||||||
target_no, lun_no);
|
target_no, lun_no);
|
||||||
|
|
||||||
|
#else /* Libburn_drive_new_deaL */
|
||||||
|
|
||||||
|
/* ts A60927 */
|
||||||
|
fd = sg_open_drive_fd(fname, 1);
|
||||||
|
if (fd == -1) {
|
||||||
|
if (linux_sg_enumerate_debug)
|
||||||
|
fprintf(stderr, "open failed, errno=%d '%s'\n",
|
||||||
|
errno, strerror(errno));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* found a drive */
|
||||||
|
sid_ret = ioctl(fd, SG_GET_SCSI_ID, &sid);
|
||||||
|
if (sid_ret == -1) {
|
||||||
|
sid.scsi_id = -1; /* mark SCSI address as invalid */
|
||||||
|
if(linux_sg_enumerate_debug)
|
||||||
|
fprintf(stderr,
|
||||||
|
"ioctl(SG_GET_SCSI_ID) failed, errno=%d '%s' , ",
|
||||||
|
errno, strerror(errno));
|
||||||
|
|
||||||
|
if (sgio_test(fd) == -1) {
|
||||||
|
if (linux_sg_enumerate_debug)
|
||||||
|
fprintf(stderr,
|
||||||
|
"FATAL: sgio_test() failed: errno=%d '%s'",
|
||||||
|
errno, strerror(errno));
|
||||||
|
|
||||||
|
sg_close_drive_fd(fname, -1, &fd, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CDROM_DRIVE_STATUS
|
||||||
|
/* ts A61211 : not widening old acceptance range */
|
||||||
|
if (strcmp(linux_sg_device_family,"/dev/sg%d") != 0) {
|
||||||
|
/* http://developer.osdl.org/dev/robustmutexes/
|
||||||
|
src/fusyn.hg/Documentation/ioctl/cdrom.txt */
|
||||||
|
sid_ret = ioctl(fd, CDROM_DRIVE_STATUS, 0);
|
||||||
|
if(linux_sg_enumerate_debug)
|
||||||
|
fprintf(stderr,
|
||||||
|
"ioctl(CDROM_DRIVE_STATUS) = %d , ",
|
||||||
|
sid_ret);
|
||||||
|
if (sid_ret != -1 && sid_ret != CDS_NO_INFO)
|
||||||
|
sid.scsi_type = TYPE_ROM;
|
||||||
|
else
|
||||||
|
sid_ret = -1;
|
||||||
|
}
|
||||||
|
#endif /* CDROM_DRIVE_STATUS */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SCSI_IOCTL_GET_BUS_NUMBER
|
||||||
|
/* Hearsay A61005 */
|
||||||
|
if (ioctl(fd, SCSI_IOCTL_GET_BUS_NUMBER, &bus_no) == -1)
|
||||||
|
bus_no = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (sg_close_drive_fd(fname, -1, &fd,
|
||||||
|
sid.scsi_type == TYPE_ROM ) <= 0) {
|
||||||
|
if (linux_sg_enumerate_debug)
|
||||||
|
fprintf(stderr,
|
||||||
|
"cannot close properly, errno=%d '%s'\n",
|
||||||
|
errno, strerror(errno));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ( (sid_ret == -1 || sid.scsi_type != TYPE_ROM)
|
||||||
|
&& !linux_sg_accept_any_type) {
|
||||||
|
if (linux_sg_enumerate_debug)
|
||||||
|
fprintf(stderr, "sid.scsi_type = %d (!= TYPE_ROM)\n",
|
||||||
|
sid.scsi_type);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sid_ret == -1 || sid.scsi_id < 0) {
|
||||||
|
/* ts A61211 : employ a more general ioctl */
|
||||||
|
ret = sg_obtain_scsi_adr(fname, &bus_no, &host_no,
|
||||||
|
&channel_no, &target_no, &lun_no);
|
||||||
|
if (ret>0) {
|
||||||
|
sid.host_no = host_no;
|
||||||
|
sid.channel = channel_no;
|
||||||
|
sid.scsi_id = target_no;
|
||||||
|
sid.lun = lun_no;
|
||||||
|
} else {
|
||||||
|
if (linux_sg_enumerate_debug)
|
||||||
|
fprintf(stderr,
|
||||||
|
"sg_obtain_scsi_adr() failed\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ts A60927 : trying to do locking with growisofs */
|
||||||
|
if(burn_sg_open_o_excl>1) {
|
||||||
|
ret = sg_open_scsi_siblings(
|
||||||
|
fname, -1, sibling_fds, sibling_fnames,
|
||||||
|
&sibling_count,
|
||||||
|
sid.host_no, sid.channel,
|
||||||
|
sid.scsi_id, sid.lun);
|
||||||
|
if (ret<=0) {
|
||||||
|
if (linux_sg_enumerate_debug)
|
||||||
|
fprintf(stderr, "cannot lock siblings\n");
|
||||||
|
sg_handle_busy_device(fname, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* the final occupation will be done in sg_grab() */
|
||||||
|
sg_release_siblings(sibling_fds, sibling_fnames,
|
||||||
|
&sibling_count);
|
||||||
|
}
|
||||||
|
#ifdef SCSI_IOCTL_GET_BUS_NUMBER
|
||||||
|
if(bus_no == -1)
|
||||||
|
bus_no = 1000 * (sid.host_no + 1) + sid.channel;
|
||||||
|
#else
|
||||||
|
bus_no = sid.host_no;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (linux_sg_enumerate_debug)
|
||||||
|
fprintf(stderr, "accepting as SCSI %d,%d,%d,%d bus=%d\n",
|
||||||
|
sid.host_no, sid.channel, sid.scsi_id, sid.lun,
|
||||||
|
bus_no);
|
||||||
|
enumerate_common(fname, bus_no, sid.host_no, sid.channel,
|
||||||
|
sid.scsi_id, sid.lun);
|
||||||
|
#endif /* Libburn_drive_new_deaL */
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef Libburn_drive_new_deaL
|
||||||
|
|
||||||
|
|
||||||
/* ts A80805 : eventually produce the other official name of a device file */
|
/* ts A80805 : eventually produce the other official name of a device file */
|
||||||
static int fname_other_name(char *fname, char other_name[80], int flag)
|
static int fname_other_name(char *fname, char other_name[80], int flag)
|
||||||
@ -1182,6 +1377,8 @@ static int add_proc_info_drives(int flag)
|
|||||||
return 1 + count;
|
return 1 + count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* Libburn_drive_new_deaL */
|
||||||
|
|
||||||
|
|
||||||
/* ts A61115 */
|
/* ts A61115 */
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
@ -1408,18 +1605,27 @@ return_1_pre_proc:;
|
|||||||
/* ts A61115: replacing call to sg-implementation internals from drive.c */
|
/* ts A61115: replacing call to sg-implementation internals from drive.c */
|
||||||
int scsi_enumerate_drives(void)
|
int scsi_enumerate_drives(void)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
|
#ifdef Libburn_drive_new_deaL
|
||||||
|
int ret;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef Libburn_drive_new_deaL
|
||||||
/* Direct examination of eventually single whitelisted name */
|
/* Direct examination of eventually single whitelisted name */
|
||||||
ret = single_enumerate(0);
|
ret = single_enumerate(0);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
#endif /* Libburn_drive_new_deaL */
|
||||||
|
|
||||||
sg_enumerate();
|
sg_enumerate();
|
||||||
ata_enumerate();
|
ata_enumerate();
|
||||||
|
|
||||||
|
#ifdef Libburn_drive_new_deaL
|
||||||
add_proc_info_drives(0);
|
add_proc_info_drives(0);
|
||||||
|
#endif /* Libburn_drive_new_deaL */
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1583,6 +1789,11 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
/* ts A61030 */
|
/* ts A61030 */
|
||||||
static FILE *fp= NULL;
|
static FILE *fp= NULL;
|
||||||
|
|
||||||
|
#define Libburn_use_scsi_eval_cmd_outcomE yes
|
||||||
|
#ifndef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
int usleep_time;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* <<< ts A60821
|
/* <<< ts A60821
|
||||||
debug: for tracing calls which might use open drive fds */
|
debug: for tracing calls which might use open drive fds */
|
||||||
@ -1686,12 +1897,96 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
c->error = 1;
|
c->error = 1;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
|
/* <<< */
|
||||||
|
if(0){
|
||||||
|
static int erst= 1;
|
||||||
|
static unsigned char b00_sense[22]= {
|
||||||
|
0x72, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E,
|
||||||
|
0x09, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||||
|
|
||||||
|
if (erst > 0) {
|
||||||
|
s.sb_len_wr= 22;
|
||||||
|
memcpy(s.sbp, b00_sense, s.sb_len_wr);
|
||||||
|
erst--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* <<< */
|
||||||
|
#endif /* NIX */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
|
||||||
done = scsi_eval_cmd_outcome(d, c, fp, s.sbp, s.sb_len_wr,
|
done = scsi_eval_cmd_outcome(d, c, fp, s.sbp, s.sb_len_wr,
|
||||||
s.duration, start_time, s.timeout, i, 0);
|
s.duration, start_time, s.timeout, i, 0);
|
||||||
|
|
||||||
|
#else /* Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
|
if (s.sb_len_wr) {
|
||||||
|
if (!c->retry) {
|
||||||
|
c->error = 1;
|
||||||
|
|
||||||
|
/* A61106: rather than : return 1 */
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
switch (scsi_error(d, s.sbp, s.sb_len_wr)) {
|
||||||
|
case RETRY:
|
||||||
|
done = 0;
|
||||||
|
if (burn_sg_log_scsi & 3) {
|
||||||
|
scsi_log_err(c, fp, s.sbp, s.sb_len_wr,
|
||||||
|
s.duration, 1);
|
||||||
|
scsi_log_cmd(c,fp,0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FAIL:
|
||||||
|
done = 1;
|
||||||
|
c->error = 1;
|
||||||
|
break;
|
||||||
|
case GO_ON:
|
||||||
|
if (burn_sg_log_scsi & 3)
|
||||||
|
scsi_log_err(c, fp, s.sbp, s.sb_len_wr,
|
||||||
|
s.duration, 1);
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ts A90921 :
|
||||||
|
Calming down retries and breaking up endless cycle
|
||||||
|
*/
|
||||||
|
usleep_time = Libburn_sg_linux_retry_usleeP +
|
||||||
|
i * Libburn_sg_linux_retry_incR;
|
||||||
|
if (time(NULL) + usleep_time / 1000000 - start_time >
|
||||||
|
s.timeout / 1000 + 1) {
|
||||||
|
c->error = 1;
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
usleep(usleep_time);
|
||||||
|
} else {
|
||||||
|
done = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* ! Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ts A61106 */
|
||||||
|
|
||||||
|
#ifdef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
|
||||||
if (s.host_status != Libburn_sg_host_oK ||
|
if (s.host_status != Libburn_sg_host_oK ||
|
||||||
(s.driver_status != Libburn_sg_driver_oK && !c->error)) {
|
(s.driver_status != Libburn_sg_driver_oK && !c->error)) {
|
||||||
|
|
||||||
|
#else /* Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
|
ex:;
|
||||||
|
if (c->error) {
|
||||||
|
scsi_notify_error(d, c, s.sbp, s.sb_len_wr, 0);
|
||||||
|
} else if (s.host_status != Libburn_sg_host_oK ||
|
||||||
|
s.driver_status != Libburn_sg_driver_oK) {
|
||||||
|
|
||||||
|
#endif /* ! Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
char msg[161];
|
char msg[161];
|
||||||
|
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
@ -1706,6 +2001,13 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
msg, 0, 0);
|
msg, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
if (burn_sg_log_scsi & 3)
|
||||||
|
scsi_log_err(c, fp, s.sbp, s.sb_len_wr,
|
||||||
|
s.duration, c->error != 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -571,6 +571,11 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
char msg[80];
|
char msg[80];
|
||||||
static FILE *fp = NULL;
|
static FILE *fp = NULL;
|
||||||
|
|
||||||
|
#define Libburn_use_scsi_eval_cmd_outcomE yes
|
||||||
|
#ifndef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
int usleep_time, no_retry = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
c->error = 0;
|
c->error = 0;
|
||||||
memset(c->sense, 0, sizeof(c->sense));
|
memset(c->sense, 0, sizeof(c->sense));
|
||||||
if (d->fd == -1)
|
if (d->fd == -1)
|
||||||
@ -639,6 +644,8 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
|
||||||
|
|
||||||
/* >>> Should replace "18" by realistic sense length.
|
/* >>> Should replace "18" by realistic sense length.
|
||||||
What's about following older remark ?
|
What's about following older remark ?
|
||||||
@ -652,8 +659,70 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
} else
|
} else
|
||||||
done = 1;
|
done = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#else /* Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
|
|
||||||
|
/* >>> valid sense: cgc.uscsi_rqlen - cgc.uscsi_rqresid */;
|
||||||
|
|
||||||
|
spc_decode_sense(c->sense, 0, &key, &asc, &ascq);
|
||||||
|
if (key || asc || ascq) {
|
||||||
|
if (no_retry || !c->retry) {
|
||||||
|
c->error = 1;
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
switch (scsi_error(d, c->sense, 18)) {
|
||||||
|
case RETRY:
|
||||||
|
if (burn_sg_log_scsi & 3) {
|
||||||
|
/* >>> Need own duration time
|
||||||
|
measurement. Then remove bit1 */
|
||||||
|
scsi_log_err(c, fp, c->sense, 18, 0,
|
||||||
|
1 | 2);
|
||||||
|
scsi_log_cmd(c,fp,0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FAIL:
|
||||||
|
c->error = 1;
|
||||||
|
goto ex;
|
||||||
|
case GO_ON:
|
||||||
|
if (burn_sg_log_scsi & 3)
|
||||||
|
/* >>> Need own duration time
|
||||||
|
measurement. Then remove bit1 */
|
||||||
|
scsi_log_err(c, fp, c->sense, 18, 0,
|
||||||
|
1 | 2);
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Calming down retries and breaking up endless cycle
|
||||||
|
*/
|
||||||
|
usleep_time = Libburn_sg_solaris_retry_usleeP +
|
||||||
|
i * Libburn_sg_solaris_retry_incR;
|
||||||
|
if (time(NULL) + usleep_time / 1000000 - start_time >
|
||||||
|
timeout_ms / 1000 + 1) {
|
||||||
|
c->error = 1;
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
usleep(usleep_time);
|
||||||
|
} else
|
||||||
|
break; /* retry-loop */
|
||||||
|
|
||||||
|
#endif /* ! Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
} /* end of retry-loop */
|
} /* end of retry-loop */
|
||||||
|
|
||||||
|
#ifndef Libburn_use_scsi_eval_cmd_outcomE
|
||||||
|
|
||||||
|
ex:;
|
||||||
|
|
||||||
|
if (c->error)
|
||||||
|
scsi_notify_error(d, c, c->sense, 18, 0);
|
||||||
|
|
||||||
|
if (burn_sg_log_scsi & 3)
|
||||||
|
/* >>> Need own duration time measurement. Then remove bit1 */
|
||||||
|
scsi_log_err(c, fp, c->sense, 18, 0, (c->error != 0) | 2);
|
||||||
|
|
||||||
|
#endif /* ! Libburn_use_scsi_eval_cmd_outcomE */
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,15 +63,3 @@ int burn_source_cancel(struct burn_source *src)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ts B00922 */
|
|
||||||
int burn_source_read(struct burn_source *src, unsigned char *buffer, int size)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (src->read != NULL)
|
|
||||||
ret = src->read(src, buffer, size);
|
|
||||||
else
|
|
||||||
ret = src->read_xt(src, buffer, size);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
@ -7,6 +7,4 @@ struct burn_source *burn_source_new(void);
|
|||||||
|
|
||||||
int burn_source_cancel(struct burn_source *src);
|
int burn_source_cancel(struct burn_source *src);
|
||||||
|
|
||||||
int burn_source_read(struct burn_source *src, unsigned char *buffer, int size);
|
|
||||||
|
|
||||||
#endif /*__SOURCE*/
|
#endif /*__SOURCE*/
|
||||||
|
@ -1558,12 +1558,12 @@ int scsi_eval_cmd_outcome(struct burn_drive *d, struct command *c, void *fp,
|
|||||||
enum response outcome;
|
enum response outcome;
|
||||||
int done = -1, usleep_time;
|
int done = -1, usleep_time;
|
||||||
|
|
||||||
if (burn_sg_log_scsi & 3)
|
|
||||||
scsi_log_err(c, fp, sense, sense_len, duration,
|
|
||||||
(sense_len > 0) | (flag & 2));
|
|
||||||
if (sense_len <= 0)
|
if (sense_len <= 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
if (burn_sg_log_scsi & 3)
|
||||||
|
scsi_log_err(c, fp, sense, sense_len, duration,
|
||||||
|
1 | (flag & 2));
|
||||||
outcome = scsi_error(d, sense, sense_len);
|
outcome = scsi_error(d, sense, sense_len);
|
||||||
if (outcome == RETRY && c->retry && !(flag & 1)) {
|
if (outcome == RETRY && c->retry && !(flag & 1)) {
|
||||||
/* Calming down retries and breaking up endless cycle
|
/* Calming down retries and breaking up endless cycle
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2010 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -170,8 +170,6 @@ struct burn_track *burn_track_create(void)
|
|||||||
/* ts A61031 */
|
/* ts A61031 */
|
||||||
t->open_ended = 0;
|
t->open_ended = 0;
|
||||||
t->track_data_done = 0;
|
t->track_data_done = 0;
|
||||||
/* ts B10103 */
|
|
||||||
t->end_on_premature_eoi = 0;
|
|
||||||
|
|
||||||
t->postgap = 0;
|
t->postgap = 0;
|
||||||
t->pregap1 = 0;
|
t->pregap1 = 0;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2010 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -55,14 +55,6 @@ struct burn_track
|
|||||||
int open_ended;
|
int open_ended;
|
||||||
/** End of open ended track flag : offset+payload+tail are delivered */
|
/** End of open ended track flag : offset+payload+tail are delivered */
|
||||||
int track_data_done;
|
int track_data_done;
|
||||||
/* ts B10103 */
|
|
||||||
/** End track writing on premature End-of-input if source is of
|
|
||||||
defined length.
|
|
||||||
0= normal operation in case of eoi
|
|
||||||
1= be ready to end track writing on eoi
|
|
||||||
2= eoi was encountered with previously set value of 1
|
|
||||||
*/
|
|
||||||
int end_on_premature_eoi;
|
|
||||||
|
|
||||||
/** The audio/data mode for the entry. Derived from control and
|
/** The audio/data mode for the entry. Derived from control and
|
||||||
possibly from reading the track's first sector. */
|
possibly from reading the track's first sector. */
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2010 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -385,9 +385,9 @@ struct cue_sheet *burn_create_toc_entries(struct burn_write_opts *o,
|
|||||||
runtime = nwa-150;
|
runtime = nwa-150;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sheet = calloc(1, sizeof(struct cue_sheet));
|
sheet = malloc(sizeof(struct cue_sheet));
|
||||||
|
|
||||||
/* ts A61009 : react on failures of calloc(), add_cue_sheet()
|
/* ts A61009 : react on failures of malloc(), add_cue_sheet()
|
||||||
type_to_form() */
|
type_to_form() */
|
||||||
if (sheet == NULL) {
|
if (sheet == NULL) {
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020111,
|
libdax_msgs_submit(libdax_messenger, -1, 0x00020111,
|
||||||
@ -2006,13 +2006,7 @@ ex:;
|
|||||||
burn_drive_mark_unready(d);
|
burn_drive_mark_unready(d);
|
||||||
burn_drive_inquire_media(d);
|
burn_drive_inquire_media(d);
|
||||||
|
|
||||||
if (d->current_profile == 0x41 && d->complete_sessions >= 300) {
|
/* <<< d->busy = BURN_DRIVE_IDLE; */
|
||||||
sprintf(msg, "Sequential BD-R media now contains %d sessions. It is likely to soon fail writing.", d->complete_sessions);
|
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
|
||||||
0x0002017b, LIBDAX_MSGS_SEV_WARNING,
|
|
||||||
LIBDAX_MSGS_PRIO_ZERO, msg, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
early_failure:;
|
early_failure:;
|
||||||
return 0;
|
return 0;
|
||||||
@ -2024,8 +2018,7 @@ int burn_stdio_open_write(struct burn_drive *d, off_t start_byte,
|
|||||||
int sector_size, int flag)
|
int sector_size, int flag)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* We normally need _LARGEFILE64_SOURCE defined by the build system.
|
/* <<< We need _LARGEFILE64_SOURCE defined by the build system.
|
||||||
Nevertheless the system might use large address integers by default.
|
|
||||||
*/
|
*/
|
||||||
#ifndef O_LARGEFILE
|
#ifndef O_LARGEFILE
|
||||||
#define O_LARGEFILE 0
|
#define O_LARGEFILE 0
|
||||||
@ -2041,8 +2034,7 @@ int burn_stdio_open_write(struct burn_drive *d, off_t start_byte,
|
|||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
fd = dup(fd); /* check validity and make closeable */
|
fd = dup(fd); /* check validity and make closeable */
|
||||||
else
|
else
|
||||||
fd = open(d->devname, mode,
|
fd = open(d->devname, mode, S_IRUSR | S_IWUSR);
|
||||||
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
|
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
0x00020005,
|
0x00020005,
|
||||||
@ -2122,11 +2114,9 @@ int burn_stdio_mmc_write(struct burn_drive *d, int start, struct buffer *buf)
|
|||||||
if (d->cancel)
|
if (d->cancel)
|
||||||
return BE_CANCELLED;
|
return BE_CANCELLED;
|
||||||
if (d->stdio_fd < 0) {
|
if (d->stdio_fd < 0) {
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
|
||||||
0x0002017d,
|
/* >>> program error */;
|
||||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
"Invalid file descriptor with stdio pseudo-drive",
|
|
||||||
0, 0);
|
|
||||||
d->cancel = 1;
|
d->cancel = 1;
|
||||||
return BE_CANCELLED;
|
return BE_CANCELLED;
|
||||||
}
|
}
|
||||||
@ -2174,11 +2164,9 @@ int burn_stdio_mmc_dummy_write(struct burn_drive *d, int start,
|
|||||||
int burn_stdio_sync_cache(int fd, struct burn_drive *d, int flag)
|
int burn_stdio_sync_cache(int fd, struct burn_drive *d, int flag)
|
||||||
{
|
{
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
|
||||||
0x0002017d,
|
/* >>> program error */;
|
||||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
|
||||||
"Invalid file descriptor with stdio pseudo-drive",
|
|
||||||
0, 0);
|
|
||||||
d->cancel = 1;
|
d->cancel = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2257,8 +2245,6 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
|||||||
burn_disc_init_track_status(o, s, tnum, sectors);
|
burn_disc_init_track_status(o, s, tnum, sectors);
|
||||||
open_ended = burn_track_is_open_ended(t);
|
open_ended = burn_track_is_open_ended(t);
|
||||||
|
|
||||||
t->end_on_premature_eoi = (o->write_type == BURN_WRITE_TAO);
|
|
||||||
|
|
||||||
/* attach stdio emulators for mmc_*() functions */
|
/* attach stdio emulators for mmc_*() functions */
|
||||||
if (o->simulate)
|
if (o->simulate)
|
||||||
d->write = burn_stdio_mmc_dummy_write;
|
d->write = burn_stdio_mmc_dummy_write;
|
||||||
@ -2271,9 +2257,8 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
|||||||
/* transact a (CD sized) sector */
|
/* transact a (CD sized) sector */
|
||||||
if (!sector_data(o, t, 0))
|
if (!sector_data(o, t, 0))
|
||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
if (open_ended)
|
if (open_ended) {
|
||||||
d->progress.sectors = sectors = d->progress.sector;
|
d->progress.sectors = sectors = d->progress.sector;
|
||||||
if (open_ended || t->end_on_premature_eoi) {
|
|
||||||
if (burn_track_is_data_done(t))
|
if (burn_track_is_data_done(t))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2300,8 +2285,6 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
|||||||
ex:;
|
ex:;
|
||||||
if (d->cancel)
|
if (d->cancel)
|
||||||
burn_source_cancel(t->source);
|
burn_source_cancel(t->source);
|
||||||
if (t->end_on_premature_eoi == 2)
|
|
||||||
d->cancel = 1;
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,134 +0,0 @@
|
|||||||
|
|
||||||
/*
|
|
||||||
cc -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS -g -o test/offst_source test/offst_source.c -lburn
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "../libburn/libburn.h"
|
|
||||||
|
|
||||||
/* Just everything from test/libburner.c */
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
|
|
||||||
|
|
||||||
static int create_original(struct burn_source **original, char *path, int flag)
|
|
||||||
{
|
|
||||||
printf("create_original: path='%s'\n", path);
|
|
||||||
*original = burn_file_source_new(path, NULL);
|
|
||||||
if (*original == NULL)
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int set_up_offst_sources(struct burn_source *original,
|
|
||||||
struct burn_source *offsetters[],
|
|
||||||
int count, int flag)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
off_t start = 3, size = 10, gap = 7;
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
offsetters[i] = burn_offst_source_new(original,
|
|
||||||
i > 0 ? offsetters[i - 1] : NULL,
|
|
||||||
start, size, 0);
|
|
||||||
if (offsetters[i] == NULL)
|
|
||||||
return 0;
|
|
||||||
printf("set_up_offst_sources: idx=%d, start=%d\n",
|
|
||||||
i, (int) start);
|
|
||||||
start += size + gap;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int consume_source(struct burn_source *src, int flag)
|
|
||||||
{
|
|
||||||
int ret, count = 0;
|
|
||||||
unsigned char buf[1];
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
ret = src->read_xt(src, buf, 1);
|
|
||||||
if (ret < 0) {
|
|
||||||
printf("\n");
|
|
||||||
fprintf(stderr, "consume_source: count=%d, ret=%d\n",
|
|
||||||
count, ret);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (ret == 0)
|
|
||||||
break;
|
|
||||||
printf("%u ", buf[0]);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
printf(" count=%d\n", count);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int consume_all_sources(struct burn_source *offsetters[],
|
|
||||||
int count, int flag)
|
|
||||||
{
|
|
||||||
int i, ret;
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
printf("consume_source: idx=%d\n", i);
|
|
||||||
ret = consume_source(offsetters[i], 0);
|
|
||||||
if (ret <= 0)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int free_all_sources(struct burn_source *original,
|
|
||||||
struct burn_source *offsetters[],
|
|
||||||
int count, int flag)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
|
||||||
burn_source_free(offsetters[i]);
|
|
||||||
burn_source_free(original);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
char *path = "./COPYRIGHT";
|
|
||||||
struct burn_source *original = NULL, *offsetters[4];
|
|
||||||
|
|
||||||
if (argc > 1)
|
|
||||||
path = argv[1];
|
|
||||||
|
|
||||||
if (burn_initialize() == 0)
|
|
||||||
exit(1);
|
|
||||||
|
|
||||||
ret = create_original(&original, path, 0);
|
|
||||||
if (ret <= 0)
|
|
||||||
exit(2);
|
|
||||||
|
|
||||||
ret = set_up_offst_sources(original, offsetters, 4, 0);
|
|
||||||
if (ret <= 0)
|
|
||||||
exit(3);
|
|
||||||
|
|
||||||
ret = consume_all_sources(offsetters, 4, 0);
|
|
||||||
if (ret <= 0)
|
|
||||||
exit(4);
|
|
||||||
|
|
||||||
ret = free_all_sources(original, offsetters, 4, 0);
|
|
||||||
if (ret <= 0)
|
|
||||||
exit(5);
|
|
||||||
|
|
||||||
burn_finish();
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
Reference in New Issue
Block a user