Compare commits

..

5 Commits

19 changed files with 107 additions and 378 deletions

View File

@ -110,9 +110,9 @@ test_structest_CPPFLAGS = -Ilibburn
test_structest_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
test_structest_SOURCES = test/structest.c
## cdrskin construction site - ts A60816 - B00409
## cdrskin construction site - ts A60816 - B00122
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_8_0
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_7_8
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking

18
README
View File

@ -11,7 +11,7 @@ Still containing parts of Libburn. By Derek Foreman <derek@signalmarketing.com>
and Ben Jansens <xor@orodu.net>
Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
http://files.libburnia-project.org/releases/libburn-0.8.0.pl00.tar.gz
http://files.libburnia-project.org/releases/libburn-0.7.8.pl00.tar.gz
------------------------------------------------------------------------------
@ -19,10 +19,10 @@ Copyright (C) 2002-2006 Derek Foreman and Ben Jansens
From tarball
Obtain libburn-0.8.0.pl00.tar.gz, take it to a directory of your choice and do:
Obtain libburn-0.7.8.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf libburn-0.8.0.pl00.tar.gz
cd libburn-0.8.0
tar xzf libburn-0.7.8.pl00.tar.gz
cd libburn-0.7.8
./configure --prefix=/usr
make
@ -505,14 +505,8 @@ Project history as far as known to me:
The licenses of libburnia libraries and applications are not affected by
this change.
- 10 Mar 2010 libburn-0.7.8 fixes bugs and improves the built-in abort handler
on FreeBSD.
- 30 Mar 2010 Release 0.5.2 of libisoburn provides xorriso documentation in
GNU Texinfo format with embedded extra data to derive a full man page.
- 09 Apr 2010 libburn-0.8.0 now works with ahci driver on FreeBSD 8-STABLE.
- 10 Mar 2010 libburn-0.7.8.pl00 fixes bugs and improves the built-in abort
handler on FreeBSD.
------------------------------------------------------------------------------

View File

@ -4,7 +4,7 @@
cdrskin. By Thomas Schmitt <scdbackup@gmx.net>
Integrated sub project of libburnia-project.org but also published via:
http://scdbackup.sourceforge.net/cdrskin_eng.html
http://scdbackup.sourceforge.net/cdrskin-0.8.0.pl00.tar.gz
http://scdbackup.sourceforge.net/cdrskin-0.7.8.pl00.tar.gz
Copyright (C) 2006-2010 Thomas Schmitt, provided under GPL version 2 or later.
------------------------------------------------------------------------------
@ -25,10 +25,10 @@ By using this software you agree to the disclaimer at the end of this text
Compilation, First Glimpse, Installation
Obtain cdrskin-0.8.0.pl00.tar.gz, take it to a directory of your choice and do:
Obtain cdrskin-0.7.8.pl00.tar.gz, take it to a directory of your choice and do:
tar xzf cdrskin-0.8.0.pl00.tar.gz
cd cdrskin-0.8.0
tar xzf cdrskin-0.7.8.pl00.tar.gz
cd cdrskin-0.7.8
Within that directory execute:

View File

@ -38,7 +38,7 @@ original="./libburn_svn_release.tgz"
# My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-release"
skin_release="0.8.0"
skin_release="0.7.8"
patch_level=".pl00"
skin_rev="$skin_release""$patch_level"

View File

@ -38,7 +38,7 @@ original="./libburn_svn.tgz"
# My changes are in $changes , mainly in $changes/cdrskin
changes="./libburn-develop"
skin_release="0.8.1"
skin_release="0.7.9"
patch_level=""
skin_rev="$skin_release""$patch_level"

View File

@ -88,7 +88,7 @@ or
/** The official program version */
#ifndef Cdrskin_prog_versioN
#define Cdrskin_prog_versioN "0.8.0"
#define Cdrskin_prog_versioN "0.7.8"
#endif
/** The official libburn interface revision to use.
@ -98,10 +98,10 @@ or
#define Cdrskin_libburn_majoR 0
#endif
#ifndef Cdrskin_libburn_minoR
#define Cdrskin_libburn_minoR 8
#define Cdrskin_libburn_minoR 7
#endif
#ifndef Cdrskin_libburn_micrO
#define Cdrskin_libburn_micrO 0
#define Cdrskin_libburn_micrO 8
#endif
@ -135,13 +135,13 @@ or
#endif /* Cdrskin_libburn_cvs_A60220_tS */
#ifdef Cdrskin_libburn_0_8_0
#define Cdrskin_libburn_versioN "0.8.0"
#ifdef Cdrskin_libburn_0_7_8
#define Cdrskin_libburn_versioN "0.7.8"
#define Cdrskin_libburn_from_pykix_svN 1
#endif /* Cdrskin_libburn_0_8_0 */
#endif /* Cdrskin_libburn_0_7_8 */
#ifdef Cdrskin_libburn_0_8_1
#define Cdrskin_libburn_versioN "0.8.1"
#ifdef Cdrskin_libburn_0_7_9
#define Cdrskin_libburn_versioN "0.7.9"
#define Cdrskin_libburn_from_pykix_svN 1
/* Place novelty switch macros here.
@ -153,29 +153,29 @@ or
*/
#endif /* Cdrskin_libburn_0_8_1 */
#endif /* Cdrskin_libburn_0_7_9 */
#ifndef Cdrskin_libburn_versioN
#define Cdrskin_libburn_0_8_0
#define Cdrskin_libburn_versioN "0.8.0"
#define Cdrskin_libburn_0_7_8
#define Cdrskin_libburn_versioN "0.7.8"
#define Cdrskin_libburn_from_pykix_svN 1
#endif
#ifdef Cdrskin_libburn_0_8_0
#ifdef Cdrskin_libburn_0_7_8
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 8
#define Cdrskin_libburn_micrO 0
#define Cdrskin_libburn_minoR 7
#define Cdrskin_libburn_micrO 8
#endif
#ifdef Cdrskin_libburn_0_8_1
#ifdef Cdrskin_libburn_0_7_9
#undef Cdrskin_libburn_majoR
#undef Cdrskin_libburn_minoR
#undef Cdrskin_libburn_micrO
#define Cdrskin_libburn_majoR 0
#define Cdrskin_libburn_minoR 8
#define Cdrskin_libburn_micrO 1
#define Cdrskin_libburn_minoR 7
#define Cdrskin_libburn_micrO 9
#endif
@ -5276,8 +5276,8 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag)
/* If last two blocks not readable then assume TAO and subtract 2
from lra and size.
*/;
ret= burn_read_data(drive, (off_t) (lra - 1) * (off_t) 2048, buf,
2 * 2048, &buf_count, 2 | 4);
ret= burn_read_data(drive, (off_t) lra * (off_t) 2048, buf, 2 * 2048,
&buf_count, 2 | 4);
if(ret <= 0) {
lra-= 2;
size-= 2;

View File

@ -62,7 +62,7 @@ via SCSI, PATA (aka IDE, ATA), USB, or SATA.
GPL software included:<BR>
</H2>
<DL>
<DT>libburn-0.8.0</DT>
<DT>libburn-0.7.8</DT>
<DD>(founded by Derek Foreman and Ben Jansens,
developed and maintained since August 2006 by
Thomas Schmitt from team of libburnia-project.org)
@ -194,8 +194,8 @@ Standalone ISO 9660 multi-session CD/DVD/BD tool
<P>
<DL>
<DT>Download as source code (see README):</DT>
<DD><A HREF="cdrskin-0.8.0.pl00.tar.gz">cdrskin-0.8.0.pl00.tar.gz</A>
(835 KB).
<DD><A HREF="cdrskin-0.7.8.pl00.tar.gz">cdrskin-0.7.8.pl00.tar.gz</A>
(840 KB).
</DD>
<DD>
The cdrskin tarballs are source code identical with libburn releases
@ -244,19 +244,24 @@ cdrskin_0.4.2.pl00-x86-suse9_0-static.tar.gz</A>, (310 KB), -static compiled,
<HR>
<P>
Enhancements towards previous stable version cdrskin-0.7.8.pl00:
Enhancements towards previous stable version cdrskin-0.7.6.pl00:
<UL>
<LI>
Now able to work with ahci driver of FreeBSD 8-STABLE
Abort handling is more suitable for FreeBSD now.
</LI>
<!--
<LI>none</LI>
-->
</UL>
Bug fixes towards cdrskin-0.7.8.pl00:
Bug fixes towards cdrskin-0.7.6.pl00:
<UL>
<LI>none</LI>
<LI>
On FreeBSD: Piped input was falsely attributed a small fixed size
</LI>
<LI>
cdrskin fs=0 led to SIGSEGV. Regression introduced by version 0.7.4.
</LI>
<!--
<LI>none</LI>
-->
@ -266,8 +271,8 @@ Bug fixes towards cdrskin-0.7.8.pl00:
<P>
<DL>
<DT><H3>Development snapshot, version 0.8.1 :</H3></DT>
<DD>Enhancements towards current stable version 0.8.0.pl00:
<DT><H3>Development snapshot, version 0.7.9 :</H3></DT>
<DD>Enhancements towards current stable version 0.7.8.pl00:
<UL>
<LI>none yet</LI>
<!--
@ -276,7 +281,7 @@ Bug fixes towards cdrskin-0.7.8.pl00:
</UL>
</DD>
<DD>Bug fixes towards cdrskin-0.8.0.pl00:
<DD>Bug fixes towards cdrskin-0.7.6.pl00:
<UL>
<LI>none yet</LI>
<!--
@ -285,10 +290,10 @@ Bug fixes towards cdrskin-0.7.8.pl00:
</DD>
<DD>&nbsp;</DD>
<DD><A HREF="README_cdrskin_devel">README 0.8.1</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.8.1 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.8.1 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.8.1)</A></DD>
<DD><A HREF="README_cdrskin_devel">README 0.7.9</A>
<DD><A HREF="cdrskin__help_devel">cdrskin_0.7.9 --help</A></DD>
<DD><A HREF="cdrskin_help_devel">cdrskin_0.7.9 -help</A></DD>
<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 0.7.9)</A></DD>
<DD>&nbsp;</DD>
<DT>Maintainers of cdrskin unstable packages please use SVN of
<A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT>
@ -308,7 +313,7 @@ admins with full system souvereignty.</DT>
<A HREF="README_cdrskin_devel">upcoming README</A> ):
</DD>
<DD>
<A HREF="cdrskin-0.8.1.tar.gz">cdrskin-0.8.1.tar.gz</A>
<A HREF="cdrskin-0.7.9.tar.gz">cdrskin-0.7.9.tar.gz</A>
(840 KB).
</DD>

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2010.04.09.100001"
#define Cdrskin_timestamP "2010.03.10.120001"

View File

@ -8199,7 +8199,7 @@ Updated cdrskin tarball generator
cdrskin/cdrskin.c
Removed unused variable
10 Mar 2010 [3116]
[]
cdrskin/changelog.txt
Documented changes and release timestamp
@ -8207,117 +8207,15 @@ Documented changes and release timestamp
Bug fix on FreeBSD: Piped input was falsely attributed a small fixed size
Bug fix: cdrskin fs=0 led to SIGSEGV. Regression introduced by version 0.7.4.
2010.03.10.134802 [3117]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.7.9
10 Mar 2010 [3118]
- cdrskin/add_ts_changes_to_libburn_0_7_6
- cdrskin/add_ts_changes_to_libburn_0_7_7
+ cdrskin/add_ts_changes_to_libburn_0_7_8
+ cdrskin/add_ts_changes_to_libburn_0_7_9
Updated cdrskin tarball generator
10 Mar 2010 [3119]
cdrskin/changelog.txt
Documented changes and release timestamp
10 Mar 2010 [3120]
svn move -m 'libburn release 0.7.8 is ready'
http://svn.libburnia-project.org/libburn/branches/ZeroSevenEight
http://svn.libburnia-project.org/libburn/tags/ZeroSevenEight
------------------------------------ cycle - cdrskin-0.7.9 - 2010.03.10.143607
2010.03.17.185222 [3123]
cdrskin/cdrskin.c
Small bug fix about track size with cdrskin -minfo
17 Mar 2010 [3124]
configure.ac
Corrected initialization of configure option --enable-dvd-obs-64k
2010.03.25.113536 [3131]
libburn/spc.c
libburn/sg-freebsd.c
Changed sg-freebsd.c to work with ahci, advise by Alexander Motin
2010.03.26.083158 [3132]
libburn/sg-freebsd.c
Had to make ahci change conditional for now: -DLibburn_for_freebsd_ahcI
2010.03.27.155659 [3133]
libburn/mmc.c
Avoiding to inquire NWA of unwritable media or states
2010.03.27.172644 [3134]
libburn/os-freebsd.h
libburn/sg-freebsd.c
Trying to detect FreeBSD ahci devices and to handle others the old way
------------------------------------ cycle - cdrskin-0.7.9 - 2010.03.27.184614
* Now able to work with ahci driver of FreeBSD 8-STABLE
2010.03.29.103141 [3135]
libburn/spc.c
libburn/sg-linux.c
libburn/sg-freebsd.c
libburn/sg-libcdio.c
Adjusted libcdio system adapter to FreeBSD peculiarities
2010.04.04.181237 [3146]
test/libburner.c
Let libburner warn programmers if they forget to set 64 bit off_t
2010.04.09.090645 [3155]
libburn/sg-linux.c
Reporting eventual SCSI sense in sg-linux repeat loop
9 Apr 2010 [3156]
svn copy -m "Branching for libburn release 0.8.0" \
http://svn.libburnia-project.org/libburn/trunk \
http://svn.libburnia-project.org/libburn/branches/ZeroEightZero
2010.04.09.100001 [3157]
Makefile.am
configure.ac
README
libburn/libburn.h
cdrskin/cdrskin.c
cdrskin/README
cdrskin/compile_cdrskin.sh
cdrskin/cdrskin_timestamp.h
cdrskin/cdrskin_eng.html
Made number transition to 0.8.0
09 Apr 2010 [3158]
- cdrskin/add_ts_changes_to_libburn_0_7_8
- cdrskin/add_ts_changes_to_libburn_0_7_9
+ cdrskin/add_ts_changes_to_libburn_0_8_0
+ cdrskin/add_ts_changes_to_libburn_0_8_1
Updated cdrskin tarball generator
------------------------------ release - cdrskin-0.8.0.pl00 - 2010.04.09.100001
* Now able to work with ahci driver of FreeBSD 8-STABLE
------------------------------------ cycle - cdrskin-0.8.1 -
------------------------------------ cycle - cdrskin-0.8.1 -
------------------------------------ cycle - cdrskin-0.7.9 -
------------------------------------ cycle - cdrskin-0.7.9 -
===============================================================================
TODO
===============================================================================
- change all malloc() to calloc()
- find out from where libburn/crc.c stems. What algorithm is crc_32() ?
@ -8348,8 +8246,13 @@ READ TRACK INFORMATION[#5]:
------------------------------ end of bugs ---------------------------------
- xorriso -as tar (Rocky wants me to begin with -x)
Support for BD-R SRM+POW
? Provide an option to open track source file O_DIRECT ?
(needs read chunks much larger than 2 kB)
? Enable profile 0x42 BD-R random recording
Provide DVD+R DL layer break setter

View File

@ -8,7 +8,7 @@ debug_opts="-O2"
def_opts=
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
fifo_opts=""
libvers="-DCdrskin_libburn_0_8_0"
libvers="-DCdrskin_libburn_0_7_8"
# To be used if Makefile.am uses libburn_libburn_la_CFLAGS
# burn="libburn/libburn_libburn_la-"
@ -47,15 +47,15 @@ do
libdax_audioxtr_o=
libdax_msgs_o="$burn"message.o
cleanup_src_or_obj="-DCleanup_has_no_libburn_os_H cdrskin/cleanup.c"
elif test "$i" = "-libburn_0_8_0"
elif test "$i" = "-libburn_0_7_8"
then
libvers="-DCdrskin_libburn_0_8_0"
libvers="-DCdrskin_libburn_0_7_8"
libdax_audioxtr_o="$burn"libdax_audioxtr.o
libdax_msgs_o="$burn"libdax_msgs.o
cleanup_src_or_obj="$burn"cleanup.o
elif test "$i" = "-libburn_svn"
then
libvers="-DCdrskin_libburn_0_8_1"
libvers="-DCdrskin_libburn_0_7_9"
libdax_audioxtr_o="$burn"libdax_audioxtr.o
libdax_msgs_o="$burn"libdax_msgs.o
cleanup_src_or_obj="$burn"cleanup.o
@ -109,7 +109,7 @@ do
echo "Options:"
echo " -compile_cdrfifo compile program cdrskin/cdrfifo."
echo " -compile_dewav compile program test/dewav without libburn."
echo " -libburn_0_8_0 set macro to match libburn-0.8.0"
echo " -libburn_0_7_8 set macro to match libburn-0.7.8"
echo " -libburn_svn set macro to match current libburn-SVN."
echo " -dvd_obs_64k 64 KB default size for DVD/BD writing."
echo " -use_libcdio link with -lcdio because libburn uses it."

View File

@ -1,4 +1,4 @@
AC_INIT([libburn], [0.8.0], [http://libburnia-project.org])
AC_INIT([libburn], [0.7.8], [http://libburnia-project.org])
AC_PREREQ([2.50])
dnl AC_CONFIG_HEADER([config.h])
@ -80,7 +80,6 @@ dnl 0.7.2 = libburn.so.4.37.0
dnl 0.7.4 = libburn.so.4.39.0
dnl 0.7.6 = libburn.so.4.41.0
dnl 0.7.8 = libburn.so.4.43.0
dnl 0.8.0 = libburn.so.4.45.0
dnl
dnl So LT_CURRENT, LT_REVISION and LT_AGE get set directly here.
dnl SONAME of the emerging library is LT_CURRENT - LT_AGE.
@ -105,8 +104,8 @@ dnl If BURN_*_VERSION changes, be sure to change AC_INIT above to match.
dnl
dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_*
BURN_MAJOR_VERSION=0
BURN_MINOR_VERSION=8
BURN_MICRO_VERSION=0
BURN_MINOR_VERSION=7
BURN_MICRO_VERSION=8
BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
AC_SUBST(BURN_MAJOR_VERSION)
@ -117,15 +116,15 @@ AC_SUBST(BURN_VERSION)
dnl Libtool versioning
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
dnl
dnl ts B00409
dnl This is the release version libburn-0.8.0
dnl ts B00310
dnl This is the release version libburn-0.7.8 = libburn.so.4.43.0
dnl ### This is the development version after above release version
dnl LT_CURRENT++, LT_AGE++ has not yet happened.
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
dnl
dnl SONAME = 49 - 45 = 4 . Linux library name = libburn.so.4.45.0
LT_CURRENT=49
LT_AGE=45
dnl SONAME = 47 - 43 = 4 . Linux library name = libburn.so.4.43.0
LT_CURRENT=47
LT_AGE=43
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -203,7 +202,7 @@ CFLAGS="$CFLAGS $LIBBURN_O_DIRECT_DEF"
dnl ts A91116
AC_ARG_ENABLE(dvd-obs-64k,
[ --enable-dvd-obs-64k 64 KB default size for DVD/BD writing, default=no],
, enable_dvd_obs_64k=no)
, enable_fifo_odirect=no)
if test x$enable_dvd_obs_64k = xyes; then
LIBBURN_DVD_OBS_64K="-DLibburn_dvd_obs_default_64K"
echo "enabled write size default 64 KB on DVD and BD"

View File

@ -2627,8 +2627,8 @@ void burn_version(int *major, int *minor, int *micro);
*/
#define burn_header_version_major 0
#define burn_header_version_minor 8
#define burn_header_version_micro 0
#define burn_header_version_minor 7
#define burn_header_version_micro 8
/** Note:
Above version numbers are also recorded in configure.ac because libtool
wants them as parameters at build time.

View File

@ -425,10 +425,6 @@ int mmc_get_nwa(struct burn_drive *d, int trackno, int *lba, int *nwa)
if (mmc_function_spy(d, "mmc_get_nwa") <= 0)
return -1;
/* ts B00327 : Avoid to inquire unsuitable media states */
if (d->status != BURN_DISC_BLANK && d->status != BURN_DISC_APPENDABLE)
return 0;
ret = mmc_read_track_info(d, trackno, &buf, alloc_len);
if (ret <= 0)
return ret;

View File

@ -59,6 +59,5 @@ typedef struct burn_drive_enumeration_state *burn_drive_enumerator_t;
#define BURN_OS_TRANSPORT_DRIVE_ELEMENTS \
struct cam_device* cam; \
int lock_fd; \
int is_ahci; \

View File

@ -5,6 +5,7 @@
Provided under GPL version 2 or later.
*/
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
@ -29,18 +30,6 @@
#include <sys/disk.h> /* DIOCGMEDIASIZE */
/* ts B00326 : For use of CAM_PASS_ERR_RECOVER with ahci */
#define Libburn_for_freebsd_ahcI yes
/* ts B00327 : for debugging of cam_send_cdb() failures
# define Libburn_ahci_verbouS yes
*/
/* ts B00327 : Apply CAM_PASS_ERR_RECOVER to drives even if not ahci
# define libburn_ahci_style_for_alL yes
*/
#include "transport.h"
#include "drive.h"
#include "sg.h"
@ -446,7 +435,6 @@ static void enumerate_common(char *fname, int bus_no, int host_no,
out.cam = NULL;
out.lock_fd = -1;
out.is_ahci = 0;
out.start_lba= -2000000000;
out.end_lba= -2000000000;
@ -539,7 +527,6 @@ static void enumerate_common(char *fname, int bus_no, int host_no,
/* Adapter specific handles and data */
out.cam = NULL;
out.lock_fd = -1;
out.is_ahci = 0;
/* Adapter specific functions */
out.grab = sg_grab;
@ -691,7 +678,6 @@ static int sg_lock(struct burn_drive *d, int flag)
int sg_grab(struct burn_drive *d)
{
struct cam_device *cam;
char path_string[80];
if (mmc_function_spy(d, "sg_grab") <= 0)
return 0;
@ -714,18 +700,6 @@ int sg_grab(struct burn_drive *d)
if (sg_lock(d, 0) <= 0)
return 0;
fcntl(cam->fd, F_SETOWN, getpid());
cam_path_string(d->cam, path_string, sizeof(path_string));
#ifdef Libburn_ahci_verbouS
fprintf(stderr, "libburn_EXPERIMENTAL: CAM path = %s\n", path_string);
#endif
if (strstr(path_string, ":ahcich") != NULL)
d->is_ahci = 1;
else
d->is_ahci = -1;
d->released = 0;
return 1;
}
@ -755,8 +729,7 @@ int sg_release(struct burn_drive *d)
int sg_issue_command(struct burn_drive *d, struct command *c)
{
int done = 0, err, sense_len = 0, ret, ignore_error, no_retry = 0;
int cam_pass_err_recover = 0;
int done = 0, err, sense_len, ret;
union ccb *ccb;
char buf[161];
static FILE *fp = NULL;
@ -804,23 +777,6 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
break;
}
#ifdef Libburn_for_freebsd_ahcI
/* ts B00325 : Advise by Alexander Motin */
/* Runs well on 8-STABLE (23 Mar 2003)
But on 8-RELEASE cam_send_ccb() returns non-zero with errno 6
on eject. Long lasting TEST UNIT READY cycles break with
errno 16.
*/
#ifdef Libburn_ahci_style_for_alL
{
#else
if (d->is_ahci > 0) {
#endif
ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER;
cam_pass_err_recover = 1;
}
#endif /* Libburn_for_freebsd_ahcI */
ccb->csio.cdb_len = c->oplen;
memcpy(&ccb->csio.cdb_io.cdb_bytes, &c->opcode, c->oplen);
@ -851,74 +807,8 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
}
do {
memset(c->sense, 0, sizeof(c->sense));
err = cam_send_ccb(d->cam, ccb);
ignore_error = sense_len = 0;
/* ts B00325 : CAM_AUTOSNS_VALID advised by Alexander Motin */
if (ccb->ccb_h.status & CAM_AUTOSNS_VALID) {
/* ts B00110 */
/* Better curb sense_len */
sense_len = ccb->csio.sense_len;
if (sense_len > sizeof(c->sense))
sense_len = sizeof(c->sense);
memcpy(c->sense, &ccb->csio.sense_data, sense_len);
if (sense_len >= 14 && cam_pass_err_recover &&
(c->sense[2] & 0x0f))
ignore_error = 1;
}
if (err == -1 && cam_pass_err_recover && ! ignore_error) {
#ifdef Libburn_ahci_verbouS
fprintf(stderr, "libburn_EXPERIMENTAL: errno = %d . cam_errbuf = '%s'\n", errno, cam_errbuf);
#endif
if (errno == ENXIO && c->opcode[0] != 0) {
/* Operations on empty or ejected tray */
/* MEDIUM NOT PRESENT */
#ifdef Libburn_ahci_verbouS
fprintf(stderr, "libburn_EXPERIMENTAL: Emulating [2,3A,00] MEDIUM NOT PRESENT\n");
#endif
c->sense[2] = 0x02;
c->sense[12] = 0x3A;
c->sense[13] = 0x00;
sense_len = 14;
ignore_error = 1;
} else if (c->opcode[0] == 0 &&
(errno == EBUSY || errno == ENXIO)) {
/* Timeout of TEST UNIT READY loop */
/* Inquiries while tray is being loaded */
/*LOGICAL UNIT NOT READY,CAUSE NOT REPORTABLE*/
#ifdef Libburn_ahci_verbouS
fprintf(stderr, "libburn_EXPERIMENTAL: Emulating [2,04,00] LOGICAL UNIT NOT READY,CAUSE NOT REPORTABLE\n");
#endif
c->sense[2] = 0x02;
c->sense[12] = 0x04;
c->sense[13] = 0x00;
sense_len = 14;
ignore_error = 1;
} else if (errno == EINVAL) {
/* Inappropriate MODE SENSE */
/* INVALID FIELD IN CDB */
#ifdef Libburn_ahci_verbouS
fprintf(stderr, "libburn_EXPERIMENTAL: Emulating [5,24,00] INVALID FIELD IN CDB\n");
#endif
c->sense[2] = 0x05;
c->sense[12] = 0x24;
c->sense[13] = 0x00;
sense_len = 14;
ignore_error = 1;
}
}
if (err == -1 && !ignore_error) {
if (err == -1) {
libdax_msgs_submit(libdax_messenger,
d->global_index, 0x0002010c,
LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH,
@ -932,33 +822,20 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
}
/* XXX */
/* ts B00110 */
/* Better curb sense_len */
sense_len = ccb->csio.sense_len;
if (sense_len > sizeof(c->sense))
sense_len = sizeof(c->sense);
memcpy(c->sense, &ccb->csio.sense_data, ccb->csio.sense_len);
if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
if (sense_len < 14) {
/*LOGICAL UNIT NOT READY,CAUSE NOT REPORTABLE*/
#ifdef Libburn_ahci_verbouS
fprintf(stderr, "libburn_EXPERIMENTAL: CAM_STATUS= %d .Emulating [2,04,00] LOGICAL UNIT NOT READY,CAUSE NOT REPORTABLE\n", (ccb->ccb_h.status & CAM_STATUS_MASK));
#endif
c->sense[2] = 0x02;
c->sense[12] = 0x04;
c->sense[13] = 0x00;
no_retry = 1;
}
if (no_retry || ignore_error || !c->retry) {
if (!c->retry) {
c->error = 1;
{ret = 1; goto ex;}
}
switch (scsi_error(d, c->sense, 0)) {
case RETRY:
done = 0;
if (burn_sg_log_scsi & 3) {
/* >>> Need own duration time
measurement. Then remove bit1 */
scsi_log_err(c, fp, c->sense, 0,
(c->error != 0) | 2);
scsi_log_cmd(c,fp,0);
}
break;
case FAIL:
done = 1;

View File

@ -553,7 +553,7 @@ int sg_release(struct burn_drive *d)
*/
int sg_issue_command(struct burn_drive *d, struct command *c)
{
int sense_valid = 0, i, usleep_time, timeout_ms, no_retry = 0;
int sense_valid = 0, i, usleep_time, timeout_ms;
time_t start_time;
driver_return_code_t i_status;
unsigned int dxfer_len;
@ -568,15 +568,15 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
return 0;
}
p_cdio = (CdIo_t *) d->p_cdio;
if (burn_sg_log_scsi & 1) {
if (fp == NULL) {
fp= fopen("/tmp/libburn_sg_command_log", "a");
fprintf(fp,
"\n-----------------------------------------\n");
}
}
if (burn_sg_log_scsi & 3)
scsi_log_cmd(c,fp,0);
if (burn_sg_log_scsi & 1) {
if (fp == NULL) {
fp= fopen("/tmp/libburn_sg_command_log", "a");
fprintf(fp,
"\n-----------------------------------------\n");
}
}
if (burn_sg_log_scsi & 3)
scsi_log_cmd(c,fp,0);
memcpy(cdb.field, c->opcode, c->oplen);
if (c->dir == TO_DRIVE) {
@ -628,35 +628,24 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
}
*/
if ((!sense_valid) ||
((c->sense[2] & 0x0f) == 0 && c->sense[12] == 0 &&
c->sense[13] == 0)) {
if (!sense_valid) {
memset(c->sense, 0, sizeof(c->sense));
if (i_status != 0) { /* set dummy sense */
/*LOGICAL UNIT NOT READY,
CAUSE NOT REPORTABLE*/
/*LOGICAL UNIT NOT READY,CAUSE NOT REPORTABLE*/
c->sense[2] = 0x02;
c->sense[12] = 0x04;
no_retry = 1;
}
} else
c->sense[2] &= 15;
if (i_status != 0 ||
(c->sense[2] || c->sense[12] || c->sense[13])) {
if (no_retry || !c->retry) {
if (!c->retry) {
c->error = 1;
goto ex;
}
switch (scsi_error(d, c->sense, 18)) {
case RETRY:
if (burn_sg_log_scsi & 3) {
/* >>> Need own duration time
measurement. Then remove bit1 */
scsi_log_err(c, fp, c->sense, 0,
(c->error != 0) | 2);
scsi_log_cmd(c,fp,0);
}
break;
case FAIL:
c->error = 1;

View File

@ -1928,11 +1928,6 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
switch (scsi_error(d, s.sbp, s.sb_len_wr)) {
case RETRY:
done = 0;
if (burn_sg_log_scsi & 3) {
scsi_log_err(c, fp, s.sbp, s.duration,
c->error != 0);
scsi_log_cmd(c,fp,0);
}
break;
case FAIL:
done = 1;

View File

@ -113,8 +113,7 @@ int spc_test_unit_ready(struct burn_drive *d)
int spc_wait_unit_attention(struct burn_drive *d, int max_sec, char *cmd_text,
int flag)
{
int i, ret = 1, key = 0, asc = 0, ascq = 0, clueless_start = 0;
static int clueless_timeout = 5 * 10;
int i, ret = 1, key = 0, asc = 0, ascq = 0;
char msg[320];
unsigned char sense[14];
enum response resp;
@ -144,7 +143,6 @@ int spc_wait_unit_attention(struct burn_drive *d, int max_sec, char *cmd_text,
/* media change notice = try again */
goto slumber;
handle_error:;
/* ts A90213 */
sprintf(msg,
"Asynchronous SCSI error on %s: ", cmd_text);
@ -159,23 +157,7 @@ handle_error:;
msg, 0, 0);
d->cancel = 1;
break;
} else if (ascq == 0x00) { /* CAUSE NOT REPORTABLE */
/* Might be a clueless system adapter */
if (clueless_start == 0)
clueless_start = i;
if (i - clueless_start > clueless_timeout) {
libdax_msgs_submit(libdax_messenger,
d->global_index,
0x00000002,
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
"Ended clueless NOT READY cycle",
0, 0);
ret = 1; /* medium not present = ok */
break;
}
} else if (ascq == 0x02 || ascq == 0x03)
goto handle_error;
}
slumber:;
usleep(100000);
}
@ -979,13 +961,13 @@ enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
*key= *asc= *ascq= -1;
if (senselen<=0 || senselen>2)
*key = sense[2] & 0x0f;
*key = sense[2];
if (senselen<=0 || senselen>12)
*asc = sense[12];
if (senselen<=0 || senselen>13)
*ascq = sense[13];
sprintf(msg, "[%X %2.2X %2.2X] ", *key, *asc, *ascq);
sprintf(msg, "[%X %2.2X %2.2X] ", (*key) & 0xf, *asc, *ascq);
msg= msg + strlen(msg);
burn_print(12, "CONDITION: 0x%x 0x%x 0x%x on %s %s\n",
@ -1000,11 +982,8 @@ enum response scsi_error_msg(struct burn_drive *d, unsigned char *sense,
sprintf(msg, "Not ready");
return RETRY;
case 0x04:
if (*ascq == 1)
sprintf(msg,
sprintf(msg,
"Logical unit is in the process of becoming ready");
else
sprintf(msg, "Logical unit is not ready");
return RETRY;
case 0x08:
if (*key != 4)

View File

@ -732,13 +732,6 @@ int main(int argc, char **argv)
{
int ret;
/* A warning to programmers who start their own projekt from here. */
if (sizeof(off_t) != 8) {
fprintf(stderr,
"\nFATAL: Compile time misconfiguration. off_t is not 64 bit.\n\n");
exit(39);
}
ret = libburner_setup(argc, argv);
if (ret)
exit(ret);