Compare commits

..

11 Commits

29 changed files with 397 additions and 878 deletions

View File

@ -101,14 +101,10 @@ test_structest_CPPFLAGS = -Ilibburn
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
test_structest_SOURCES = test/structest.c
## cdrskin construction site - ts A60816 - A71025
## cdrskin construction site - ts A60816 - A71024
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_4_2
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
cdrskin_cdrskin_LDADD = libburn/libburn.la $(THREAD_LIBS)
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_4_0
cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
cdrskin_cdrskin_SOURCES = cdrskin/cdrskin.c cdrskin/cdrfifo.c cdrskin/cdrfifo.h cdrskin/cdrskin_timestamp.h
##
## Open questions: how to compute $timestamp and express -DX="$timestamp"
@ -167,13 +163,13 @@ indent: $(indent_files)
# Extra things
nodist_pkgconfig_DATA = \
libburn-1.pc
libburn-5.pc
# http://www.nada.kth.se/cgi-bin/info?(automake.info)Man%20pages
man_MANS = cdrskin/cdrskin.1
EXTRA_DIST = \
libburn-1.pc.in \
libburn-5.pc.in \
version.h.in \
doc/comments \
doc/doxygen.conf.in \

7
README
View File

@ -6,7 +6,7 @@ This all is under GPL.
------------------------------------------------------------------------------
libburnia-project.org
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
Copyright (C) 2006-2007 Mario Danic, Thomas Schmitt
Still containing parts of
Libburn. By Derek Foreman <derek@signalmarketing.com> and
@ -210,11 +210,6 @@ Project history as far as known to me:
by these enhancements: growing of overwriteable media and disk files.
Taking again a bow towards Andy Polyakov.
- 26th Januar 2008 version 0.4.2 rectifies the version numbering so that we
reliably release libburn.so.4 as should have been done since libburn-0.3.2.
cdrskin now is by default linked dynamically and does a runtime check
to ensure not to be started with a libburn which is older than itself.
------------------------------------------------------------------------------

View File

@ -4,8 +4,8 @@
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/cdrskin_eng.html
http://scdbackup.sourceforge.net/cdrskin-0.4.2.tar.gz
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
http://scdbackup.sourceforge.net/cdrskin-0.4.0.pl00.tar.gz
Copyright (C) 2006-2007 Thomas Schmitt, provided under GPL version 2.
------------------------------------------------------------------------------
@ -20,17 +20,17 @@ By using this software you agree to the disclaimer at the end of this text
Compilation, First Glimpse, Installation
Obtain cdrskin-0.4.2.tar.gz, take it to a directory of your choice and do:
Obtain cdrskin-0.4.0.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf cdrskin-0.4.2.tar.gz
cd cdrskin-0.4.2
tar xzf cdrskin-0.4.0.pl00.tar.gz
cd cdrskin-0.4.0
Within that directory execute:
./configure --prefix=/usr
make
This will already produce a cdrskin binary. But it will be necessary to
This will already produce a cdrskin binary. But it might be necessary to
install libburn in order to use this binary. Installation of libburn is
beyond the scope of cdrskin. For this, see included libburn docs.
@ -44,17 +44,11 @@ Version identification and help texts available afterwards:
cdrskin/cdrskin -help
man cdrskin/cdrskin.1
Install (eventually as superuser) cdrskin to a directory where it can be found:
The command for global installation of both, libburn and cdrskin is
make install
But you may as well do the few necessary actions manually. If cdrskin was
already installed by a previous version, or by "make install" in the course
of this installation, then find out where:
If cdrskin was already installed by a previous version, or by "make install"
in the course of this installation, then find out where:
which cdrskin
Copy your standalone binary to exactly the address which you get as reply.
E.g.:
Copy your standalone binary to exactly the address which you get as reply
cp cdrskin/cdrskin /usr/bin/cdrskin
@ -404,8 +398,9 @@ contributions in a due way.
------------------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -420,7 +415,7 @@ contributions in a due way.
Based on and sub project of:
libburnia-project.org
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
Copyright (C) 2006-2007 Mario Danic, Thomas Schmitt
libburnia-project.org is inspired by and in other components still containing
parts of

View File

@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
# My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-release"
skin_release="0.4.2"
skin_release="0.4.0"
patch_level=".pl00"
skin_rev="$skin_release""$patch_level"
@ -58,8 +58,7 @@ compile_result="cdrskin/cdrskin"
man_to_html_cmd="./cdrskin/convert_man_to_html.sh"
man_page_html="cdrskin/man_1_cdrskin.html"
# bintarget_dynamic="cdrskin_${skin_rev}-x86-suse9_0"
bintarget_dynamic="cdrskin_${skin_rev}-amd64-suse10_2"
bintarget_dynamic="cdrskin_${skin_rev}-x86-suse9_0"
bintarget_static="$bintarget_dynamic"-static
if test -d "$changes"

View File

@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
# My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-develop"
skin_release="0.4.3"
skin_release="0.4.1"
patch_level=""
skin_rev="$skin_release""$patch_level"
@ -58,7 +58,7 @@ compile_result="cdrskin/cdrskin"
man_to_html_cmd="./cdrskin/convert_man_to_html.sh"
man_page_html="cdrskin/man_1_cdrskin.html"
bintarget_dynamic="cdrskin_${skin_rev}-amd64-suse10_2"
bintarget_dynamic="cdrskin_${skin_rev}-x86-suse9_0"
bintarget_static="$bintarget_dynamic"-static
if test -d "$changes"

View File

@ -148,8 +148,8 @@ read-only. Closing is done automatically unless option
is given which keeps the media appendable.
.br
Write mode
-tao allows to use track sources of unpredictable length (like stdin) and
allows to write further sessions to appendable media.
-tao allows to use track source of unpredictable length (like stdin) and allows
to write further sessions to appendable media.
-sao produces audio sessions with seamless tracks but needs predicted track
sizes and cannot append sessions to media.
.br
@ -278,9 +278,7 @@ and device files which have the same SCSI address parameters (e.g. /dev/sg0).
.SS
.B Emulated drives:
.br
Option
.B --allow_emulated_drives
enables addressing of pseudo-drives
Option --allow_emulated_drives enables addressing of pseudo-drives
which get emulated on top of filesystem objects. Regular data files and
block devices result in pseudo-drives which behave much like DVD-RAM.
If the given address does not exist yet but its directory exists, then

View File

@ -1,6 +1,6 @@
/*
cdrskin.c , Copyright 2006-2008 Thomas Schmitt <scdbackup@gmx.net>
cdrskin.c , Copyright 2006-2007 Thomas Schmitt <scdbackup@gmx.net>
Provided under GPL version 2. See future commitment below.
A cdrecord compatible command line interface for libburn.
@ -88,23 +88,9 @@ or
/** The official program version */
#ifndef Cdrskin_prog_versioN
#define Cdrskin_prog_versioN "0.4.2"
#define Cdrskin_prog_versioN "0.4.0"
#endif
/** The official libburn interface revision to use.
(May get changed further below)
*/
#ifndef Cdrskin_libburn_majoR
#define Cdrskin_libburn_majoR 0
#endif
#ifndef Cdrskin_libburn_minoR
#define Cdrskin_libburn_minoR 4
#endif
#ifndef Cdrskin_libburn_micrO
#define Cdrskin_libburn_micrO 2
#endif
/** The source code release timestamp */
#include "cdrskin_timestamp.h"
#ifndef Cdrskin_timestamP
@ -135,48 +121,28 @@ or
#endif /* Cdrskin_libburn_cvs_A60220_tS */
#ifdef Cdrskin_libburn_0_4_2
#define Cdrskin_libburn_versioN "0.4.2"
#ifdef Cdrskin_libburn_0_4_0
#define Cdrskin_libburn_versioN "0.4.0"
#define Cdrskin_libburn_from_pykix_svN 1
#endif /* Cdrskin_libburn_0_4_2 */
#endif /* Cdrskin_libburn_0_4_0 */
#ifdef Cdrskin_libburn_0_4_3
#define Cdrskin_libburn_versioN "0.4.3"
#ifdef Cdrskin_libburn_0_4_1
#define Cdrskin_libburn_versioN "0.4.1"
#define Cdrskin_libburn_from_pykix_svN 1
/* Place novelty switch macros here.
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
*/
/* there are no novelties in 0.4.3 yet */
/* there are no novelties in 0.4.1 yet */
#endif /* Cdrskin_libburn_0_4_3 */
#endif /* Cdrskin_libburn_0_4_1 */
#ifndef Cdrskin_libburn_versioN
#define Cdrskin_libburn_0_4_2
#define Cdrskin_libburn_versioN "0.4.2"
#define Cdrskin_libburn_versioN "0.4.0"
#define Cdrskin_libburn_from_pykix_svN 1
#endif
#ifdef Cdrskin_libburn_0_4_2
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 4
#define Cdrskin_libburn_micrO 2
#endif
#ifdef Cdrskin_libburn_0_4_3
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 4
#define Cdrskin_libburn_micrO 3
#endif
#ifdef Cdrskin_libburn_from_pykix_svN
#ifndef Cdrskin_oldfashioned_api_usE
@ -239,9 +205,6 @@ or
#define Cdrskin_libburn_has_get_drive_rolE 1
#define Cdrskin_libburn_has_drive_equals_adR 1
/* 0.4.2 */
/* no novel features but rather organizational changes */
#ifdef Cdrskin_new_api_tesT
@ -1907,26 +1870,13 @@ int Cdrpreskin_set_severities(struct CdrpreskiN *preskin, char *queue_severity,
int Cdrpreskin_initialize_lib(struct CdrpreskiN *preskin, int flag)
{
int ret, major, minor, micro;
int ret;
ret= burn_initialize();
if(ret==0) {
fprintf(stderr,"cdrskin: FATAL : Initialization of libburn failed\n");
fprintf(stderr,"cdrskin : FATAL : Initialization of libburn failed\n");
return(0);
}
burn_version(&major, &minor, &micro);
/* <<< for testing only */
/* major= 0; minor= 3; micro= 6; */
if(major<Cdrskin_libburn_majoR ||
(major==Cdrskin_libburn_majoR && (minor<Cdrskin_libburn_minoR ||
(minor==Cdrskin_libburn_minoR && micro<Cdrskin_libburn_micrO)))) {
fprintf(stderr,"cdrskin: FATAL : libburn version too old: %d.%d.%d . Need at least: %d.%d.%d .\n",
major, minor, micro,
Cdrskin_libburn_majoR, Cdrskin_libburn_minoR, Cdrskin_libburn_micrO);
return(-1);
}
Cdrpreskin_set_severities(preskin,NULL,NULL,0);
return(1);
}
@ -2823,13 +2773,9 @@ set_severities:;
goto set_severities;
} else if(strcmp(argv[i],"-version")==0) {
int major, minor, micro;
printf(
"Cdrecord 2.01-Emulation Copyright (C) 2006-2008, see libburnia-project.org\n");
printf("libburn interface : %s\n",Cdrskin_libburn_versioN);
burn_version(&major, &minor, &micro);
printf("libburn in use : %d.%d.%d\n", major, minor, micro);
"Cdrecord 2.01-Emulation Copyright (C) 2006-2007, see libburnia-project.org\n");
printf("libburn version : %s\n",Cdrskin_libburn_versioN);
#ifndef Cdrskin_extra_leaN
printf("cdrskin version : %s\n",Cdrskin_prog_versioN);
@ -2915,7 +2861,7 @@ final_checks:;
dev_too_long:;
fprintf(stderr,
"cdrskin: FATAL : dev=... too long (max. %d characters)\n",
(int) sizeof(o->device_adr)-1);
sizeof(o->device_adr)-1);
{ret= 0; goto ex;}
}
strcpy(o->device_adr,adr);
@ -7029,7 +6975,7 @@ set_driveropts:;
if(strlen(argv[i]+13)>=sizeof(skin->eject_device)) {
fprintf(stderr,
"cdrskin: FATAL : eject_device=... too long. (max: %d, given: %d)\n",
(int) sizeof(skin->eject_device)-1,(int) strlen(argv[i]+13));
sizeof(skin->eject_device)-1,strlen(argv[i]+13));
return(0);
}
strcpy(skin->eject_device,argv[i]+13);
@ -7292,7 +7238,7 @@ msifile_equals:;
if(strlen(value_pt)>=sizeof(skin->msifile)) {
fprintf(stderr,
"cdrskin: FATAL : msifile=... too long. (max: %d, given: %d)\n",
(int) sizeof(skin->msifile)-1,(int) strlen(value_pt));
sizeof(skin->msifile)-1,strlen(value_pt));
return(0);
}
strcpy(skin->msifile, value_pt);
@ -7477,7 +7423,7 @@ track_too_large:;
if(strlen(argv[i])>=sizeof(skin->source_path)) {
fprintf(stderr,
"cdrskin: FATAL : Source address too long. (max: %d, given: %d)\n",
(int) sizeof(skin->source_path)-1,(int) strlen(argv[i]));
sizeof(skin->source_path)-1,strlen(argv[i]));
return(0);
}
source_has_size= 0;

View File

@ -56,7 +56,7 @@ and to MMC-5 for DVD).
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.4.2</DT>
<DT>libburn-0.4.0</DT>
<DD>(founded by Derek Foreman and Ben Jansens,
furthered by team of libburnia-project.org)</DD>
<DD>transfers data to CD and DVD</DD>
@ -176,8 +176,8 @@ Testers wanted who are willing to risk some double layer DVD media.
<P>
<DL>
<DT>Download as source code (see README):</DT>
<DD><A HREF="cdrskin-0.4.2.pl00.tar.gz">cdrskin-0.4.2.pl00.tar.gz</A>
(700 KB).
<DD><A HREF="cdrskin-0.4.0.pl00.tar.gz">cdrskin-0.4.0.pl00.tar.gz</A>
(680 KB).
</DD>
<DD>
The cdrskin tarballs are source code identical with libburn releases
@ -187,14 +187,14 @@ cdrskin is part of libburn - full libburn is provided with cdrskin releases.
</DD>
<DD>&nbsp;</DD>
<DT>Download as single x86 binaries (untar and move to /usr/bin/cdrskin):</DT>
<DD><A HREF="cdrskin_0.4.2.pl00-x86-suse9_0.tar.gz">
cdrskin_0.4.2.pl00-x86-suse9_0.tar.gz</A>, (110 KB),
<DD><A HREF="cdrskin_0.4.0.pl00-x86-suse9_0.tar.gz">
cdrskin_0.4.0.pl00-x86-suse9_0.tar.gz</A>, (106 KB),
<DL>
<DD>runs on SuSE 9.0 (2.4.21) , RIP-14.4 (2.6.14) ,
Gentoo (2.6.15 x86_64 Athlon).</DD>
</DL>
<DD><A HREF="cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz">
cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
<DD><A HREF="cdrskin_0.4.0.pl00-x86-suse9_0-static.tar.gz">
cdrskin_0.4.0.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
<DL>
<DD>runs on SuSE 7.2 (2.4.4), and on the systems above.</DD>
</DL>
@ -221,13 +221,18 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
<HR>
<P>
Enhancements towards previous stable version cdrskin-0.4.0:
Enhancements towards previous stable version cdrskin-0.3.8:
<UL>
<LI>Safe dynamic linking possible with libburn.so.4</LI>
<LI>New option direct_write_amount=</LI>
<LI>New option --grow_overwriteable_iso</LI>
<LI>New option --allow_emulated_drives dev=stdio:&lt;path&gt;</LI>
<LI>More cdrecord options supported:
-format, -inq, -load, -lock, -immed, -waiti</LI>
<LI>New option fallback_program=</LI>
</UL>
<!--
Bug fixes towards cdrskin-0.4.2.pl00:
Bug fixes towards cdrskin-0.4.0.pl00:
<UL>
<LI>none yet</LI>
</UL>
@ -239,8 +244,8 @@ Enhancements towards previous stable version cdrskin-0.4.0:
<P>
<DL>
<DT><H3>Development snapshot, version 0.4.3 :</H3></DT>
<DD>Enhancements towards stable version 0.4.2.pl00:
<DT><H3>Development snapshot, version 0.4.1 :</H3></DT>
<DD>Enhancements towards stable version 0.4.0.pl00:
<UL>
<LI>none yet</LI>
<!--
@ -248,10 +253,10 @@ Enhancements towards previous stable version cdrskin-0.4.0:
</UL>
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_cdrskin_devel">README 0.4.3</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.4.3 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.4.3 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.4.3)</A></DD>
<DD><A HREF="README_cdrskin_devel">README 0.4.1</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.4.1 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.4.1 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.4.1)</A></DD>
<DD>&nbsp;</DD>
<DT>Maintainers of cdrskin unstable packages please use SVN of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
@ -271,15 +276,15 @@ admins with full system souvereignty.</DT>
<A HREF="README_cdrskin_devel">upcoming README</A> ):
</DD>
<DD>
<A HREF="cdrskin-0.4.3.tar.gz">cdrskin-0.4.3.tar.gz</A>
(700 KB).
<A HREF="cdrskin-0.4.1.tar.gz">cdrskin-0.4.1.tar.gz</A>
(680 KB).
</DD>
<DD>Binary (untar and move to /usr/bin/cdrskin):</DD>
<DD><A HREF="cdrskin_0.4.3-x86-suse9_0.tar.gz">
cdrskin_0.4.3-x86-suse9_0.tar.gz</A>, (110 KB).
<DD><A HREF="cdrskin_0.4.1-x86-suse9_0.tar.gz">
cdrskin_0.4.1-x86-suse9_0.tar.gz</A>, (105 KB).
</DD>
<DD><A HREF="cdrskin_0.4.3-x86-suse9_0-static.tar.gz">
cdrskin_0.4.3-x86-suse9_0-static.tar.gz</A>, (310 KB)
<DD><A HREF="cdrskin_0.4.1-x86-suse9_0-static.tar.gz">
cdrskin_0.4.1-x86-suse9_0-static.tar.gz</A>, (310 KB)
</DD>
</DL>
</P>

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2008.02.01.100001"
#define Cdrskin_timestamP "2007.10.27.090421"

View File

@ -4768,285 +4768,23 @@ Removed useless alternative after zombies turned out to be caused by gdb
------------------------------------ cycle - cdrskin-0.3.9 - 2007.10.23.150436
2007.10.23.150436 [1240]
2007.10.23.150436 []
cdrskin/changelog.txt
Next cdrskin-0.3.9 cycle
23 Oct 2007 [1241]
libcevap/main.c
Preparations for lowercase class and function names
23 Oct 2007 [1242]
libcevap/libdax_model.txt
Work goes on
23 Oct 2007 [1243]
libcevap/cgen.c
libcevap/ctyp.c
Fixed a bug about arrays
2007.10.24.184233 [1248] branch/ZeroFourZero
Makefile.am
configure.ac
README
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/wiki_plain.txt
cdrskin/cdrskin_eng.html
doc/comments
Made number transition to 0.4.0
25 Oct 2007 [1249] branch/ZeroFourZero
- cdrskin/add_ts_changes_to_libburn_0_3_8
- cdrskin/add_ts_changes_to_libburn_0_3_9
+ cdrskin/add_ts_changes_to_libburn_0_4_0
+ cdrskin/add_ts_changes_to_libburn_0_4_1
Updated cdrskin tarball generator
2007.10.25.091106 [1250]
Makefile.am
configure.ac
README
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/wiki_plain.txt
cdrskin/cdrskin_eng.html
doc/comments
Made number transition to 0.4.1
25 Oct 2007 [1251]
- cdrskin/add_ts_changes_to_libburn_0_3_8
- cdrskin/add_ts_changes_to_libburn_0_3_9
+ cdrskin/add_ts_changes_to_libburn_0_4_0
+ cdrskin/add_ts_changes_to_libburn_0_4_1
Updated cdrskin tarball generator
25 Oct 2007 [1252] branch/ZeroFourZero
cdrskin/cdrskin.c
Added forgotten help text lines
2007.10.25.131841 [1253]
cdrskin/cdrskin.c
Added forgotten help text lines
2007.10.27.090421 [1254] [1256] branch/ZeroFourZero
libburn/sg-linux.c
Reacted on cdwrite@ message about INT_MAX in cdrom.h of kernel 2.6.23
2007.10.27.075309 [1255]
libburn/sg-linux.c
Reacted on cdwrite@ message about INT_MAX in cdrom.h of kernel 2.6.23
29 Oct 2007 [1272]
- cdrskin/add_ts_changes_to_libburn_0_3_9
+ cdrskin/add_ts_changes_to_libburn_0_4_0
Updated cdrskin release generator scripts
----------------------------- release - cdrskin-0.4.0.pl00 - 2007.10.27.090421
----------------------------- release - cdrskin-0.4.0.pl00 - 2007.10.
* New option direct_write_amount=
* New option --grow_overwriteable_iso
* New option --allow_emulated_drives dev=stdio:<path>
* More cdrecord options supported: -format, -inq, -load, -lock, -immed, -waiti
* New option fallback_program=
------------------------------------ cycle - cdrskin-0.4.1 - 2007.10.27.114207
2007.11.18.093952 [1307]
libburn/libburn.h
Marked loss of binary backward compatibility back in rev 655, libburn-0.3.1
18 Nov 2007 [1308]
cdrskin/cdrskin.1
Corrected a typo in cdrskin man page
2007.11.18.094209 [1309]
cdrskin/cdrskin.c
Reacted on build warnings on a 64 Bit system
2007.11.26.154817 [1310]
libburn/libdax_audioxtr.c
Reacted on build warnings on another system
------------------------------------ cycle - cdrskin-0.4.1 - 2007.11.27.214003
2007.11.29.185342 [1312]
libburn/drive.c
libburn/mmc.c
libburn/spc.c
libburn/libdax_msgs.h
Enabled reading of TOC from ROM drives (direly needed for xorriso)
29 Nov 2007 [1313]
test/telltoc.c
Adjusted meaning of --read_and_print count= -1
2007.12.07.185030 [1323]
configure.ac
An attempt to rectify .so numbering: SONAME=10, REV=1, AGE=6
2007.12.07.185206 [1324]
libburn/async.c
Made postponed change in thread management
8 Dec 2007 [1325]
configure.ac
Some changes in the comments
24 Dec 2008 [1338]
libburn/libburn.h
libburn/source.h
libburn/source.c
libburn/file.c
libburn/write.c
libburn/sector.c
Implemented burn_source.cancel() in a binary backwards compatible way
2008.01.17.185051 [1383]
libburn/libdax_msgs.h
libburn/libdax_msgs.c
Changed meaning of .driveno to .origin, introduced LIBDAX_MSGS_ORIGIN_* macros
17 Jan 2008 [1384]
cdrskin/README
Removed a reference to future GPL versions
2008.01.19.201702 [1396]
libburn/read.c
Fixed small bug about error messages with burn_read_data
2008.01.23.193345 [1405]
libburn/read.c
Made burn_read_data() issue messages about hopeless drive access errors
2008.01.23.193843 [1406]
libburn/libburn.h
libburn/libdax_msgs.h
libburn/libdax_msgs.c
Introduced message severity "FAILURE"
2008.01.23.211731 [1408]
cdrskin/cdrskin.c
configure.ac
Implemented run time check of libburn version.
2008.01.23.213607 [1409]
Makefile.am
Dynamic cdrskin linking patch by Simon Huggins.
26 Jan 2008 [1420]
cdrskin/convert_man_to_html.sh
Adapted to man -H on my new system
2008.01.26.123054 [1421]
libburn/libdax_msgs.h
Ported change in vreixo message range from isoburn_msgs
2008.01.26.131519 [1422]
libburn/drive.c
Made a sudden end to all stdio drives in burn_abort()
2008.01.26.180241 [1426] [branch 1427]
libburn/async.c
Disabled debugging messages about thread properties
2008.01.26.200001 [branch 1428]
Makefile.am
configure.ac
libburn-5.pc.in
README
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/wiki_plain.txt
cdrskin/cdrskin_eng.html
Made number transition to 0.4.2 , libburn.so.4.7.0
27 Jan [branch 1429]
cdrskin/cdrskin.c
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Adjustments after first round of testing
27 Jan [branch 1430]
cdrskin/README
cdrskin/cdrskin_eng.html
Adjustments after testing
2008.01.27.143022 [1431]
Makefile.am
configure.ac
libburn-5.pc.in
README
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/wiki_plain.txt
cdrskin/cdrskin_eng.html
cdrskin/changelog.txt
Made number transition to 0.4.3 , still libburn.so.4.7.0
27 Jan 2008 [branch 1433] [1432]
- cdrskin/add_ts_changes_to_libburn_0_4_0
- cdrskin/add_ts_changes_to_libburn_0_4_1
+ cdrskin/add_ts_changes_to_libburn_0_4_2
+ cdrskin/add_ts_changes_to_libburn_0_4_3
Updated cdrskin tarball generator
2008.01.29.210821 [1442]
configure.ac
libburn/libburn.h
Moving the major.minor.micro definition from configure.ac to libburn.h
2008.01.28.213001 [branch 1444]
libburn/libburn.h
Introduced copy of major.minor.micro definition in libburn.h of version 0.4.2
29 Jan 2008 [branch 1445] [branch 1447]
Corrected description of major.minor.micro definition in libburn.h of version 0.4.2
2008.01.29.214110 [1446]
libburn/libburn.h
Corrected description of major.minor.micro definition in libburn.h
2008.01.31.111057 [1448]
cdrskin/cdrskin.c
Introduced compile time check of libburn header version
2008.02.01.100302 [1451] [branch 1453]
- libburn-5.pc.in
+ libburn-1.pc.in
configure.ac
Makefile.am
Renamed libburn-5.pc to libburn-1.pc
2008.02.01.100530 [1452]
cdrskin/cdrskin.c
Changed "libburn interface :" version message to libburn.h macros
[branch ]
cdrskin/cdrskin_timestamp.h
cdrskin/changelog.txt
Updated changelog before release
----------------------------- release - cdrskin-0.4.2.pl00 - 2008.02.01.100001
* Safe dynamic linking possible with libburn.so.4
------------------------------------ cycle - cdrskin-0.4.3 - 2008.
===============================================================================
TODO
===============================================================================
Check all SORRY and FATAL errors whether they should become FAILUREs
Refuse writing if track size exceeds free media space
problem with telltoc: double descriptor list from before load and after load
@ -5068,6 +4806,21 @@ Emulate -dummy on overwriteables ?
Emulate -dummy on DVD+R ?
[]
libcevap/main.c
Preparations for lowercase class and function names
[]
libcevap/libdax_model.txt
Work goes on
>>> struct burn_drive { int stdio_fd }
[]
libcevap/cgen.c
libcevap/ctyp.c
Fixed a bug about arrays
------------------------------------ cycle - cdrskin-0.3.9 -

View File

@ -1,13 +1,13 @@
#!/bin/sh
# compile_cdrskin.sh
# Copyright 2005 - 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
# Copyright 2005 - 2007 Thomas Schmitt, scdbackup@gmx.net, GPL
# to be executed within ./libburn-* resp ./cdrskin-*
debug_opts="-O2"
def_opts=
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
libvers="-DCdrskin_libburn_0_4_2"
libvers="-DCdrskin_libburn_0_4_0"
cleanup_src_or_obj="libburn/cleanup.o"
libdax_msgs_o="libburn/libdax_msgs.o"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
@ -33,15 +33,15 @@ do
libdax_audioxtr_o=
libdax_msgs_o="libburn/message.o"
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
elif test "$i" = "-libburn_0_4_2"
elif test "$i" = "-libburn_0_4_0"
then
libvers="-DCdrskin_libburn_0_4_2"
libvers="-DCdrskin_libburn_0_4_0"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o"
elif test "$i" = "-libburn_svn"
then
libvers="-DCdrskin_libburn_0_4_3"
libvers="-DCdrskin_libburn_0_4_1"
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
libdax_msgs_o="libburn/libdax_msgs.o"
cleanup_src_or_obj="libburn/cleanup.o"
@ -76,7 +76,7 @@ do
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
echo " -compile_dewav compile program test/dewav without libburn."
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
echo " -libburn_0_4_2 set macro to match libburn-0.4.2."
echo " -libburn_0_4_0 set macro to match libburn-0.4.0."
echo " -libburn_svn set macro to match current libburn-SVN."
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."

View File

@ -289,10 +289,5 @@ sequential DVD-R[W] and with DVD+R, but also with DVD-RAM, DVD+RW and
even regular disk files or block devices other than CD/DVD writers.
This is enabled by option --grow_overwriteable_iso.
We are currently preparing an integrated ISO-9660 multi-session tool
named [wiki:Xorriso xorriso] which will try to go one step beyond
growisofs.
--------------------------------------------------------------------------

View File

@ -1,4 +1,4 @@
AC_INIT([libburn], [0.4.2], [http://libburnia-project.org])
AC_INIT([libburn], [0.4.0], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -7,89 +7,35 @@ AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
dnl Notes by ts A71207 - A80126 :
dnl Making releases:
dnl BURN_MICRO_VERSION += 1;
dnl BURN_INTERFACE_AGE += 1;
dnl BURN_BINARY_AGE += 1;
dnl if any functions have been added, set BURN_INTERFACE_AGE to 0.
dnl if backwards compatibility has been broken,
dnl set BURN_BINARY_AGE and BURN_INTERFACE_AGE to 0.
dnl
dnl Regrettably the meaning of the various version types was misunderstood
dnl before version 0.4.1.
dnl
dnl In the past MAJOR.MINOR.MICRO versions led to the following SONAME numbers:
dnl 0.2.2 = 2 , 0.2.3 = 3 , 0.2.6 = 6
dnl 0.3.0 = 0 , 0.3.2 = 2 , 0.3.4 = 4 . 0.3.6 = 6 , 0.3.8 = 4
dnl 0.4.0 = 0 (also released as SONAME 4)
dnl
dnl Meanwhile the following schemes are maintained in parallel:
dnl
dnl BURN_MAJOR_VERSION , BURN_MINOR_VERSION , BURN_MICRO_VERSION
dnl are three small non-negative integers which describe the evolution
dnl steps of the library.
dnl Older applications are able to use younger libraries over
dnl quite a long range of such steps. Some day, nevertheless,
dnl compatibility might get terminated, after due notice.
dnl
dnl SONAME (libburn.so.4)
dnl is a small positive integer which marks a family of compatible
dnl evolution steps. Libraries with a particular SONAME allow a binary
dnl with the same SONAME to start up. Any further compatibility check is to
dnl be done by own runtime means. Especially *_version() calls in the API
dnl which return BURN_MAJOR_VERSION, BURN_MINOR_VERSION, BURN_MICRO_VERSION.
dnl See below.
dnl
dnl CURRENT, AGE, REVISION
dnl are three integers used by libtool. CURRENT is positive, the others
dnl non-negative. The use at runtime is not known yet. But libtool computes
dnl at build time SONAME = CURRENT - AGE.
dnl So this is a superspace of the SONAME version space. To avoid
dnl ill SONAME, the value of CURRENT must be larger than AGE.
dnl See also http://www.gnu.org/software/libtool/manual.html#Interfaces
dnl
dnl The name of the dynamic library will be libburn.so.$SONAME.$AGE.$REV .
dnl In the terminology of this file:
dnl CURRENT = LT_CURRENT
dnl AGE = LT_AGE
dnl REVISION= LT_REVISION
dnl
dnl Beginning with libburn-0.4.1 a rectified counting was introduced as
dnl CURRENT=10, REVISION=1, AGE=6
dnl This rectification declared that version to be binary compatible up
dnl from libburn-0.3.4.
dnl Real compatibility was given since libburn-0.3.2.
dnl Beware of libburn-0.2.6 which had SONAME=6 and is not binary compatible.
dnl Applications for libburn-0.2 to libburn-0.3.1 need recompilation but no
dnl source code changes.
dnl
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
dnl The linker will do no finer checks. Especially no age range check for
dnl the application binary. If SONAME matches, then the couple starts.
dnl
dnl Therefore at run time info is provided by libburn function burn_version().
dnl It returns the MAJOR, MINOR and MICRO revision of the library.
dnl Before using any API feature, a program should check for age.
dnl
dnl Normally one can allow a program to run with a library which passed the
dnl linker SONAME test and which is not older than the library it was
dnl developed for. Library2 is younger than library1 if:
dnl MAJOR2>MAJOR1 || (MAJOR2==MAJOR1 &&
dnl (MINOR2>MINOR1 || (MINOR2==MINOR1 && MICRO2 > MICRO1)))
dnl
dnl If BURN_*_VERSION changes, be sure to change AC_INIT above to match.
dnl if MAJOR or MINOR version changes, be sure to change AC_INIT above to match
dnl
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=4
BURN_MICRO_VERSION=2
BURN_MICRO_VERSION=0
BURN_INTERFACE_AGE=0
BURN_BINARY_AGE=0
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
AC_SUBST(BURN_MAJOR_VERSION)
AC_SUBST(BURN_MINOR_VERSION)
AC_SUBST(BURN_MICRO_VERSION)
AC_SUBST(BURN_INTERFACE_AGE)
AC_SUBST(BURN_BINARY_AGE)
AC_SUBST(BURN_VERSION)
dnl Libtool versioning
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
# SONAME = 11 - 7 = 4 . Library name = libburn.so.4.7.0
LT_CURRENT=11
LT_REVISION=0
LT_AGE=7
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION
LT_CURRENT=`expr $BURN_MICRO_VERSION - $BURN_INTERFACE_AGE`
LT_REVISION=$BURN_INTERFACE_AGE
LT_AGE=`expr $BURN_BINARY_AGE - $BURN_INTERFACE_AGE`
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
AC_SUBST(LT_RELEASE)
@ -98,12 +44,6 @@ AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)
AC_SUBST(LT_CURRENT_MINUS_AGE)
# ts A71207: This is done only not to break any old components
BURN_INTERFACE_AGE=$LT_REVISION
BURN_BINARY_AGE=`expr $LT_AGE + $BURN_INTERFACE_AGE`
AC_SUBST(BURN_INTERFACE_AGE)
AC_SUBST(BURN_BINARY_AGE)
AC_PREFIX_DEFAULT([/usr/local])
test "$prefix" = "NONE" && prefix=$ac_default_prefix
@ -160,6 +100,6 @@ AC_CONFIG_FILES([
Makefile
doc/doxygen.conf
version.h
libburn-1.pc
libburn-5.pc
])
AC_OUTPUT

View File

@ -4,7 +4,7 @@ libdir=@libdir@
includedir=@includedir@
Name: libburn
Description: Library to read/write optical discs
Description: Disc reading/writing library
Version: @VERSION@
Requires:
Libs: -L${libdir} -lburn

View File

@ -10,8 +10,9 @@
even if joinable and even if never joined.
To be activated after release of libburn-0.4.0
*/
#define Libburn_create_detached_threadS 1
*/
/* Alternative : Threads are created joinable.
Threads get detached in remove_worker() and thus should dispose themselves.
@ -143,11 +144,9 @@ static void add_worker(struct burn_drive *d, WorkerFunc f, void *data)
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
attr_pt= &attr;
/*
libdax_msgs_submit(libdax_messenger, -1, 0x00020158,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_LOW,
"add_worker(): Creating detached thread.", 0, 0);
*/
#endif
if (pthread_create(&a->thread, attr_pt, f, a)) {
@ -180,14 +179,12 @@ static void remove_worker(pthread_t th)
dispose themselves.
*/
ret = pthread_detach(th);
/*
sprintf(msg,
"remove_workers(): pid= %lu pthread_detach(%lu)= %d",
(unsigned long) getpid(), (unsigned long) th, ret);
libdax_msgs_submit(libdax_messenger, -1, 0x00020158,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_LOW,
msg, 0, 0);
*/
#endif /* Libburn_detach_done_workeR */

View File

@ -201,9 +201,7 @@ int burn_drive_inquire_media(struct burn_drive *d)
/* ts A61020 : d->status was set to BURN_DISC_BLANK as pure guess */
/* ts A71128 : run read_disc_info() for any recognizeable profile */
if (d->current_profile > 0 ||
d->mdata->cdr_write || d->mdata->cdrw_write ||
if (d->mdata->cdr_write || d->mdata->cdrw_write ||
d->mdata->dvdr_write || d->mdata->dvdram_write) {
#define Libburn_knows_correct_state_after_loaD 1

View File

@ -188,8 +188,115 @@ struct burn_source *burn_fd_source_new(int datafd, int subfd, off_t size)
}
/* ts A70930 */
/* ----------------------------- fifo ---------------------------- */
/* The fifo mechanism consists of a burn_source proxy which is here,
a thread management team which is located in async.c,
and a synchronous shoveller which is here.
*/
/* fifo_ng has a ringbuffer and runs in a thread. og is on its way out. */
#define Libburn_fifo_nG 1
#ifndef Libburn_fifo_nG
static int fifo_read(struct burn_source *source,
unsigned char *buffer,
int size)
{
struct burn_source_fifo *fs = source->data;
int ret;
if (fs->is_started == 0) {
ret = burn_fifo_start(source, 0);
if (ret <= 0) {
libdax_msgs_submit(libdax_messenger, -1, 0x00020152,
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
"Cannot start fifo thread", 0, 0);
return -1;
}
fs->is_started = 1;
}
if (size == 0)
return 0;
ret = read_full_buffer(fs->outlet[0], buffer, size);
if (ret > 0)
fs->out_counter += ret;
return ret;
}
static off_t fifo_get_size(struct burn_source *source)
{
struct burn_source_fifo *fs = source->data;
return fs->inp->get_size(fs->inp);
}
static int fifo_set_size(struct burn_source *source, off_t size)
{
struct burn_source_fifo *fs = source->data;
return fs->inp->set_size(fs->inp, size);
}
static void fifo_free(struct burn_source *source)
{
struct burn_source_fifo *fs = source->data;
if (fs->outlet[1] >= 0)
close(fs->outlet[1]);
free(fs);
}
int burn_fifo_source_shoveller_og(struct burn_source *source, int flag)
{
struct burn_source_fifo *fs = source->data;
int ret;
fs->thread_pid = getpid();
fs->thread_pid_valid = 1;
while (1) {
ret = fs->inp->read(fs->inp, (unsigned char *) fs->buf,
fs->chunksize);
if (ret > 0)
fs->in_counter += ret;
else if (ret == 0)
break; /* EOF */
else {
libdax_msgs_submit(libdax_messenger, -1, 0x00020153,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
"Read error on fifo input", errno, 0);
break;
}
ret = write(fs->outlet[1], fs->buf, ret);
if (ret == -1) {
/* >>> write error */;
break;
}
}
/* >>> check and destroy ring buffer */;
free(fs->buf);
fs->buf = NULL;
if (fs->outlet[1] >= 0)
close(fs->outlet[1]);
fs->outlet[1] = -1;
return (ret >= 0);
}
#endif /* Libburn_fifo_nG */
/* ts A71003 */
/* ------------------------------ fifo --------------------------- */
/* ----------------------------- fifo ng ------------------------- */
/* The fifo mechanism consists of a burn_source proxy which is here,
a thread management team which is located in async.c,
@ -204,7 +311,7 @@ static int fifo_sleep(int flag)
}
static int fifo_read(struct burn_source *source,
static int fifo_read_ng(struct burn_source *source,
unsigned char *buffer,
int size)
{
@ -234,7 +341,7 @@ static int fifo_read(struct burn_source *source,
/* This needs no mutex because each volatile variable has one thread
which may write and the other which only reads and is aware of
volatility.
The feeder of the ringbuffer is in burn_fifo_source_shoveller().
The feeder of the ringbuffer is in burn_fifo_source_shoveller_ng().
*/
todo = size;
bufsize = fs->chunksize * fs->chunks;
@ -287,7 +394,7 @@ static int fifo_read(struct burn_source *source,
}
static off_t fifo_get_size(struct burn_source *source)
static off_t fifo_get_size_ng(struct burn_source *source)
{
struct burn_source_fifo *fs = source->data;
@ -295,7 +402,7 @@ static off_t fifo_get_size(struct burn_source *source)
}
static int fifo_set_size(struct burn_source *source, off_t size)
static int fifo_set_size_ng(struct burn_source *source, off_t size)
{
struct burn_source_fifo *fs = source->data;
@ -303,7 +410,7 @@ static int fifo_set_size(struct burn_source *source, off_t size)
}
static void fifo_free(struct burn_source *source)
static void fifo_free_ng(struct burn_source *source)
{
struct burn_source_fifo *fs = source->data;
@ -315,7 +422,7 @@ static void fifo_free(struct burn_source *source)
}
int burn_fifo_source_shoveller(struct burn_source *source, int flag)
int burn_fifo_source_shoveller_ng(struct burn_source *source, int flag)
{
struct burn_source_fifo *fs = source->data;
int ret, bufsize, diff, wpos, rpos, trans_end, free_bytes;
@ -362,12 +469,8 @@ int burn_fifo_source_shoveller(struct burn_source *source, int flag)
}
/* Obtain next chunk */
if (fs->inp->read != NULL)
ret = fs->inp->read(fs->inp,
(unsigned char *) bufpt, fs->chunksize);
else
ret = fs->inp->read_xt( fs->inp,
(unsigned char *) bufpt, fs->chunksize);
ret = fs->inp->read(fs->inp, (unsigned char *) bufpt,
fs->chunksize);
if (ret > 0)
fs->in_counter += ret;
else if (ret == 0)
@ -434,12 +537,15 @@ int burn_fifo_source_shoveller(struct burn_source *source, int flag)
}
int burn_fifo_cancel(struct burn_source *source)
{
struct burn_source_fifo *fs = source->data;
#define Libburn_fifo_nG 1
burn_source_cancel(fs->inp);
return(1);
int burn_fifo_source_shoveller(struct burn_source *source, int flag)
{
#ifndef Libburn_fifo_nG
return burn_fifo_source_shoveller_og(source, flag);
#else
return burn_fifo_source_shoveller_ng(source, flag);
#endif
}
@ -448,6 +554,9 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
{
struct burn_source_fifo *fs;
struct burn_source *src;
#ifndef Libburn_fifo_nG
int ret, outlet[2];
#endif
if (((double) chunksize) * ((double) chunks) > 1024.0*1024.0*1024.0) {
libdax_msgs_submit(libdax_messenger, -1, 0x00020155,
@ -461,6 +570,16 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
"Desired fifo buffer too small", 0, 0);
return NULL;
}
#ifndef Libburn_fifo_nG
outlet[0] = outlet[1] = -1;
ret = pipe(outlet);
if (ret == -1) {
/* >>> error on pipe creation */;
return NULL;
}
#endif /* ! Libburn_fifo_nG */
fs = malloc(sizeof(struct burn_source_fifo));
if (fs == NULL)
return NULL;
@ -468,6 +587,12 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
fs->thread_pid = 0;
fs->thread_pid_valid = 0;
fs->inp = NULL; /* set later */
#ifndef Libburn_fifo_nG
fs->outlet[0] = outlet[0];
fs->outlet[1] = outlet[1];
#endif
fs->chunksize = chunksize;
fs->chunks = chunks;
fs->buf = NULL;
@ -482,15 +607,23 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
free((char *) fs);
return NULL;
}
src->read = NULL;
#ifndef Libburn_fifo_nG
src->read = fifo_read;
src->read_sub = NULL;
src->get_size = fifo_get_size;
src->set_size = fifo_set_size;
src->free_data = fifo_free;
#else /* Libburn_fifo_nG */
src->read = fifo_read_ng;
src->read_sub = NULL;
src->get_size = fifo_get_size_ng;
src->set_size = fifo_set_size_ng;
src->free_data = fifo_free_ng;
#endif /* ! Libburn_fifo_nG */
src->data = fs;
src->version= 1;
src->read_xt = fifo_read;
src->cancel= burn_fifo_cancel;
fs->inp = inp;
inp->refcount++; /* make sure inp lives longer than src */
@ -511,7 +644,7 @@ int burn_fifo_inquire_status(struct burn_source *source,
*status_text = NULL;
*size = 0;
if (source->free_data != fifo_free) {
if (source->free_data != fifo_free_ng) {
libdax_msgs_submit(libdax_messenger, -1, 0x00020157,
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
"burn_source is not a fifo object", 0, 0);
@ -540,3 +673,4 @@ int burn_fifo_inquire_status(struct burn_source *source,
return ret;
}

View File

@ -376,11 +376,6 @@ struct burn_source {
libburn will read a single sector by each call to (*read).
The size of a sector depends on BURN_MODE_*. The known range is
2048 to 2352.
IMPORTANT:
If this function pointer is NULL, then the struct burn_source is of
version >= 1 and the job of .(*read)() is done by .(*read_xt)().
See below, member .version.
*/
int (*read)(struct burn_source *, unsigned char *buffer, int size);
@ -401,7 +396,6 @@ struct burn_source {
off_t (*get_size)(struct burn_source *);
/* ts A70125 : BROKE BINARY BACKWARD COMPATIBILITY AT libburn-0.3.1. */
/** Program the reply of (*get_size) to a fixed value. It is advised
to implement this by a attribute off_t fixed_size; in *data .
The read() function does not have to take into respect this fake
@ -447,29 +441,6 @@ struct burn_source {
*/
void *data;
/* ts A71222 : Supposed to be binary backwards compatible extension. */
/** Valid only if above member .(*read)() is NULL. This indicates a
version of struct burn_source younger than 0.
From then on, member .version tells which further members exist
in the memory layout of struct burn_source. libburn will only touch
those announced extensions.
Versions:
0 has .(*read)() != NULL, not even .version is present.
1 has .version, .(*read_xt)(), .(*cancel)()
*/
int version;
/** This substitutes for (*read)() in versions above 0. */
int (*read_xt)(struct burn_source *, unsigned char *buffer, int size);
/** Informs the burn_source that the consumer of data prematurely
ended reading. This call may or may not be issued by libburn
before (*free_data)() is called.
*/
int (*cancel)(struct burn_source *source);
};
@ -2037,8 +2008,6 @@ int burn_track_get_mode(struct burn_track *track);
int burn_session_get_hidefirst(struct burn_session *session);
/** Returns the library's version in its parts
This is the runtime counterpart of the three build time macros
burn_header_version_* below.
@param major The major version number
@param minor The minor version number
@param micro The micro version number
@ -2046,38 +2015,10 @@ int burn_session_get_hidefirst(struct burn_session *session);
void burn_version(int *major, int *minor, int *micro);
/* ts A80129 */
/** These three release version numbers tell the revision of this header file
and of the API it describes. They are memorized by applications at build
time.
Immediately after burn_initialize() an application should do this check:
burn_version(&major, &minor, &micro);
if(major > burn_header_version_major
|| (major == burn_header_version_major
&& (minor > burn_header_version_minor
|| (minor == burn_header_version_minor
&& micro >= burn_header_version_micro)))) {
... Young enough. Go on with program run ....
} else {
... Too old. Do not use this libburn version ...
}
*/
#define burn_header_version_major 0
#define burn_header_version_minor 4
#define burn_header_version_micro 2
/** Note:
Above version numbers are also recorded in configure.ac and indirectly
lead to the reply of burn_version().
So the version triples in configure.ac and libburn.h must be kept equal.
In future versions the triple of libburn.h will be decisive alone.
*/
/* ts A60924 : ticket 74 */
/** Control queueing and stderr printing of messages from libburn.
Severity may be one of "NEVER", "ABORT", "FATAL", "FAILURE", "SORRY",
"WARNING", "HINT", "NOTE", "UPDATE", "DEBUG", "ALL".
Severity may be one of "NEVER", "ABORT", "FATAL", "SORRY", "WARNING",
"HINT", "NOTE", "UPDATE", "DEBUG", "ALL".
@param queue_severity Gives the minimum limit for messages to be queued.
Default: "NEVER". If you queue messages then you
must consume them by burn_msgs_obtain().
@ -2096,9 +2037,8 @@ int burn_msgs_set_severities(char *queue_severity,
/** Obtain the oldest pending libburn message from the queue which has at
least the given minimum_severity. This message and any older message of
lower severity will get discarded from the queue and is then lost forever.
@param minimum_severity may be one of "NEVER", "ABORT", "FATAL",
"FAILURE", "SORRY", "WARNING", "HINT", "NOTE", "UPDATE",
"DEBUG", "ALL".
@param minimum_severity may be one of "NEVER", "ABORT", "FATAL", "SORRY",
"WARNING", "HINT", "NOTE", "UPDATE", "DEBUG", "ALL".
To call with minimum_severity "NEVER" will discard the
whole queue.
@param error_code Will become a unique error code as liste in
@ -2124,8 +2064,8 @@ int burn_msgs_obtain(char *minimum_severity,
message text.
@param os_errno Eventual errno related to the message. Submit 0 if
the message is not related to a operating system error.
@param severity One of "ABORT", "FATAL", "FAILURE", "SORRY", "WARNING",
"HINT", "NOTE", "UPDATE", "DEBUG". Defaults to "FATAL".
@param severity One of "ABORT", "FATAL", "SORRY", "WARNING", "HINT",
"NOTE", "UPDATE", "DEBUG". Defaults to "FATAL".
@param d An eventual drive to which the message shall be related.
Submit NULL if the message is not specific to a
particular drive object.
@ -2238,7 +2178,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
/* A70904 */
/** Inquire whether the drive object is a real MMC drive or a pseudo-drive
created by a stdio: address.
created by burn_drive_dummy().
@param d The drive to inquire
@return 0= null-drive
1= real MMC drive

View File

@ -34,7 +34,7 @@ int libdax_audioxtr_new(struct libdax_audioxtr **xtr, char *path, int flag)
if(o==NULL)
return(-1);
strncpy(o->path,path,LIBDAX_AUDIOXTR_STRLEN-1);
o->path[LIBDAX_AUDIOXTR_STRLEN-1]= 0;
o->path[LIBDAX_AUDIOXTR_STRLEN]= 0;
o->fd= -1;
strcpy(o->fmt,"unidentified");
o->fmt_info[0]= 0;

View File

@ -1,8 +1,8 @@
/* libdax_msgs
Message handling facility of libdax.
Copyright (C) 2006 - 2008 Thomas Schmitt <scdbackup@gmx.net>,
provided under GPL version 2
Copyright (C) 2006 - 2007 Thomas Schmitt <scdbackup@gmx.net>,
provided under GPL
*/
#include <stdio.h>
@ -40,7 +40,7 @@ static int libdax_msgs_item_new(struct libdax_msgs_item **item,
if(ret==0)
o->timestamp= tv.tv_sec+0.000001*tv.tv_usec;
o->process_id= getpid();
o->origin= -1;
o->driveno= -1;
o->severity= LIBDAX_MSGS_SEV_ALL;
o->priority= LIBDAX_MSGS_PRIO_ZERO;
o->error_code= 0;
@ -109,12 +109,12 @@ int libdax_msgs_item_get_msg(struct libdax_msgs_item *item,
int libdax_msgs_item_get_origin(struct libdax_msgs_item *item,
double *timestamp, pid_t *process_id, int *origin,
double *timestamp, pid_t *process_id, int *driveno,
int flag)
{
*timestamp= item->timestamp;
*process_id= item->process_id;
*origin= item->origin;
*driveno= item->driveno;
return(1);
}
@ -252,8 +252,6 @@ int libdax_msgs__text_to_sev(char *severity_name, int *severity,
*severity= LIBDAX_MSGS_SEV_ABORT;
else if(strncmp(severity_name,"FATAL",5)==0)
*severity= LIBDAX_MSGS_SEV_FATAL;
else if(strncmp(severity_name,"FAILURE",7)==0)
*severity= LIBDAX_MSGS_SEV_FAILURE;
else if(strncmp(severity_name,"SORRY",5)==0)
*severity= LIBDAX_MSGS_SEV_SORRY;
else if(strncmp(severity_name,"WARNING",7)==0)
@ -280,7 +278,8 @@ int libdax_msgs__sev_to_text(int severity, char **severity_name,
int flag)
{
if(flag&1) {
*severity_name= "NEVER\nABORT\nFATAL\nFAILURE\nSORRY\nWARNING\nHINT\nNOTE\nUPDATE\nDEBUG\nALL";
*severity_name=
"NEVER\nABORT\nFATAL\nSORRY\nWARNING\nHINT\nNOTE\nUPDATE\nDEBUG\nALL";
return(1);
}
*severity_name= "";
@ -290,8 +289,6 @@ int libdax_msgs__sev_to_text(int severity, char **severity_name,
*severity_name= "ABORT";
else if(severity>=LIBDAX_MSGS_SEV_FATAL)
*severity_name= "FATAL";
else if(severity>=LIBDAX_MSGS_SEV_FAILURE)
*severity_name= "FAILURE";
else if(severity>=LIBDAX_MSGS_SEV_SORRY)
*severity_name= "SORRY";
else if(severity>=LIBDAX_MSGS_SEV_WARNING)
@ -314,7 +311,7 @@ int libdax_msgs__sev_to_text(int severity, char **severity_name,
}
int libdax_msgs_submit(struct libdax_msgs *m, int origin, int error_code,
int libdax_msgs_submit(struct libdax_msgs *m, int driveno, int error_code,
int severity, int priority, char *msg_text,
int os_errno, int flag)
{
@ -352,7 +349,7 @@ int libdax_msgs_submit(struct libdax_msgs *m, int origin, int error_code,
ret= libdax_msgs_item_new(&item,m->youngest,0);
if(ret<=0)
goto failed;
item->origin= origin;
item->driveno= driveno;
item->error_code= error_code;
item->severity= severity;
item->priority= priority;

View File

@ -1,8 +1,8 @@
/* libdax_msgs
Message handling facility of libdax.
Copyright (C) 2006-2008 Thomas Schmitt <scdbackup@gmx.net>,
provided under GPL version 2
Copyright (C) 2006-2007 Thomas Schmitt <scdbackup@gmx.net>,
provided under GPL
*/
@ -23,7 +23,7 @@ struct libdax_msgs_item {
double timestamp;
pid_t process_id;
int origin;
int driveno;
int severity;
int priority;
@ -140,47 +140,15 @@ struct libdax_msgs_item;
*/
#define LIBDAX_MSGS_SEV_WARNING 0x50000000
/** Non-fatal error messages indicating that important parts of an action
failed but processing may go on if one accepts deviations from the
desired result.
E.g.: One of several libisofs input files cannot be found.
A speed setting cannot be made.
After SORRY a function should try to go on if that makes any sense
and if no threshold prescribes abort on SORRY. The function should
nevertheless indicate some failure in its return value.
It should - but it does not have to.
/** Non-fatal error messages indicating that parts of the action failed
but processing will/should go on
*/
#define LIBDAX_MSGS_SEV_SORRY 0x60000000
/** Non-fatal error indicating that a complete action failed and that
only a thorough new setup of preconditions will give hope for success.
E.g.: No media is inserted in the output drive.
No write mode can be found for inserted media.
All libisofs input files are inaccessible.
After FAILURE a function should end very soon with a return value
indicating failure.
*/
#define LIBDAX_MSGS_SEV_FAILURE 0x68000000
/** An error message which puts the whole operation of the program in question
E.g.: Not enough memory for essential temporary objects.
Irregular errors from resources.
Programming errors (soft assert).
After FATAL a function should end very soon with a return value
indicating severe failure.
*/
#define LIBDAX_MSGS_SEV_FATAL 0x70000000
/** A message from an abort handler which will finally finish libburn
*/
#define LIBDAX_MSGS_SEV_ABORT 0x71000000
@ -205,16 +173,6 @@ struct libdax_msgs_item;
#define LIBDAX_MSGS_PRIO_NEVER 0x7fffffff
/* Origin numbers of libburn drives may range from 0 to 1048575 */
#define LIBDAX_MSGS_ORIGIN_DRIVE_BASE 0
#define LIBDAX_MSGS_ORIGIN_DRIVE_TOP 0xfffff
/* Origin numbers of libisofs images may range from 1048575 to 2097152 */
#define LIBDAX_MSGS_ORIGIN_IMAGE_BASE 0x100000
#define LIBDAX_MSGS_ORIGIN_IMAGE_TOP 0x1fffff
/* Public Functions */
/* Calls initiated from inside the direct owner (e.g. from libburn) */
@ -253,10 +211,7 @@ int libdax_msgs_refer(struct libdax_msgs **pt, struct libdax_msgs *o, int flag);
/** Submit a message to a message handling facility.
@param origin program specific identification number of the originator of
a message. E.g. drive number. Programs should have an own
range of origin numbers. See above LIBDAX_MSGS_ORIGIN_*_BASE
Use -1 if no number is known.
@param driveno program specific drive number. Use -1 if no number is known.
@param error_code Unique error code. Use only registered codes. See below.
The same unique error_code may be issued at different
occasions but those should be equivalent out of the view
@ -269,12 +224,11 @@ int libdax_msgs_refer(struct libdax_msgs **pt, struct libdax_msgs *o, int flag);
@param flag Bitfield for control purposes (unused yet, submit 0)
@return 1 on success, 0 on rejection, <0 for severe errors
*/
int libdax_msgs_submit(struct libdax_msgs *m, int origin, int error_code,
int libdax_msgs_submit(struct libdax_msgs *m, int driveno, int error_code,
int severity, int priority, char *msg_text,
int os_errno, int flag);
/* Calls from applications (to be forwarded by direct owner) */
@ -346,7 +300,7 @@ int libdax_msgs_item_get_msg(struct libdax_msgs_item *item,
@return 1 on success, 0 on invalid item, <0 for servere errors
*/
int libdax_msgs_item_get_origin(struct libdax_msgs_item *item,
double *timestamp, pid_t *process_id, int *origin,
double *timestamp, pid_t *process_id, int *driveno,
int flag);
@ -487,7 +441,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
0x00020156 (SORRY,HIGH) = Desired fifo buffer too small
0x00020157 (FATAL,HIGH) = burn_source is not a fifo object
0x00020158 (DEBUG,LOW) = Reporting thread disposal precautions
0x00020159 (DEBUG,HIGH) = TOC Format 0 returns inconsistent data
libdax_audioxtr:
0x00020200 (SORRY,HIGH) = Cannot open audio source file

View File

@ -116,7 +116,6 @@ extern struct libdax_msgs *libdax_messenger;
static unsigned char MMC_GET_MSINFO[] =
{ 0x43, 0, 1, 0, 0, 0, 0, 16, 0, 0 };
static unsigned char MMC_GET_TOC[] = { 0x43, 2, 2, 0, 0, 0, 0, 16, 0, 0 };
static unsigned char MMC_GET_TOC_FMT0[] = { 0x43, 0, 0, 0, 0, 0, 0, 16, 0, 0 };
static unsigned char MMC_GET_ATIP[] = { 0x43, 2, 4, 0, 0, 0, 0, 16, 0, 0 };
static unsigned char MMC_GET_DISC_INFO[] =
{ 0x51, 0, 0, 0, 0, 0, 0, 16, 0, 0 };
@ -798,153 +797,6 @@ int mmc_fake_toc_entry(struct burn_toc_entry *entry, int session_number,
}
/* ts A71128 : for DVD-ROM drives which offer no reliable track information */
static int mmc_read_toc_fmt0_al(struct burn_drive *d, int *alloc_len)
{
struct burn_track *track;
struct burn_session *session;
struct burn_toc_entry *entry;
struct buffer buf;
struct command c;
int dlen, i, old_alloc_len, session_number, prev_session = -1;
int lba, size;
unsigned char *tdata, size_data[4], start_data[4];
if (*alloc_len < 4)
return 0;
scsi_init_command(&c, MMC_GET_TOC_FMT0, sizeof(MMC_GET_TOC_FMT0));
c.dxfer_len = *alloc_len;
c.opcode[7] = (c.dxfer_len >> 8) & 0xff;
c.opcode[8] = c.dxfer_len & 0xff;
c.retry = 1;
c.page = &buf;
c.page->bytes = 0;
c.page->sectors = 0;
c.dir = FROM_DRIVE;
d->issue_command(d, &c);
if (c.error) {
err_ex:;
libdax_msgs_submit(libdax_messenger, d->global_index,
0x0002010d,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
"Could not inquire TOC", 0,0);
d->status = BURN_DISC_UNSUITABLE;
d->toc_entries = 0;
/* Prefering memory leaks over fandangos */
d->toc_entry = calloc(1, sizeof(struct burn_toc_entry));
return 0;
}
dlen = c.page->data[0] * 256 + c.page->data[1];
old_alloc_len = *alloc_len;
*alloc_len = dlen + 2;
if (old_alloc_len < 12)
return 1;
if (dlen + 2 > old_alloc_len)
dlen = old_alloc_len - 2;
d->complete_sessions = 1 + c.page->data[3] - c.page->data[2];
d->last_track_no = d->complete_sessions;
if (dlen - 2 < (d->last_track_no + 1) * 8) {
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020159,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
"TOC Format 0 returns inconsistent data", 0,0);
goto err_ex;
}
d->toc_entries = d->last_track_no + d->complete_sessions;
if (d->toc_entries < 1)
return 0;
d->toc_entry = calloc(d->toc_entries, sizeof(struct burn_toc_entry));
if(d->toc_entry == NULL)
return 0;
d->disc = burn_disc_create();
if (d->disc == NULL)
return 0;
for (i = 0; i < d->complete_sessions; i++) {
session = burn_session_create();
if (session == NULL)
return 0;
burn_disc_add_session(d->disc, session, BURN_POS_END);
burn_session_free(session);
}
for (i = 0; i < d->last_track_no; i++) {
tdata = c.page->data + 4 + i * 8;
session_number = i + 1;
if (session_number != prev_session && prev_session > 0) {
/* leadout entry previous session */
entry = &(d->toc_entry[(i - 1) + prev_session]);
lba = mmc_four_char_to_int(start_data) +
mmc_four_char_to_int(size_data);
mmc_int_to_four_char(start_data, lba);
mmc_int_to_four_char(size_data, 0);
mmc_fake_toc_entry(entry, prev_session, 0xA2,
size_data, start_data);
entry->min= entry->sec= entry->frame= 0;
d->disc->session[prev_session - 1]->leadout_entry =
entry;
}
/* ??? >>> d->media_capacity_remaining , d->media_lba_limit
as of mmc_fake_toc()
*/
entry = &(d->toc_entry[i + session_number - 1]);
track = burn_track_create();
if (track == NULL)
return -1;
burn_session_add_track(
d->disc->session[session_number - 1],
track, BURN_POS_END);
track->entry = entry;
burn_track_free(track);
memcpy(start_data, tdata + 4, 4);
/* size_data are estimated from next track start */
memcpy(size_data, tdata + 8 + 4, 4);
size = mmc_four_char_to_int(size_data) -
mmc_four_char_to_int(start_data);
mmc_int_to_four_char(size_data, size);
mmc_fake_toc_entry(entry, session_number, i + 1,
size_data, start_data);
if (prev_session != session_number)
d->disc->session[session_number - 1]->firsttrack = i+1;
d->disc->session[session_number - 1]->lasttrack = i+1;
prev_session = session_number;
}
if (prev_session > 0 && prev_session <= d->disc->sessions) {
/* leadout entry of last session of closed disc */
tdata = c.page->data + 4 + d->last_track_no * 8;
entry = &(d->toc_entry[(d->last_track_no - 1) + prev_session]);
memcpy(start_data, tdata + 4, 4);
mmc_int_to_four_char(size_data, 0);
mmc_fake_toc_entry(entry, prev_session, 0xA2,
size_data, start_data);
entry->min= entry->sec= entry->frame= 0;
d->disc->session[prev_session - 1]->leadout_entry = entry;
}
return 1;
}
/* ts A71128 : for DVD-ROM drives which offer no reliable track information */
static int mmc_read_toc_fmt0(struct burn_drive *d)
{
int alloc_len = 4, ret;
if (mmc_function_spy(d, "mmc_read_toc_fmt0") <= 0)
return -1;
ret = mmc_read_toc_fmt0_al(d, &alloc_len);
if (alloc_len >= 12)
ret = mmc_read_toc_fmt0_al(d, &alloc_len);
return ret;
}
/* ts A70131 : compose a disc TOC structure from d->complete_sessions
and 52h READ TRACK INFORMATION */
int mmc_fake_toc(struct burn_drive *d)
@ -973,12 +825,6 @@ int mmc_fake_toc(struct burn_drive *d)
msg, 0,0);
return 0;
}
/* ts A71128 : My DVD-ROM drive issues no reliable track info.
One has to try 43h READ TOC/PMA/ATIP Form 0. */
if (d->current_profile == 0x10 && d->last_track_no <= 1) {
ret = mmc_read_toc_fmt0(d);
return ret;
}
d->disc = burn_disc_create();
if (d->disc == NULL)
return -1;
@ -989,15 +835,12 @@ int mmc_fake_toc(struct burn_drive *d)
memset(d->toc_entry, 0,d->toc_entries * sizeof(struct burn_toc_entry));
for (i = 0; i < d->complete_sessions; i++) {
session = burn_session_create();
if (session == NULL)
return -1;
burn_disc_add_session(d->disc, session, BURN_POS_END);
burn_session_free(session);
}
memset(size_data, 0, 4);
memset(start_data, 0, 4);
/* Entry Layout :
session 1 track 1 entry 0
...
@ -1100,15 +943,13 @@ static int mmc_read_toc_al(struct burn_drive *d, int *alloc_len)
if (!(d->current_profile == -1 || d->current_is_cd_profile)) {
/* ts A70131 : MMC_GET_TOC uses Response Format 2
For DVD this fails with 5,24,00 */
/* mmc_read_toc_fmt0() uses
Response Format 0: mmc5r03.pdf 6.26.3.2
which does not yield the same result with the same disc
/* One could try Response Format 0: mmc5r03.pdf 6.26.3.2
which does not yield the same result wit the same disc
on different drives.
*/
/* ts A70201 :
This uses the session count from 51h READ DISC INFORMATION
and the track records from 52h READ TRACK INFORMATION.
mmc_read_toc_fmt0() is used as fallback for dull DVD-ROM.
and the track records from 52h READ TRACK INFORMATION
*/
mmc_fake_toc(d);
@ -1410,7 +1251,7 @@ static int mmc_read_disc_info_al(struct burn_drive *d, int *alloc_len)
*alloc_len = len + 2;
if (old_alloc_len < 34)
return 1;
if (*alloc_len < 24) /* data[23] is the last byte used here */
if (*alloc_len < 24) /* data[23] is the last byte used her */
return 0;
if (len + 2 > old_alloc_len)
len = old_alloc_len - 2;

View File

@ -292,7 +292,7 @@ static void flipq(unsigned char *sub)
/* ts A70904 */
/** @param flag bit0=be silent on data shortage */
/** @param flag bit=be silent on data shortage */
int burn_stdio_read(int fd, char *buf, int bufsize, struct burn_drive *d,
int flag)
{
@ -377,7 +377,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
fd = open(d->devname, O_RDONLY | O_LARGEFILE);
if (fd == -1) {
if (errno != ENOENT || !(flag & 2))
if (!(flag & 1))
libdax_msgs_submit(libdax_messenger,
d->global_index,
0x00020005,
@ -387,9 +387,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
ret = 0; goto ex;
}
if (lseek(fd, byte_address, SEEK_SET) == -1) {
if (!(flag & 2))
libdax_msgs_submit(libdax_messenger,
d->global_index,
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00020147,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
"Cannot address start byte", errno, 0);
@ -418,7 +416,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
err = d->read_10(d, start, chunksize, d->buffer);
} else {
ret = burn_stdio_read(fd, (char *) d->buffer->data,
cpy_size, d, !!(flag & 2));
cpy_size, d, 0);
err = 0;
if (ret <= 0)
err = BE_CANCELLED;

View File

@ -123,12 +123,7 @@ static void get_bytes(struct burn_track *track, int count, unsigned char *data)
/* Next we use source data */
curr = valid;
if (!track->eos) {
if (track->source->read != NULL)
valid = track->source->read(track->source,
data + curr, count - curr);
else
valid = track->source->read_xt(track->source,
data + curr, count - curr);
valid = track->source->read(track->source, data + curr, count - curr);
} else valid = 0;
if (valid <= 0) { /* ts A61031 : extended from (valid == -1) */

View File

@ -18,6 +18,8 @@ void burn_source_free(struct burn_source *src)
enum burn_source_status burn_track_set_source(struct burn_track *t,
struct burn_source *s)
{
if (!s->read)
return BURN_SOURCE_FAILED;
s->refcount++;
t->source = s;
@ -41,15 +43,3 @@ struct burn_source *burn_source_new(void)
out->refcount = 1;
return out;
}
/* ts A71223 */
int burn_source_cancel(struct burn_source *src)
{
if(src->read == NULL)
if(src->version > 0)
if(src->cancel != NULL)
src->cancel(src);
return 1;
}

View File

@ -5,6 +5,4 @@
struct burn_source *burn_source_new(void);
int burn_source_cancel(struct burn_source *src);
#endif /*__SOURCE*/

View File

@ -566,16 +566,12 @@ void spc_sense_write_params(struct burn_drive *d)
c.dir = FROM_DRIVE;
d->issue_command(d, &c);
/* ts A71128 : do not interpret reply if error */
m = d->mdata;
if(!c.error) {
size = c.page->data[0] * 256 + c.page->data[1];
m = d->mdata;
page = c.page->data + 8;
burn_print(1, "write page length 0x%x\n", page[1]);
m->write_page_length = page[1];
m->write_page_valid = 1;
} else
m->write_page_valid = 0;
mmc_read_disc_info(d);
/* ts A70212 : try to setup d->media_capacity_remaining */

View File

@ -43,7 +43,6 @@
#include "write.h"
#include "options.h"
#include "structure.h"
#include "source.h"
#include "libdax_msgs.h"
extern struct libdax_msgs *libdax_messenger;
@ -837,8 +836,6 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s,
/* ts A61103 */
ret = 1;
ex:;
if (d->cancel)
burn_source_cancel(t->source);
if (o->write_type == BURN_WRITE_TAO) {
/* ts A71002 */
@ -1276,8 +1273,6 @@ int burn_dvd_write_track(struct burn_write_opts *o,
}
ret = 1;
ex:;
if (d->cancel)
burn_source_cancel(t->source);
if (!is_flushed)
d->sync_cache(d); /* burn_write_flush() was not called */
return ret;
@ -1698,12 +1693,8 @@ int burn_stdio_read_source(struct burn_source *source, char *buf, int bufsize,
int count= 0, todo;
for(todo = bufsize; todo > 0; todo -= count) {
if(source->read!=NULL)
count = source->read(source,
(unsigned char *) (buf + (bufsize - todo)), todo);
else
count = source->read_xt(source,
(unsigned char *) (buf + (bufsize - todo)), todo);
if (count <= 0)
break;
}
@ -1727,6 +1718,16 @@ int burn_stdio_write(int fd, char *buf, int count, struct burn_drive *d,
}
/* ts A70911
If defined this makes stdio run on top of sector_data() rather than
own stdio read and write functions. The MMC function pointers d->write()
and d->sync_cache() get replaced by stdio substitutes.
*/
#define Libburn_stdio_track_by_sector_datA 1
#ifdef Libburn_stdio_track_by_sector_datA
/* ts A70910 : to be used as burn_drive.write(), emulating mmc_write() */
int burn_stdio_mmc_write(struct burn_drive *d, int start, struct buffer *buf)
{
@ -1848,6 +1849,9 @@ int burn_stdio_slowdown(struct burn_drive *d, struct timeval *prev_time,
}
#endif /* Libburn_stdio_track_by_sector_datA */
/* ts A70904 */
int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
int tnum, int flag)
@ -1856,9 +1860,14 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
struct burn_track *t = s->track[tnum];
struct burn_drive *d = o->drive;
char buf[16*2048];
#ifdef Libburn_stdio_track_by_sector_datA
int i, prev_sync_sector = 0;
struct buffer *out = d->buffer;
struct timeval prev_time;
#else
int eof_seen = 0;
off_t t_size, w_count;
#endif
bufsize = sizeof(buf);
fd = d->stdio_fd;
@ -1867,6 +1876,8 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
burn_disc_init_track_status(o, s, tnum, sectors);
open_ended = burn_track_is_open_ended(t);
#ifdef Libburn_stdio_track_by_sector_datA
/* attach stdio emulators for mmc_*() functions */
if (o->simulate)
d->write = burn_stdio_mmc_dummy_write;
@ -1878,7 +1889,7 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
for (i = 0; open_ended || i < sectors; i++) {
/* transact a (CD sized) sector */
if (!sector_data(o, t, 0))
{ret= 0; goto ex;}
return 0;
if (open_ended) {
d->progress.sectors = sectors = d->progress.sector;
if (burn_track_is_data_done(t))
@ -1901,11 +1912,60 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
out->bytes = o->obs;
}
ret = burn_write_flush(o, t);
ret= 1;
ex:;
if (d->cancel)
burn_source_cancel(t->source);
#else /* Libburn_stdio_track_by_sector_datA */
t_size = t->source->get_size(t->source);
/* >>> write t->offset zeros */;
for(w_count = 0; w_count < t_size || open_ended; w_count += ret) {
if (t_size - w_count < bufsize && ! open_ended)
/* >>> what about final sector padding ? */
bufsize = t_size - w_count;
if (eof_seen)
ret = 0;
else
ret = burn_stdio_read_source(t->source, buf,
bufsize, o, 0);
if (ret < 0)
return ret;
if (ret == 0 && open_ended)
break;
if (ret < bufsize && !open_ended) {
memset(buf + ret, 0, bufsize - ret);
eof_seen = 1;
ret = bufsize;
}
t->sourcecount += ret;
if (!o->simulate)
ret = burn_stdio_write(fd, buf, ret, d, 0);
if (ret <= 0)
return ret;
d->progress.sector = (w_count + (off_t) ret) / (off_t) 2048;
if (open_ended)
d->progress.sectors = d->progress.sector;
t->writecount += ret;
t->written_sectors = t->writecount / 2048;
/* Flush to physical device after each full MB */
if (d->progress.sector - prev_sync_sector >= 512) {
prev_sync_sector = d->progress.sector;
if (!o->simulate)
burn_stdio_sync_cache(fd, d, 1);
}
}
/* >>> write t->tail zeros */;
#endif
return 1;
}

View File

@ -606,8 +606,7 @@ int telltoc_read_and_print(struct burn_drive *drive,
if (start_sector == -1)
start_sector = last_track_start;
if (sector_count == -1) {
sector_count = last_track_start + last_track_size
- start_sector;
sector_count = last_track_size;
if (media_is_cd_profile) /* In case it is a TAO track */
final_cd_try = 0; /* allow it (-1 is denial) */
}