Compare commits
11 Commits
ZeroFourTw
...
ZeroFourZe
Author | SHA1 | Date | |
---|---|---|---|
70c9ceb4ae | |||
2596d8ae38 | |||
557802faa0 | |||
627668704a | |||
3fd0c9b208 | |||
cd81ce5973 | |||
1b397d62ef | |||
480ac98360 | |||
d958a862fb | |||
32f16be9cd | |||
cdb9f1a3f9 |
14
Makefile.am
14
Makefile.am
@ -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
7
README
@ -6,7 +6,7 @@ This all is under GPL.
|
||||
------------------------------------------------------------------------------
|
||||
libburnia-project.org
|
||||
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (C) 2006-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.
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
@ -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
|
||||
|
@ -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"
|
@ -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"
|
@ -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
|
||||
|
@ -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, µ);
|
||||
|
||||
/* <<< 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, µ);
|
||||
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;
|
||||
|
@ -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> </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:<path></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> </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> </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>
|
||||
|
@ -1 +1 @@
|
||||
#define Cdrskin_timestamP "2008.02.01.100001"
|
||||
#define Cdrskin_timestamP "2007.10.27.090421"
|
||||
|
@ -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 -
|
||||
|
@ -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."
|
||||
|
@ -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.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
|
98
configure.ac
98
configure.ac
@ -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
|
||||
|
@ -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
|
@ -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 */
|
||||
|
||||
|
@ -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
|
||||
|
180
libburn/file.c
180
libburn/file.c
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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, µ);
|
||||
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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
167
libburn/mmc.c
167
libburn/mmc.c
@ -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;
|
||||
|
@ -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,12 +387,10 @@ 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,
|
||||
0x00020147,
|
||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"Cannot address start byte", errno, 0);
|
||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||
0x00020147,
|
||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"Cannot address start byte", errno, 0);
|
||||
ret = 0; goto ex;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
@ -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) */
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,4 @@
|
||||
|
||||
struct burn_source *burn_source_new(void);
|
||||
|
||||
int burn_source_cancel(struct burn_source *src);
|
||||
|
||||
#endif /*__SOURCE*/
|
||||
|
@ -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 */
|
||||
size = c.page->data[0] * 256 + c.page->data[1];
|
||||
m = d->mdata;
|
||||
if(!c.error) {
|
||||
size = c.page->data[0] * 256 + c.page->data[1];
|
||||
page = c.page->data + 8;
|
||||
burn_print(1, "write page length 0x%x\n", page[1]);
|
||||
m->write_page_length = page[1];
|
||||
m->write_page_valid = 1;
|
||||
} else
|
||||
m->write_page_valid = 0;
|
||||
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;
|
||||
mmc_read_disc_info(d);
|
||||
|
||||
/* ts A70212 : try to setup d->media_capacity_remaining */
|
||||
|
@ -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,11 +1693,7 @@ 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,
|
||||
count = source->read(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);
|
||||
return ret;
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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) */
|
||||
}
|
||||
|
Reference in New Issue
Block a user