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_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
test_structest_SOURCES = test/structest.c
|
test_structest_SOURCES = test/structest.c
|
||||||
|
|
||||||
## cdrskin construction site - ts A60816 - A71025
|
## cdrskin construction site - ts A60816 - A71024
|
||||||
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
|
||||||
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_4_2
|
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_4_0
|
||||||
|
cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
||||||
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(THREAD_LIBS)
|
|
||||||
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking
|
|
||||||
cdrskin_cdrskin_LDADD = libburn/libburn.la $(THREAD_LIBS)
|
|
||||||
|
|
||||||
cdrskin_cdrskin_SOURCES = cdrskin/cdrskin.c cdrskin/cdrfifo.c cdrskin/cdrfifo.h cdrskin/cdrskin_timestamp.h
|
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"
|
## Open questions: how to compute $timestamp and express -DX="$timestamp"
|
||||||
@ -167,13 +163,13 @@ indent: $(indent_files)
|
|||||||
|
|
||||||
# Extra things
|
# Extra things
|
||||||
nodist_pkgconfig_DATA = \
|
nodist_pkgconfig_DATA = \
|
||||||
libburn-1.pc
|
libburn-5.pc
|
||||||
|
|
||||||
# http://www.nada.kth.se/cgi-bin/info?(automake.info)Man%20pages
|
# http://www.nada.kth.se/cgi-bin/info?(automake.info)Man%20pages
|
||||||
man_MANS = cdrskin/cdrskin.1
|
man_MANS = cdrskin/cdrskin.1
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
libburn-1.pc.in \
|
libburn-5.pc.in \
|
||||||
version.h.in \
|
version.h.in \
|
||||||
doc/comments \
|
doc/comments \
|
||||||
doc/doxygen.conf.in \
|
doc/doxygen.conf.in \
|
||||||
|
7
README
7
README
@ -6,7 +6,7 @@ This all is under GPL.
|
|||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
libburnia-project.org
|
libburnia-project.org
|
||||||
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
|
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Copyright (C) 2006-2008 Mario Danic, Thomas Schmitt
|
Copyright (C) 2006-2007 Mario Danic, Thomas Schmitt
|
||||||
|
|
||||||
Still containing parts of
|
Still containing parts of
|
||||||
Libburn. By Derek Foreman <derek@signalmarketing.com> and
|
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.
|
by these enhancements: growing of overwriteable media and disk files.
|
||||||
Taking again a bow towards Andy Polyakov.
|
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>
|
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Integrated sub project of libburnia-project.org but also published via:
|
Integrated sub project of libburnia-project.org but also published via:
|
||||||
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
http://scdbackup.sourceforge.net/cdrskin_eng.html
|
||||||
http://scdbackup.sourceforge.net/cdrskin-0.4.2.tar.gz
|
http://scdbackup.sourceforge.net/cdrskin-0.4.0.pl00.tar.gz
|
||||||
Copyright (C) 2006-2008 Thomas Schmitt, provided under GPL version 2.
|
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
|
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
|
tar xzf cdrskin-0.4.0.pl00.tar.gz
|
||||||
cd cdrskin-0.4.2
|
cd cdrskin-0.4.0
|
||||||
|
|
||||||
Within that directory execute:
|
Within that directory execute:
|
||||||
|
|
||||||
./configure --prefix=/usr
|
./configure --prefix=/usr
|
||||||
make
|
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
|
install libburn in order to use this binary. Installation of libburn is
|
||||||
beyond the scope of cdrskin. For this, see included libburn docs.
|
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
|
cdrskin/cdrskin -help
|
||||||
man cdrskin/cdrskin.1
|
man cdrskin/cdrskin.1
|
||||||
|
|
||||||
|
|
||||||
Install (eventually as superuser) cdrskin to a directory where it can be found:
|
Install (eventually as superuser) cdrskin to a directory where it can be found:
|
||||||
The command for global installation of both, libburn and cdrskin is
|
If cdrskin was already installed by a previous version, or by "make install"
|
||||||
make install
|
in the course of this installation, then find out where:
|
||||||
|
|
||||||
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:
|
|
||||||
which cdrskin
|
which cdrskin
|
||||||
Copy your standalone binary to exactly the address which you get as reply.
|
Copy your standalone binary to exactly the address which you get as reply
|
||||||
E.g.:
|
|
||||||
|
|
||||||
cp cdrskin/cdrskin /usr/bin/cdrskin
|
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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License version 2
|
it under the terms of the GNU General Public License as published by
|
||||||
as published by the Free Software Foundation.
|
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,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
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:
|
Based on and sub project of:
|
||||||
libburnia-project.org
|
libburnia-project.org
|
||||||
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
|
By Mario Danic <mario.danic@gmail.com> and Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Copyright (C) 2006-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
|
libburnia-project.org is inspired by and in other components still containing
|
||||||
parts of
|
parts of
|
||||||
|
@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
|
|||||||
# My changes are in $changes , mainly in $changes/cdrskin
|
# My changes are in $changes , mainly in $changes/cdrskin
|
||||||
changes="./libburn-release"
|
changes="./libburn-release"
|
||||||
|
|
||||||
skin_release="0.4.2"
|
skin_release="0.4.0"
|
||||||
patch_level=".pl00"
|
patch_level=".pl00"
|
||||||
skin_rev="$skin_release""$patch_level"
|
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_to_html_cmd="./cdrskin/convert_man_to_html.sh"
|
||||||
man_page_html="cdrskin/man_1_cdrskin.html"
|
man_page_html="cdrskin/man_1_cdrskin.html"
|
||||||
|
|
||||||
# bintarget_dynamic="cdrskin_${skin_rev}-x86-suse9_0"
|
bintarget_dynamic="cdrskin_${skin_rev}-x86-suse9_0"
|
||||||
bintarget_dynamic="cdrskin_${skin_rev}-amd64-suse10_2"
|
|
||||||
bintarget_static="$bintarget_dynamic"-static
|
bintarget_static="$bintarget_dynamic"-static
|
||||||
|
|
||||||
if test -d "$changes"
|
if test -d "$changes"
|
@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
|
|||||||
# My changes are in $changes , mainly in $changes/cdrskin
|
# My changes are in $changes , mainly in $changes/cdrskin
|
||||||
changes="./libburn-develop"
|
changes="./libburn-develop"
|
||||||
|
|
||||||
skin_release="0.4.3"
|
skin_release="0.4.1"
|
||||||
patch_level=""
|
patch_level=""
|
||||||
skin_rev="$skin_release""$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_to_html_cmd="./cdrskin/convert_man_to_html.sh"
|
||||||
man_page_html="cdrskin/man_1_cdrskin.html"
|
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
|
bintarget_static="$bintarget_dynamic"-static
|
||||||
|
|
||||||
if test -d "$changes"
|
if test -d "$changes"
|
@ -148,8 +148,8 @@ read-only. Closing is done automatically unless option
|
|||||||
is given which keeps the media appendable.
|
is given which keeps the media appendable.
|
||||||
.br
|
.br
|
||||||
Write mode
|
Write mode
|
||||||
-tao allows to use track sources of unpredictable length (like stdin) and
|
-tao allows to use track source of unpredictable length (like stdin) and allows
|
||||||
allows to write further sessions to appendable media.
|
to write further sessions to appendable media.
|
||||||
-sao produces audio sessions with seamless tracks but needs predicted track
|
-sao produces audio sessions with seamless tracks but needs predicted track
|
||||||
sizes and cannot append sessions to media.
|
sizes and cannot append sessions to media.
|
||||||
.br
|
.br
|
||||||
@ -278,9 +278,7 @@ and device files which have the same SCSI address parameters (e.g. /dev/sg0).
|
|||||||
.SS
|
.SS
|
||||||
.B Emulated drives:
|
.B Emulated drives:
|
||||||
.br
|
.br
|
||||||
Option
|
Option --allow_emulated_drives enables addressing of pseudo-drives
|
||||||
.B --allow_emulated_drives
|
|
||||||
enables addressing of pseudo-drives
|
|
||||||
which get emulated on top of filesystem objects. Regular data files and
|
which get emulated on top of filesystem objects. Regular data files and
|
||||||
block devices result in pseudo-drives which behave much like DVD-RAM.
|
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
|
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.
|
Provided under GPL version 2. See future commitment below.
|
||||||
|
|
||||||
A cdrecord compatible command line interface for libburn.
|
A cdrecord compatible command line interface for libburn.
|
||||||
@ -88,23 +88,9 @@ or
|
|||||||
|
|
||||||
/** The official program version */
|
/** The official program version */
|
||||||
#ifndef Cdrskin_prog_versioN
|
#ifndef Cdrskin_prog_versioN
|
||||||
#define Cdrskin_prog_versioN "0.4.2"
|
#define Cdrskin_prog_versioN "0.4.0"
|
||||||
#endif
|
#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 */
|
/** The source code release timestamp */
|
||||||
#include "cdrskin_timestamp.h"
|
#include "cdrskin_timestamp.h"
|
||||||
#ifndef Cdrskin_timestamP
|
#ifndef Cdrskin_timestamP
|
||||||
@ -135,48 +121,28 @@ or
|
|||||||
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
#endif /* Cdrskin_libburn_cvs_A60220_tS */
|
||||||
|
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_4_2
|
#ifdef Cdrskin_libburn_0_4_0
|
||||||
#define Cdrskin_libburn_versioN "0.4.2"
|
#define Cdrskin_libburn_versioN "0.4.0"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif /* Cdrskin_libburn_0_4_2 */
|
#endif /* Cdrskin_libburn_0_4_0 */
|
||||||
|
|
||||||
#ifdef Cdrskin_libburn_0_4_3
|
#ifdef Cdrskin_libburn_0_4_1
|
||||||
#define Cdrskin_libburn_versioN "0.4.3"
|
#define Cdrskin_libburn_versioN "0.4.1"
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
|
|
||||||
/* Place novelty switch macros here.
|
/* Place novelty switch macros here.
|
||||||
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
|
Move them down to Cdrskin_libburn_from_pykix_svN on version leap
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* 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
|
#ifndef Cdrskin_libburn_versioN
|
||||||
#define Cdrskin_libburn_0_4_2
|
#define Cdrskin_libburn_versioN "0.4.0"
|
||||||
#define Cdrskin_libburn_versioN "0.4.2"
|
|
||||||
#define Cdrskin_libburn_from_pykix_svN 1
|
#define Cdrskin_libburn_from_pykix_svN 1
|
||||||
#endif
|
#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
|
#ifdef Cdrskin_libburn_from_pykix_svN
|
||||||
#ifndef Cdrskin_oldfashioned_api_usE
|
#ifndef Cdrskin_oldfashioned_api_usE
|
||||||
|
|
||||||
@ -239,9 +205,6 @@ or
|
|||||||
#define Cdrskin_libburn_has_get_drive_rolE 1
|
#define Cdrskin_libburn_has_get_drive_rolE 1
|
||||||
#define Cdrskin_libburn_has_drive_equals_adR 1
|
#define Cdrskin_libburn_has_drive_equals_adR 1
|
||||||
|
|
||||||
/* 0.4.2 */
|
|
||||||
/* no novel features but rather organizational changes */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef Cdrskin_new_api_tesT
|
#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 Cdrpreskin_initialize_lib(struct CdrpreskiN *preskin, int flag)
|
||||||
{
|
{
|
||||||
int ret, major, minor, micro;
|
int ret;
|
||||||
|
|
||||||
ret= burn_initialize();
|
ret= burn_initialize();
|
||||||
if(ret==0) {
|
if(ret==0) {
|
||||||
fprintf(stderr,"cdrskin : FATAL : Initialization of libburn failed\n");
|
fprintf(stderr,"cdrskin : FATAL : Initialization of libburn failed\n");
|
||||||
return(0);
|
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);
|
Cdrpreskin_set_severities(preskin,NULL,NULL,0);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
@ -2823,13 +2773,9 @@ set_severities:;
|
|||||||
goto set_severities;
|
goto set_severities;
|
||||||
|
|
||||||
} else if(strcmp(argv[i],"-version")==0) {
|
} else if(strcmp(argv[i],"-version")==0) {
|
||||||
int major, minor, micro;
|
|
||||||
|
|
||||||
printf(
|
printf(
|
||||||
"Cdrecord 2.01-Emulation Copyright (C) 2006-2008, see libburnia-project.org\n");
|
"Cdrecord 2.01-Emulation Copyright (C) 2006-2007, see libburnia-project.org\n");
|
||||||
printf("libburn interface : %s\n",Cdrskin_libburn_versioN);
|
printf("libburn version : %s\n",Cdrskin_libburn_versioN);
|
||||||
burn_version(&major, &minor, µ);
|
|
||||||
printf("libburn in use : %d.%d.%d\n", major, minor, micro);
|
|
||||||
|
|
||||||
#ifndef Cdrskin_extra_leaN
|
#ifndef Cdrskin_extra_leaN
|
||||||
printf("cdrskin version : %s\n",Cdrskin_prog_versioN);
|
printf("cdrskin version : %s\n",Cdrskin_prog_versioN);
|
||||||
@ -2915,7 +2861,7 @@ final_checks:;
|
|||||||
dev_too_long:;
|
dev_too_long:;
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"cdrskin: FATAL : dev=... too long (max. %d characters)\n",
|
"cdrskin: FATAL : dev=... too long (max. %d characters)\n",
|
||||||
(int) sizeof(o->device_adr)-1);
|
sizeof(o->device_adr)-1);
|
||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
strcpy(o->device_adr,adr);
|
strcpy(o->device_adr,adr);
|
||||||
@ -7029,7 +6975,7 @@ set_driveropts:;
|
|||||||
if(strlen(argv[i]+13)>=sizeof(skin->eject_device)) {
|
if(strlen(argv[i]+13)>=sizeof(skin->eject_device)) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"cdrskin: FATAL : eject_device=... too long. (max: %d, given: %d)\n",
|
"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);
|
return(0);
|
||||||
}
|
}
|
||||||
strcpy(skin->eject_device,argv[i]+13);
|
strcpy(skin->eject_device,argv[i]+13);
|
||||||
@ -7292,7 +7238,7 @@ msifile_equals:;
|
|||||||
if(strlen(value_pt)>=sizeof(skin->msifile)) {
|
if(strlen(value_pt)>=sizeof(skin->msifile)) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"cdrskin: FATAL : msifile=... too long. (max: %d, given: %d)\n",
|
"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);
|
return(0);
|
||||||
}
|
}
|
||||||
strcpy(skin->msifile, value_pt);
|
strcpy(skin->msifile, value_pt);
|
||||||
@ -7477,7 +7423,7 @@ track_too_large:;
|
|||||||
if(strlen(argv[i])>=sizeof(skin->source_path)) {
|
if(strlen(argv[i])>=sizeof(skin->source_path)) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"cdrskin: FATAL : Source address too long. (max: %d, given: %d)\n",
|
"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);
|
return(0);
|
||||||
}
|
}
|
||||||
source_has_size= 0;
|
source_has_size= 0;
|
||||||
|
@ -56,7 +56,7 @@ and to MMC-5 for DVD).
|
|||||||
GPL software included:<BR>
|
GPL software included:<BR>
|
||||||
</H2>
|
</H2>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>libburn-0.4.2</DT>
|
<DT>libburn-0.4.0</DT>
|
||||||
<DD>(founded by Derek Foreman and Ben Jansens,
|
<DD>(founded by Derek Foreman and Ben Jansens,
|
||||||
furthered by team of libburnia-project.org)</DD>
|
furthered by team of libburnia-project.org)</DD>
|
||||||
<DD>transfers data to CD and DVD</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>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT>Download as source code (see README):</DT>
|
<DT>Download as source code (see README):</DT>
|
||||||
<DD><A HREF="cdrskin-0.4.2.pl00.tar.gz">cdrskin-0.4.2.pl00.tar.gz</A>
|
<DD><A HREF="cdrskin-0.4.0.pl00.tar.gz">cdrskin-0.4.0.pl00.tar.gz</A>
|
||||||
(700 KB).
|
(680 KB).
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
The cdrskin tarballs are source code identical with libburn releases
|
The cdrskin tarballs are source code identical with libburn releases
|
||||||
@ -187,14 +187,14 @@ cdrskin is part of libburn - full libburn is provided with cdrskin releases.
|
|||||||
</DD>
|
</DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DT>Download as single x86 binaries (untar and move to /usr/bin/cdrskin):</DT>
|
<DT>Download as single x86 binaries (untar and move to /usr/bin/cdrskin):</DT>
|
||||||
<DD><A HREF="cdrskin_0.4.2.pl00-x86-suse9_0.tar.gz">
|
<DD><A HREF="cdrskin_0.4.0.pl00-x86-suse9_0.tar.gz">
|
||||||
cdrskin_0.4.2.pl00-x86-suse9_0.tar.gz</A>, (110 KB),
|
cdrskin_0.4.0.pl00-x86-suse9_0.tar.gz</A>, (106 KB),
|
||||||
<DL>
|
<DL>
|
||||||
<DD>runs on SuSE 9.0 (2.4.21) , RIP-14.4 (2.6.14) ,
|
<DD>runs on SuSE 9.0 (2.4.21) , RIP-14.4 (2.6.14) ,
|
||||||
Gentoo (2.6.15 x86_64 Athlon).</DD>
|
Gentoo (2.6.15 x86_64 Athlon).</DD>
|
||||||
</DL>
|
</DL>
|
||||||
<DD><A HREF="cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz">
|
<DD><A HREF="cdrskin_0.4.0.pl00-x86-suse9_0-static.tar.gz">
|
||||||
cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
cdrskin_0.4.0.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
||||||
<DL>
|
<DL>
|
||||||
<DD>runs on SuSE 7.2 (2.4.4), and on the systems above.</DD>
|
<DD>runs on SuSE 7.2 (2.4.4), and on the systems above.</DD>
|
||||||
</DL>
|
</DL>
|
||||||
@ -221,13 +221,18 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
|
|||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
<P>
|
<P>
|
||||||
Enhancements towards previous stable version cdrskin-0.4.0:
|
Enhancements towards previous stable version cdrskin-0.3.8:
|
||||||
<UL>
|
<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>
|
</UL>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Bug fixes towards cdrskin-0.4.2.pl00:
|
Bug fixes towards cdrskin-0.4.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
<LI>none yet</LI>
|
||||||
</UL>
|
</UL>
|
||||||
@ -239,8 +244,8 @@ Enhancements towards previous stable version cdrskin-0.4.0:
|
|||||||
|
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><H3>Development snapshot, version 0.4.3 :</H3></DT>
|
<DT><H3>Development snapshot, version 0.4.1 :</H3></DT>
|
||||||
<DD>Enhancements towards stable version 0.4.2.pl00:
|
<DD>Enhancements towards stable version 0.4.0.pl00:
|
||||||
<UL>
|
<UL>
|
||||||
<LI>none yet</LI>
|
<LI>none yet</LI>
|
||||||
<!--
|
<!--
|
||||||
@ -248,10 +253,10 @@ Enhancements towards previous stable version cdrskin-0.4.0:
|
|||||||
</UL>
|
</UL>
|
||||||
</DD>
|
</DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DD><A HREF="README_cdrskin_devel">README 0.4.3</A>
|
<DD><A HREF="README_cdrskin_devel">README 0.4.1</A>
|
||||||
<DD><A HREF="cdrskin__help_devel">cdrskin_0.4.3 --help</A></DD>
|
<DD><A HREF="cdrskin__help_devel">cdrskin_0.4.1 --help</A></DD>
|
||||||
<DD><A HREF="cdrskin_help_devel">cdrskin_0.4.3 -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.3)</A></DD>
|
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.4.1)</A></DD>
|
||||||
<DD> </DD>
|
<DD> </DD>
|
||||||
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
<DT>Maintainers of cdrskin unstable packages please use SVN of
|
||||||
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
|
||||||
@ -271,15 +276,15 @@ admins with full system souvereignty.</DT>
|
|||||||
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
<A HREF="README_cdrskin_devel">upcoming README</A> ):
|
||||||
</DD>
|
</DD>
|
||||||
<DD>
|
<DD>
|
||||||
<A HREF="cdrskin-0.4.3.tar.gz">cdrskin-0.4.3.tar.gz</A>
|
<A HREF="cdrskin-0.4.1.tar.gz">cdrskin-0.4.1.tar.gz</A>
|
||||||
(700 KB).
|
(680 KB).
|
||||||
</DD>
|
</DD>
|
||||||
<DD>Binary (untar and move to /usr/bin/cdrskin):</DD>
|
<DD>Binary (untar and move to /usr/bin/cdrskin):</DD>
|
||||||
<DD><A HREF="cdrskin_0.4.3-x86-suse9_0.tar.gz">
|
<DD><A HREF="cdrskin_0.4.1-x86-suse9_0.tar.gz">
|
||||||
cdrskin_0.4.3-x86-suse9_0.tar.gz</A>, (110 KB).
|
cdrskin_0.4.1-x86-suse9_0.tar.gz</A>, (105 KB).
|
||||||
</DD>
|
</DD>
|
||||||
<DD><A HREF="cdrskin_0.4.3-x86-suse9_0-static.tar.gz">
|
<DD><A HREF="cdrskin_0.4.1-x86-suse9_0-static.tar.gz">
|
||||||
cdrskin_0.4.3-x86-suse9_0-static.tar.gz</A>, (310 KB)
|
cdrskin_0.4.1-x86-suse9_0-static.tar.gz</A>, (310 KB)
|
||||||
</DD>
|
</DD>
|
||||||
</DL>
|
</DL>
|
||||||
</P>
|
</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
|
------------------------------------ cycle - cdrskin-0.3.9 - 2007.10.23.150436
|
||||||
|
|
||||||
2007.10.23.150436 [1240]
|
2007.10.23.150436 []
|
||||||
cdrskin/changelog.txt
|
cdrskin/changelog.txt
|
||||||
Next cdrskin-0.3.9 cycle
|
Next cdrskin-0.3.9 cycle
|
||||||
|
|
||||||
23 Oct 2007 [1241]
|
|
||||||
libcevap/main.c
|
|
||||||
Preparations for lowercase class and function names
|
|
||||||
|
|
||||||
23 Oct 2007 [1242]
|
----------------------------- release - cdrskin-0.4.0.pl00 - 2007.10.
|
||||||
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
|
|
||||||
* New option direct_write_amount=
|
* New option direct_write_amount=
|
||||||
* New option --grow_overwriteable_iso
|
* New option --grow_overwriteable_iso
|
||||||
* New option --allow_emulated_drives dev=stdio:<path>
|
* New option --allow_emulated_drives dev=stdio:<path>
|
||||||
* More cdrecord options supported: -format, -inq, -load, -lock, -immed, -waiti
|
* More cdrecord options supported: -format, -inq, -load, -lock, -immed, -waiti
|
||||||
* New option fallback_program=
|
* 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
|
TODO
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
||||||
Check all SORRY and FATAL errors whether they should become FAILUREs
|
|
||||||
|
|
||||||
Refuse writing if track size exceeds free media space
|
Refuse writing if track size exceeds free media space
|
||||||
|
|
||||||
problem with telltoc: double descriptor list from before load and after load
|
problem with telltoc: double descriptor list from before load and after load
|
||||||
@ -5068,6 +4806,21 @@ Emulate -dummy on overwriteables ?
|
|||||||
Emulate -dummy on DVD+R ?
|
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 -
|
------------------------------------ cycle - cdrskin-0.3.9 -
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# compile_cdrskin.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-*
|
# to be executed within ./libburn-* resp ./cdrskin-*
|
||||||
|
|
||||||
debug_opts="-O2"
|
debug_opts="-O2"
|
||||||
def_opts=
|
def_opts=
|
||||||
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
|
||||||
libvers="-DCdrskin_libburn_0_4_2"
|
libvers="-DCdrskin_libburn_0_4_0"
|
||||||
cleanup_src_or_obj="libburn/cleanup.o"
|
cleanup_src_or_obj="libburn/cleanup.o"
|
||||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||||
@ -33,15 +33,15 @@ do
|
|||||||
libdax_audioxtr_o=
|
libdax_audioxtr_o=
|
||||||
libdax_msgs_o="libburn/message.o"
|
libdax_msgs_o="libburn/message.o"
|
||||||
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
|
||||||
elif test "$i" = "-libburn_0_4_2"
|
elif test "$i" = "-libburn_0_4_0"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_0_4_2"
|
libvers="-DCdrskin_libburn_0_4_0"
|
||||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||||
cleanup_src_or_obj="libburn/cleanup.o"
|
cleanup_src_or_obj="libburn/cleanup.o"
|
||||||
elif test "$i" = "-libburn_svn"
|
elif test "$i" = "-libburn_svn"
|
||||||
then
|
then
|
||||||
libvers="-DCdrskin_libburn_0_4_3"
|
libvers="-DCdrskin_libburn_0_4_1"
|
||||||
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
libdax_audioxtr_o="libburn/libdax_audioxtr.o"
|
||||||
libdax_msgs_o="libburn/libdax_msgs.o"
|
libdax_msgs_o="libburn/libdax_msgs.o"
|
||||||
cleanup_src_or_obj="libburn/cleanup.o"
|
cleanup_src_or_obj="libburn/cleanup.o"
|
||||||
@ -76,7 +76,7 @@ do
|
|||||||
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
|
||||||
echo " -compile_dewav compile program test/dewav without libburn."
|
echo " -compile_dewav compile program test/dewav without libburn."
|
||||||
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
|
echo " -cvs_A60220 set macro to match libburn-CVS of 20 Feb 2006."
|
||||||
echo " -libburn_0_4_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 " -libburn_svn set macro to match current libburn-SVN."
|
||||||
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
|
echo " -no_largefile do not use 64 bit off_t (must match libburn)."
|
||||||
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
echo " -do_not_compile_cdrskin omit compilation of cdrskin/cdrskin."
|
||||||
|
@ -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.
|
even regular disk files or block devices other than CD/DVD writers.
|
||||||
This is enabled by option --grow_overwriteable_iso.
|
This is enabled by option --grow_overwriteable_iso.
|
||||||
|
|
||||||
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])
|
AC_PREREQ([2.50])
|
||||||
dnl AC_CONFIG_HEADER([config.h])
|
dnl AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@ -7,89 +7,35 @@ AC_CANONICAL_TARGET
|
|||||||
|
|
||||||
AM_INIT_AUTOMAKE([subdir-objects])
|
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
|
||||||
dnl Regrettably the meaning of the various version types was misunderstood
|
dnl if MAJOR or MINOR version changes, be sure to change AC_INIT above to match
|
||||||
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
|
dnl
|
||||||
BURN_MAJOR_VERSION=0
|
BURN_MAJOR_VERSION=0
|
||||||
BURN_MINOR_VERSION=4
|
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
|
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||||
|
|
||||||
AC_SUBST(BURN_MAJOR_VERSION)
|
AC_SUBST(BURN_MAJOR_VERSION)
|
||||||
AC_SUBST(BURN_MINOR_VERSION)
|
AC_SUBST(BURN_MINOR_VERSION)
|
||||||
AC_SUBST(BURN_MICRO_VERSION)
|
AC_SUBST(BURN_MICRO_VERSION)
|
||||||
|
AC_SUBST(BURN_INTERFACE_AGE)
|
||||||
|
AC_SUBST(BURN_BINARY_AGE)
|
||||||
AC_SUBST(BURN_VERSION)
|
AC_SUBST(BURN_VERSION)
|
||||||
|
|
||||||
dnl Libtool versioning
|
dnl Libtool versioning
|
||||||
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION
|
||||||
# SONAME = 11 - 7 = 4 . Library name = libburn.so.4.7.0
|
LT_CURRENT=`expr $BURN_MICRO_VERSION - $BURN_INTERFACE_AGE`
|
||||||
LT_CURRENT=11
|
LT_REVISION=$BURN_INTERFACE_AGE
|
||||||
LT_REVISION=0
|
LT_AGE=`expr $BURN_BINARY_AGE - $BURN_INTERFACE_AGE`
|
||||||
LT_AGE=7
|
|
||||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||||
|
|
||||||
AC_SUBST(LT_RELEASE)
|
AC_SUBST(LT_RELEASE)
|
||||||
@ -98,12 +44,6 @@ AC_SUBST(LT_REVISION)
|
|||||||
AC_SUBST(LT_AGE)
|
AC_SUBST(LT_AGE)
|
||||||
AC_SUBST(LT_CURRENT_MINUS_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])
|
AC_PREFIX_DEFAULT([/usr/local])
|
||||||
test "$prefix" = "NONE" && prefix=$ac_default_prefix
|
test "$prefix" = "NONE" && prefix=$ac_default_prefix
|
||||||
|
|
||||||
@ -160,6 +100,6 @@ AC_CONFIG_FILES([
|
|||||||
Makefile
|
Makefile
|
||||||
doc/doxygen.conf
|
doc/doxygen.conf
|
||||||
version.h
|
version.h
|
||||||
libburn-1.pc
|
libburn-5.pc
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
@ -4,7 +4,7 @@ libdir=@libdir@
|
|||||||
includedir=@includedir@
|
includedir=@includedir@
|
||||||
|
|
||||||
Name: libburn
|
Name: libburn
|
||||||
Description: Library to read/write optical discs
|
Description: Disc reading/writing library
|
||||||
Version: @VERSION@
|
Version: @VERSION@
|
||||||
Requires:
|
Requires:
|
||||||
Libs: -L${libdir} -lburn
|
Libs: -L${libdir} -lburn
|
@ -10,8 +10,9 @@
|
|||||||
even if joinable and even if never joined.
|
even if joinable and even if never joined.
|
||||||
|
|
||||||
To be activated after release of libburn-0.4.0
|
To be activated after release of libburn-0.4.0
|
||||||
*/
|
|
||||||
#define Libburn_create_detached_threadS 1
|
#define Libburn_create_detached_threadS 1
|
||||||
|
*/
|
||||||
|
|
||||||
/* Alternative : Threads are created joinable.
|
/* Alternative : Threads are created joinable.
|
||||||
Threads get detached in remove_worker() and thus should dispose themselves.
|
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_init(&attr);
|
||||||
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
||||||
attr_pt= &attr;
|
attr_pt= &attr;
|
||||||
/*
|
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020158,
|
libdax_msgs_submit(libdax_messenger, -1, 0x00020158,
|
||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_LOW,
|
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_LOW,
|
||||||
"add_worker(): Creating detached thread.", 0, 0);
|
"add_worker(): Creating detached thread.", 0, 0);
|
||||||
*/
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (pthread_create(&a->thread, attr_pt, f, a)) {
|
if (pthread_create(&a->thread, attr_pt, f, a)) {
|
||||||
@ -180,14 +179,12 @@ static void remove_worker(pthread_t th)
|
|||||||
dispose themselves.
|
dispose themselves.
|
||||||
*/
|
*/
|
||||||
ret = pthread_detach(th);
|
ret = pthread_detach(th);
|
||||||
/*
|
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"remove_workers(): pid= %lu pthread_detach(%lu)= %d",
|
"remove_workers(): pid= %lu pthread_detach(%lu)= %d",
|
||||||
(unsigned long) getpid(), (unsigned long) th, ret);
|
(unsigned long) getpid(), (unsigned long) th, ret);
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020158,
|
libdax_msgs_submit(libdax_messenger, -1, 0x00020158,
|
||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_LOW,
|
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_LOW,
|
||||||
msg, 0, 0);
|
msg, 0, 0);
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* Libburn_detach_done_workeR */
|
#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 A61020 : d->status was set to BURN_DISC_BLANK as pure guess */
|
||||||
|
|
||||||
/* ts A71128 : run read_disc_info() for any recognizeable profile */
|
if (d->mdata->cdr_write || d->mdata->cdrw_write ||
|
||||||
if (d->current_profile > 0 ||
|
|
||||||
d->mdata->cdr_write || d->mdata->cdrw_write ||
|
|
||||||
d->mdata->dvdr_write || d->mdata->dvdram_write) {
|
d->mdata->dvdr_write || d->mdata->dvdram_write) {
|
||||||
|
|
||||||
#define Libburn_knows_correct_state_after_loaD 1
|
#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 */
|
/* ts A71003 */
|
||||||
/* ------------------------------ fifo --------------------------- */
|
/* ----------------------------- fifo ng ------------------------- */
|
||||||
|
|
||||||
/* The fifo mechanism consists of a burn_source proxy which is here,
|
/* The fifo mechanism consists of a burn_source proxy which is here,
|
||||||
a thread management team which is located in async.c,
|
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,
|
unsigned char *buffer,
|
||||||
int size)
|
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
|
/* This needs no mutex because each volatile variable has one thread
|
||||||
which may write and the other which only reads and is aware of
|
which may write and the other which only reads and is aware of
|
||||||
volatility.
|
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;
|
todo = size;
|
||||||
bufsize = fs->chunksize * fs->chunks;
|
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;
|
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;
|
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;
|
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;
|
struct burn_source_fifo *fs = source->data;
|
||||||
int ret, bufsize, diff, wpos, rpos, trans_end, free_bytes;
|
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 */
|
/* Obtain next chunk */
|
||||||
if (fs->inp->read != NULL)
|
ret = fs->inp->read(fs->inp, (unsigned char *) bufpt,
|
||||||
ret = fs->inp->read(fs->inp,
|
fs->chunksize);
|
||||||
(unsigned char *) bufpt, fs->chunksize);
|
|
||||||
else
|
|
||||||
ret = fs->inp->read_xt( fs->inp,
|
|
||||||
(unsigned char *) bufpt, fs->chunksize);
|
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
fs->in_counter += ret;
|
fs->in_counter += ret;
|
||||||
else if (ret == 0)
|
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)
|
#define Libburn_fifo_nG 1
|
||||||
{
|
|
||||||
struct burn_source_fifo *fs = source->data;
|
|
||||||
|
|
||||||
burn_source_cancel(fs->inp);
|
int burn_fifo_source_shoveller(struct burn_source *source, int flag)
|
||||||
return(1);
|
{
|
||||||
|
#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_fifo *fs;
|
||||||
struct burn_source *src;
|
struct burn_source *src;
|
||||||
|
#ifndef Libburn_fifo_nG
|
||||||
|
int ret, outlet[2];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (((double) chunksize) * ((double) chunks) > 1024.0*1024.0*1024.0) {
|
if (((double) chunksize) * ((double) chunks) > 1024.0*1024.0*1024.0) {
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020155,
|
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);
|
"Desired fifo buffer too small", 0, 0);
|
||||||
return NULL;
|
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));
|
fs = malloc(sizeof(struct burn_source_fifo));
|
||||||
if (fs == NULL)
|
if (fs == NULL)
|
||||||
return 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 = 0;
|
||||||
fs->thread_pid_valid = 0;
|
fs->thread_pid_valid = 0;
|
||||||
fs->inp = NULL; /* set later */
|
fs->inp = NULL; /* set later */
|
||||||
|
|
||||||
|
#ifndef Libburn_fifo_nG
|
||||||
|
fs->outlet[0] = outlet[0];
|
||||||
|
fs->outlet[1] = outlet[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
fs->chunksize = chunksize;
|
fs->chunksize = chunksize;
|
||||||
fs->chunks = chunks;
|
fs->chunks = chunks;
|
||||||
fs->buf = NULL;
|
fs->buf = NULL;
|
||||||
@ -482,15 +607,23 @@ struct burn_source *burn_fifo_source_new(struct burn_source *inp,
|
|||||||
free((char *) fs);
|
free((char *) fs);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
src->read = NULL;
|
|
||||||
|
#ifndef Libburn_fifo_nG
|
||||||
|
src->read = fifo_read;
|
||||||
src->read_sub = NULL;
|
src->read_sub = NULL;
|
||||||
src->get_size = fifo_get_size;
|
src->get_size = fifo_get_size;
|
||||||
src->set_size = fifo_set_size;
|
src->set_size = fifo_set_size;
|
||||||
src->free_data = fifo_free;
|
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->data = fs;
|
||||||
src->version= 1;
|
|
||||||
src->read_xt = fifo_read;
|
|
||||||
src->cancel= burn_fifo_cancel;
|
|
||||||
fs->inp = inp;
|
fs->inp = inp;
|
||||||
inp->refcount++; /* make sure inp lives longer than src */
|
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;
|
*status_text = NULL;
|
||||||
*size = 0;
|
*size = 0;
|
||||||
|
|
||||||
if (source->free_data != fifo_free) {
|
if (source->free_data != fifo_free_ng) {
|
||||||
libdax_msgs_submit(libdax_messenger, -1, 0x00020157,
|
libdax_msgs_submit(libdax_messenger, -1, 0x00020157,
|
||||||
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
"burn_source is not a fifo object", 0, 0);
|
"burn_source is not a fifo object", 0, 0);
|
||||||
@ -540,3 +673,4 @@ int burn_fifo_inquire_status(struct burn_source *source,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -376,11 +376,6 @@ struct burn_source {
|
|||||||
libburn will read a single sector by each call to (*read).
|
libburn will read a single sector by each call to (*read).
|
||||||
The size of a sector depends on BURN_MODE_*. The known range is
|
The size of a sector depends on BURN_MODE_*. The known range is
|
||||||
2048 to 2352.
|
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);
|
int (*read)(struct burn_source *, unsigned char *buffer, int size);
|
||||||
|
|
||||||
@ -401,7 +396,6 @@ struct burn_source {
|
|||||||
off_t (*get_size)(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
|
/** Program the reply of (*get_size) to a fixed value. It is advised
|
||||||
to implement this by a attribute off_t fixed_size; in *data .
|
to implement this by a attribute off_t fixed_size; in *data .
|
||||||
The read() function does not have to take into respect this fake
|
The read() function does not have to take into respect this fake
|
||||||
@ -447,29 +441,6 @@ struct burn_source {
|
|||||||
*/
|
*/
|
||||||
void *data;
|
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);
|
int burn_session_get_hidefirst(struct burn_session *session);
|
||||||
|
|
||||||
/** Returns the library's version in its parts
|
/** 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 major The major version number
|
||||||
@param minor The minor version number
|
@param minor The minor version number
|
||||||
@param micro The micro 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);
|
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 */
|
/* ts A60924 : ticket 74 */
|
||||||
/** Control queueing and stderr printing of messages from libburn.
|
/** Control queueing and stderr printing of messages from libburn.
|
||||||
Severity may be one of "NEVER", "ABORT", "FATAL", "FAILURE", "SORRY",
|
Severity may be one of "NEVER", "ABORT", "FATAL", "SORRY", "WARNING",
|
||||||
"WARNING", "HINT", "NOTE", "UPDATE", "DEBUG", "ALL".
|
"HINT", "NOTE", "UPDATE", "DEBUG", "ALL".
|
||||||
@param queue_severity Gives the minimum limit for messages to be queued.
|
@param queue_severity Gives the minimum limit for messages to be queued.
|
||||||
Default: "NEVER". If you queue messages then you
|
Default: "NEVER". If you queue messages then you
|
||||||
must consume them by burn_msgs_obtain().
|
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
|
/** Obtain the oldest pending libburn message from the queue which has at
|
||||||
least the given minimum_severity. This message and any older message of
|
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.
|
lower severity will get discarded from the queue and is then lost forever.
|
||||||
@param minimum_severity may be one of "NEVER", "ABORT", "FATAL",
|
@param minimum_severity may be one of "NEVER", "ABORT", "FATAL", "SORRY",
|
||||||
"FAILURE", "SORRY", "WARNING", "HINT", "NOTE", "UPDATE",
|
"WARNING", "HINT", "NOTE", "UPDATE", "DEBUG", "ALL".
|
||||||
"DEBUG", "ALL".
|
|
||||||
To call with minimum_severity "NEVER" will discard the
|
To call with minimum_severity "NEVER" will discard the
|
||||||
whole queue.
|
whole queue.
|
||||||
@param error_code Will become a unique error code as liste in
|
@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.
|
message text.
|
||||||
@param os_errno Eventual errno related to the message. Submit 0 if
|
@param os_errno Eventual errno related to the message. Submit 0 if
|
||||||
the message is not related to a operating system error.
|
the message is not related to a operating system error.
|
||||||
@param severity One of "ABORT", "FATAL", "FAILURE", "SORRY", "WARNING",
|
@param severity One of "ABORT", "FATAL", "SORRY", "WARNING", "HINT",
|
||||||
"HINT", "NOTE", "UPDATE", "DEBUG". Defaults to "FATAL".
|
"NOTE", "UPDATE", "DEBUG". Defaults to "FATAL".
|
||||||
@param d An eventual drive to which the message shall be related.
|
@param d An eventual drive to which the message shall be related.
|
||||||
Submit NULL if the message is not specific to a
|
Submit NULL if the message is not specific to a
|
||||||
particular drive object.
|
particular drive object.
|
||||||
@ -2238,7 +2178,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
|
|||||||
|
|
||||||
/* A70904 */
|
/* A70904 */
|
||||||
/** Inquire whether the drive object is a real MMC drive or a pseudo-drive
|
/** 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
|
@param d The drive to inquire
|
||||||
@return 0= null-drive
|
@return 0= null-drive
|
||||||
1= real MMC drive
|
1= real MMC drive
|
||||||
|
@ -34,7 +34,7 @@ int libdax_audioxtr_new(struct libdax_audioxtr **xtr, char *path, int flag)
|
|||||||
if(o==NULL)
|
if(o==NULL)
|
||||||
return(-1);
|
return(-1);
|
||||||
strncpy(o->path,path,LIBDAX_AUDIOXTR_STRLEN-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;
|
o->fd= -1;
|
||||||
strcpy(o->fmt,"unidentified");
|
strcpy(o->fmt,"unidentified");
|
||||||
o->fmt_info[0]= 0;
|
o->fmt_info[0]= 0;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* libdax_msgs
|
/* libdax_msgs
|
||||||
Message handling facility of libdax.
|
Message handling facility of libdax.
|
||||||
Copyright (C) 2006 - 2008 Thomas Schmitt <scdbackup@gmx.net>,
|
Copyright (C) 2006 - 2007 Thomas Schmitt <scdbackup@gmx.net>,
|
||||||
provided under GPL version 2
|
provided under GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -40,7 +40,7 @@ static int libdax_msgs_item_new(struct libdax_msgs_item **item,
|
|||||||
if(ret==0)
|
if(ret==0)
|
||||||
o->timestamp= tv.tv_sec+0.000001*tv.tv_usec;
|
o->timestamp= tv.tv_sec+0.000001*tv.tv_usec;
|
||||||
o->process_id= getpid();
|
o->process_id= getpid();
|
||||||
o->origin= -1;
|
o->driveno= -1;
|
||||||
o->severity= LIBDAX_MSGS_SEV_ALL;
|
o->severity= LIBDAX_MSGS_SEV_ALL;
|
||||||
o->priority= LIBDAX_MSGS_PRIO_ZERO;
|
o->priority= LIBDAX_MSGS_PRIO_ZERO;
|
||||||
o->error_code= 0;
|
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,
|
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)
|
int flag)
|
||||||
{
|
{
|
||||||
*timestamp= item->timestamp;
|
*timestamp= item->timestamp;
|
||||||
*process_id= item->process_id;
|
*process_id= item->process_id;
|
||||||
*origin= item->origin;
|
*driveno= item->driveno;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,8 +252,6 @@ int libdax_msgs__text_to_sev(char *severity_name, int *severity,
|
|||||||
*severity= LIBDAX_MSGS_SEV_ABORT;
|
*severity= LIBDAX_MSGS_SEV_ABORT;
|
||||||
else if(strncmp(severity_name,"FATAL",5)==0)
|
else if(strncmp(severity_name,"FATAL",5)==0)
|
||||||
*severity= LIBDAX_MSGS_SEV_FATAL;
|
*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)
|
else if(strncmp(severity_name,"SORRY",5)==0)
|
||||||
*severity= LIBDAX_MSGS_SEV_SORRY;
|
*severity= LIBDAX_MSGS_SEV_SORRY;
|
||||||
else if(strncmp(severity_name,"WARNING",7)==0)
|
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)
|
int flag)
|
||||||
{
|
{
|
||||||
if(flag&1) {
|
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);
|
return(1);
|
||||||
}
|
}
|
||||||
*severity_name= "";
|
*severity_name= "";
|
||||||
@ -290,8 +289,6 @@ int libdax_msgs__sev_to_text(int severity, char **severity_name,
|
|||||||
*severity_name= "ABORT";
|
*severity_name= "ABORT";
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_FATAL)
|
else if(severity>=LIBDAX_MSGS_SEV_FATAL)
|
||||||
*severity_name= "FATAL";
|
*severity_name= "FATAL";
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_FAILURE)
|
|
||||||
*severity_name= "FAILURE";
|
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_SORRY)
|
else if(severity>=LIBDAX_MSGS_SEV_SORRY)
|
||||||
*severity_name= "SORRY";
|
*severity_name= "SORRY";
|
||||||
else if(severity>=LIBDAX_MSGS_SEV_WARNING)
|
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 severity, int priority, char *msg_text,
|
||||||
int os_errno, int flag)
|
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);
|
ret= libdax_msgs_item_new(&item,m->youngest,0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto failed;
|
goto failed;
|
||||||
item->origin= origin;
|
item->driveno= driveno;
|
||||||
item->error_code= error_code;
|
item->error_code= error_code;
|
||||||
item->severity= severity;
|
item->severity= severity;
|
||||||
item->priority= priority;
|
item->priority= priority;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* libdax_msgs
|
/* libdax_msgs
|
||||||
Message handling facility of libdax.
|
Message handling facility of libdax.
|
||||||
Copyright (C) 2006-2008 Thomas Schmitt <scdbackup@gmx.net>,
|
Copyright (C) 2006-2007 Thomas Schmitt <scdbackup@gmx.net>,
|
||||||
provided under GPL version 2
|
provided under GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ struct libdax_msgs_item {
|
|||||||
|
|
||||||
double timestamp;
|
double timestamp;
|
||||||
pid_t process_id;
|
pid_t process_id;
|
||||||
int origin;
|
int driveno;
|
||||||
|
|
||||||
int severity;
|
int severity;
|
||||||
int priority;
|
int priority;
|
||||||
@ -140,47 +140,15 @@ struct libdax_msgs_item;
|
|||||||
*/
|
*/
|
||||||
#define LIBDAX_MSGS_SEV_WARNING 0x50000000
|
#define LIBDAX_MSGS_SEV_WARNING 0x50000000
|
||||||
|
|
||||||
|
/** Non-fatal error messages indicating that parts of the action failed
|
||||||
/** Non-fatal error messages indicating that important parts of an action
|
but processing will/should go on
|
||||||
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.
|
|
||||||
*/
|
*/
|
||||||
#define LIBDAX_MSGS_SEV_SORRY 0x60000000
|
#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
|
/** 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
|
#define LIBDAX_MSGS_SEV_FATAL 0x70000000
|
||||||
|
|
||||||
|
|
||||||
/** A message from an abort handler which will finally finish libburn
|
/** A message from an abort handler which will finally finish libburn
|
||||||
*/
|
*/
|
||||||
#define LIBDAX_MSGS_SEV_ABORT 0x71000000
|
#define LIBDAX_MSGS_SEV_ABORT 0x71000000
|
||||||
@ -205,16 +173,6 @@ struct libdax_msgs_item;
|
|||||||
#define LIBDAX_MSGS_PRIO_NEVER 0x7fffffff
|
#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 */
|
/* Public Functions */
|
||||||
|
|
||||||
/* Calls initiated from inside the direct owner (e.g. from libburn) */
|
/* 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.
|
/** Submit a message to a message handling facility.
|
||||||
@param origin program specific identification number of the originator of
|
@param driveno program specific drive number. Use -1 if no number is known.
|
||||||
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 error_code Unique error code. Use only registered codes. See below.
|
@param error_code Unique error code. Use only registered codes. See below.
|
||||||
The same unique error_code may be issued at different
|
The same unique error_code may be issued at different
|
||||||
occasions but those should be equivalent out of the view
|
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)
|
@param flag Bitfield for control purposes (unused yet, submit 0)
|
||||||
@return 1 on success, 0 on rejection, <0 for severe errors
|
@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 severity, int priority, char *msg_text,
|
||||||
int os_errno, int flag);
|
int os_errno, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Calls from applications (to be forwarded by direct owner) */
|
/* 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
|
@return 1 on success, 0 on invalid item, <0 for servere errors
|
||||||
*/
|
*/
|
||||||
int libdax_msgs_item_get_origin(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);
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
@ -487,7 +441,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
|||||||
0x00020156 (SORRY,HIGH) = Desired fifo buffer too small
|
0x00020156 (SORRY,HIGH) = Desired fifo buffer too small
|
||||||
0x00020157 (FATAL,HIGH) = burn_source is not a fifo object
|
0x00020157 (FATAL,HIGH) = burn_source is not a fifo object
|
||||||
0x00020158 (DEBUG,LOW) = Reporting thread disposal precautions
|
0x00020158 (DEBUG,LOW) = Reporting thread disposal precautions
|
||||||
0x00020159 (DEBUG,HIGH) = TOC Format 0 returns inconsistent data
|
|
||||||
|
|
||||||
libdax_audioxtr:
|
libdax_audioxtr:
|
||||||
0x00020200 (SORRY,HIGH) = Cannot open audio source file
|
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[] =
|
static unsigned char MMC_GET_MSINFO[] =
|
||||||
{ 0x43, 0, 1, 0, 0, 0, 0, 16, 0, 0 };
|
{ 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[] = { 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_ATIP[] = { 0x43, 2, 4, 0, 0, 0, 0, 16, 0, 0 };
|
||||||
static unsigned char MMC_GET_DISC_INFO[] =
|
static unsigned char MMC_GET_DISC_INFO[] =
|
||||||
{ 0x51, 0, 0, 0, 0, 0, 0, 16, 0, 0 };
|
{ 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
|
/* ts A70131 : compose a disc TOC structure from d->complete_sessions
|
||||||
and 52h READ TRACK INFORMATION */
|
and 52h READ TRACK INFORMATION */
|
||||||
int mmc_fake_toc(struct burn_drive *d)
|
int mmc_fake_toc(struct burn_drive *d)
|
||||||
@ -973,12 +825,6 @@ int mmc_fake_toc(struct burn_drive *d)
|
|||||||
msg, 0,0);
|
msg, 0,0);
|
||||||
return 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();
|
d->disc = burn_disc_create();
|
||||||
if (d->disc == NULL)
|
if (d->disc == NULL)
|
||||||
return -1;
|
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));
|
memset(d->toc_entry, 0,d->toc_entries * sizeof(struct burn_toc_entry));
|
||||||
for (i = 0; i < d->complete_sessions; i++) {
|
for (i = 0; i < d->complete_sessions; i++) {
|
||||||
session = burn_session_create();
|
session = burn_session_create();
|
||||||
if (session == NULL)
|
|
||||||
return -1;
|
|
||||||
burn_disc_add_session(d->disc, session, BURN_POS_END);
|
burn_disc_add_session(d->disc, session, BURN_POS_END);
|
||||||
burn_session_free(session);
|
burn_session_free(session);
|
||||||
}
|
}
|
||||||
memset(size_data, 0, 4);
|
memset(size_data, 0, 4);
|
||||||
memset(start_data, 0, 4);
|
memset(start_data, 0, 4);
|
||||||
|
|
||||||
|
|
||||||
/* Entry Layout :
|
/* Entry Layout :
|
||||||
session 1 track 1 entry 0
|
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)) {
|
if (!(d->current_profile == -1 || d->current_is_cd_profile)) {
|
||||||
/* ts A70131 : MMC_GET_TOC uses Response Format 2
|
/* ts A70131 : MMC_GET_TOC uses Response Format 2
|
||||||
For DVD this fails with 5,24,00 */
|
For DVD this fails with 5,24,00 */
|
||||||
/* mmc_read_toc_fmt0() uses
|
/* One could try Response Format 0: mmc5r03.pdf 6.26.3.2
|
||||||
Response Format 0: mmc5r03.pdf 6.26.3.2
|
which does not yield the same result wit the same disc
|
||||||
which does not yield the same result with the same disc
|
|
||||||
on different drives.
|
on different drives.
|
||||||
*/
|
*/
|
||||||
/* ts A70201 :
|
/* ts A70201 :
|
||||||
This uses the session count from 51h READ DISC INFORMATION
|
This uses the session count from 51h READ DISC INFORMATION
|
||||||
and the track records from 52h READ TRACK INFORMATION.
|
and the track records from 52h READ TRACK INFORMATION
|
||||||
mmc_read_toc_fmt0() is used as fallback for dull DVD-ROM.
|
|
||||||
*/
|
*/
|
||||||
mmc_fake_toc(d);
|
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;
|
*alloc_len = len + 2;
|
||||||
if (old_alloc_len < 34)
|
if (old_alloc_len < 34)
|
||||||
return 1;
|
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;
|
return 0;
|
||||||
if (len + 2 > old_alloc_len)
|
if (len + 2 > old_alloc_len)
|
||||||
len = old_alloc_len - 2;
|
len = old_alloc_len - 2;
|
||||||
|
@ -292,7 +292,7 @@ static void flipq(unsigned char *sub)
|
|||||||
|
|
||||||
|
|
||||||
/* ts A70904 */
|
/* 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 burn_stdio_read(int fd, char *buf, int bufsize, struct burn_drive *d,
|
||||||
int flag)
|
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);
|
fd = open(d->devname, O_RDONLY | O_LARGEFILE);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
if (errno != ENOENT || !(flag & 2))
|
if (!(flag & 1))
|
||||||
libdax_msgs_submit(libdax_messenger,
|
libdax_msgs_submit(libdax_messenger,
|
||||||
d->global_index,
|
d->global_index,
|
||||||
0x00020005,
|
0x00020005,
|
||||||
@ -387,9 +387,7 @@ int burn_read_data(struct burn_drive *d, off_t byte_address,
|
|||||||
ret = 0; goto ex;
|
ret = 0; goto ex;
|
||||||
}
|
}
|
||||||
if (lseek(fd, byte_address, SEEK_SET) == -1) {
|
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,
|
0x00020147,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
"Cannot address start byte", errno, 0);
|
"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);
|
err = d->read_10(d, start, chunksize, d->buffer);
|
||||||
} else {
|
} else {
|
||||||
ret = burn_stdio_read(fd, (char *) d->buffer->data,
|
ret = burn_stdio_read(fd, (char *) d->buffer->data,
|
||||||
cpy_size, d, !!(flag & 2));
|
cpy_size, d, 0);
|
||||||
err = 0;
|
err = 0;
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
err = BE_CANCELLED;
|
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 */
|
/* Next we use source data */
|
||||||
curr = valid;
|
curr = valid;
|
||||||
if (!track->eos) {
|
if (!track->eos) {
|
||||||
if (track->source->read != NULL)
|
valid = track->source->read(track->source, data + curr, count - curr);
|
||||||
valid = track->source->read(track->source,
|
|
||||||
data + curr, count - curr);
|
|
||||||
else
|
|
||||||
valid = track->source->read_xt(track->source,
|
|
||||||
data + curr, count - curr);
|
|
||||||
} else valid = 0;
|
} else valid = 0;
|
||||||
|
|
||||||
if (valid <= 0) { /* ts A61031 : extended from (valid == -1) */
|
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,
|
enum burn_source_status burn_track_set_source(struct burn_track *t,
|
||||||
struct burn_source *s)
|
struct burn_source *s)
|
||||||
{
|
{
|
||||||
|
if (!s->read)
|
||||||
|
return BURN_SOURCE_FAILED;
|
||||||
s->refcount++;
|
s->refcount++;
|
||||||
t->source = s;
|
t->source = s;
|
||||||
|
|
||||||
@ -41,15 +43,3 @@ struct burn_source *burn_source_new(void)
|
|||||||
out->refcount = 1;
|
out->refcount = 1;
|
||||||
return out;
|
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);
|
struct burn_source *burn_source_new(void);
|
||||||
|
|
||||||
int burn_source_cancel(struct burn_source *src);
|
|
||||||
|
|
||||||
#endif /*__SOURCE*/
|
#endif /*__SOURCE*/
|
||||||
|
@ -566,16 +566,12 @@ void spc_sense_write_params(struct burn_drive *d)
|
|||||||
c.dir = FROM_DRIVE;
|
c.dir = FROM_DRIVE;
|
||||||
d->issue_command(d, &c);
|
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];
|
size = c.page->data[0] * 256 + c.page->data[1];
|
||||||
|
m = d->mdata;
|
||||||
page = c.page->data + 8;
|
page = c.page->data + 8;
|
||||||
burn_print(1, "write page length 0x%x\n", page[1]);
|
burn_print(1, "write page length 0x%x\n", page[1]);
|
||||||
m->write_page_length = page[1];
|
m->write_page_length = page[1];
|
||||||
m->write_page_valid = 1;
|
m->write_page_valid = 1;
|
||||||
} else
|
|
||||||
m->write_page_valid = 0;
|
|
||||||
mmc_read_disc_info(d);
|
mmc_read_disc_info(d);
|
||||||
|
|
||||||
/* ts A70212 : try to setup d->media_capacity_remaining */
|
/* ts A70212 : try to setup d->media_capacity_remaining */
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
#include "write.h"
|
#include "write.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "structure.h"
|
#include "structure.h"
|
||||||
#include "source.h"
|
|
||||||
|
|
||||||
#include "libdax_msgs.h"
|
#include "libdax_msgs.h"
|
||||||
extern struct libdax_msgs *libdax_messenger;
|
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 */
|
/* ts A61103 */
|
||||||
ret = 1;
|
ret = 1;
|
||||||
ex:;
|
ex:;
|
||||||
if (d->cancel)
|
|
||||||
burn_source_cancel(t->source);
|
|
||||||
if (o->write_type == BURN_WRITE_TAO) {
|
if (o->write_type == BURN_WRITE_TAO) {
|
||||||
|
|
||||||
/* ts A71002 */
|
/* ts A71002 */
|
||||||
@ -1276,8 +1273,6 @@ int burn_dvd_write_track(struct burn_write_opts *o,
|
|||||||
}
|
}
|
||||||
ret = 1;
|
ret = 1;
|
||||||
ex:;
|
ex:;
|
||||||
if (d->cancel)
|
|
||||||
burn_source_cancel(t->source);
|
|
||||||
if (!is_flushed)
|
if (!is_flushed)
|
||||||
d->sync_cache(d); /* burn_write_flush() was not called */
|
d->sync_cache(d); /* burn_write_flush() was not called */
|
||||||
return ret;
|
return ret;
|
||||||
@ -1698,12 +1693,8 @@ int burn_stdio_read_source(struct burn_source *source, char *buf, int bufsize,
|
|||||||
int count= 0, todo;
|
int count= 0, todo;
|
||||||
|
|
||||||
for(todo = bufsize; todo > 0; todo -= count) {
|
for(todo = bufsize; todo > 0; todo -= count) {
|
||||||
if(source->read!=NULL)
|
|
||||||
count = source->read(source,
|
count = source->read(source,
|
||||||
(unsigned char *) (buf + (bufsize - todo)), todo);
|
(unsigned char *) (buf + (bufsize - todo)), todo);
|
||||||
else
|
|
||||||
count = source->read_xt(source,
|
|
||||||
(unsigned char *) (buf + (bufsize - todo)), todo);
|
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
break;
|
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() */
|
/* 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)
|
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 */
|
/* ts A70904 */
|
||||||
int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
||||||
int tnum, int flag)
|
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_track *t = s->track[tnum];
|
||||||
struct burn_drive *d = o->drive;
|
struct burn_drive *d = o->drive;
|
||||||
char buf[16*2048];
|
char buf[16*2048];
|
||||||
|
#ifdef Libburn_stdio_track_by_sector_datA
|
||||||
int i, prev_sync_sector = 0;
|
int i, prev_sync_sector = 0;
|
||||||
struct buffer *out = d->buffer;
|
struct buffer *out = d->buffer;
|
||||||
struct timeval prev_time;
|
struct timeval prev_time;
|
||||||
|
#else
|
||||||
|
int eof_seen = 0;
|
||||||
|
off_t t_size, w_count;
|
||||||
|
#endif
|
||||||
|
|
||||||
bufsize = sizeof(buf);
|
bufsize = sizeof(buf);
|
||||||
fd = d->stdio_fd;
|
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);
|
burn_disc_init_track_status(o, s, tnum, sectors);
|
||||||
open_ended = burn_track_is_open_ended(t);
|
open_ended = burn_track_is_open_ended(t);
|
||||||
|
|
||||||
|
#ifdef Libburn_stdio_track_by_sector_datA
|
||||||
|
|
||||||
/* attach stdio emulators for mmc_*() functions */
|
/* attach stdio emulators for mmc_*() functions */
|
||||||
if (o->simulate)
|
if (o->simulate)
|
||||||
d->write = burn_stdio_mmc_dummy_write;
|
d->write = burn_stdio_mmc_dummy_write;
|
||||||
@ -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++) {
|
for (i = 0; open_ended || i < sectors; i++) {
|
||||||
/* transact a (CD sized) sector */
|
/* transact a (CD sized) sector */
|
||||||
if (!sector_data(o, t, 0))
|
if (!sector_data(o, t, 0))
|
||||||
{ret= 0; goto ex;}
|
return 0;
|
||||||
if (open_ended) {
|
if (open_ended) {
|
||||||
d->progress.sectors = sectors = d->progress.sector;
|
d->progress.sectors = sectors = d->progress.sector;
|
||||||
if (burn_track_is_data_done(t))
|
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;
|
out->bytes = o->obs;
|
||||||
}
|
}
|
||||||
ret = burn_write_flush(o, t);
|
ret = burn_write_flush(o, t);
|
||||||
ret= 1;
|
|
||||||
ex:;
|
#else /* Libburn_stdio_track_by_sector_datA */
|
||||||
if (d->cancel)
|
|
||||||
burn_source_cancel(t->source);
|
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;
|
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)
|
if (start_sector == -1)
|
||||||
start_sector = last_track_start;
|
start_sector = last_track_start;
|
||||||
if (sector_count == -1) {
|
if (sector_count == -1) {
|
||||||
sector_count = last_track_start + last_track_size
|
sector_count = last_track_size;
|
||||||
- start_sector;
|
|
||||||
if (media_is_cd_profile) /* In case it is a TAO track */
|
if (media_is_cd_profile) /* In case it is a TAO track */
|
||||||
final_cd_try = 0; /* allow it (-1 is denial) */
|
final_cd_try = 0; /* allow it (-1 is denial) */
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user