Hello community, here is the log from the commit of package libburn for openSUSE:Factory checked in at 2018-02-09 15:42:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libburn (Old) and /work/SRC/openSUSE:Factory/.libburn.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libburn" Fri Feb 9 15:42:08 2018 rev:4 rq:574400 version:1.4.8 Changes: -------- --- /work/SRC/openSUSE:Factory/libburn/libburn.changes 2017-02-03 17:47:09.384402294 +0100 +++ /work/SRC/openSUSE:Factory/.libburn.new/libburn.changes 2018-02-09 15:42:09.423000934 +0100 @@ -1,0 +2,10 @@ +Thu Feb 8 20:25:18 UTC 2018 - asterios.dra...@gmail.com + +- Update to 1.4.8: + * Bug fix: Option -dummy did not affect writing by + direct_write_amount= + * New API call burn_drive_reset_simulate() + * New API call burn_drive_get_bd_r_pow() + * Refusing to write to BD-R if formatted to Pseudo Overwrite + +------------------------------------------------------------------- Old: ---- libburn-1.4.6.tar.gz New: ---- libburn-1.4.8.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libburn.spec ++++++ --- /var/tmp/diff_new_pack.idXtCy/_old 2018-02-09 15:42:10.074977528 +0100 +++ /var/tmp/diff_new_pack.idXtCy/_new 2018-02-09 15:42:10.078977384 +0100 @@ -1,7 +1,7 @@ # # spec file for package libburn # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %define so_ver 4 Name: libburn -Version: 1.4.6 +Version: 1.4.8 Release: 0 Summary: Library for Writing Preformatted Data onto Optical Media License: GPL-2.0+ @@ -27,8 +27,7 @@ Source0: http://files.libburnia-project.org/releases/%{name}-%{version}.tar.gz BuildRequires: doxygen BuildRequires: fdupes -BuildRequires: pkg-config -BuildRoot: %{_tmppath}/%{name}-%{version}-build +BuildRequires: pkgconfig %description Libburn is a library for writing preformatted data onto optical media such as @@ -74,34 +73,30 @@ # Remove libtool config files find %{buildroot} -type f -name "*.la" -delete -print -# Install devel docs (do it manually to fix also rpmlint warning "files-duplicate" with %%fdupes) +# Install devel docs mkdir -p %{buildroot}%{_docdir}/%{name}-devel -install -pm 0644 AUTHORS CONTRIBUTORS COPYING COPYRIGHT ChangeLog README %{buildroot}%{_docdir}/%{name}-devel/ -install -pm 0644 doc/{cdtext.txt,cookbook.txt,mediainfo.txt} %{buildroot}%{_docdir}/%{name}-devel/ cp -a doc/html/ %{buildroot}%{_docdir}/%{name}-devel/ %fdupes -s %{buildroot}%{_docdir}/%{name}-devel/ %post -n libburn%{so_ver} -p /sbin/ldconfig - %postun -n libburn%{so_ver} -p /sbin/ldconfig %files devel -%defattr(-,root,root,-) -%doc %{_docdir}/%{name}-devel/ +%doc AUTHORS CONTRIBUTORS COPYING COPYRIGHT ChangeLog README +%doc doc/{cdtext.txt,cookbook.txt,mediainfo.txt} +%doc %{_docdir}/%{name}-devel/html/ %{_includedir}/libburn/ %{_libdir}/pkgconfig/libburn-1.pc %{_libdir}/libburn.so %files -n cdrskin -%defattr(-,root,root,-) %doc COPYING COPYRIGHT %doc cdrskin/{README,cdrskin_eng.html,changelog.txt,wiki_plain.txt} %{_bindir}/cdrskin %{_mandir}/man1/cdrskin.1* %files -n libburn%{so_ver} -%defattr(-,root,root,-) %{_libdir}/libburn.so.%{so_ver}* %changelog ++++++ libburn-1.4.6.tar.gz -> libburn-1.4.8.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/COPYRIGHT new/libburn-1.4.8/COPYRIGHT --- old/libburn-1.4.6/COPYRIGHT 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/COPYRIGHT 2017-01-27 12:04:44.000000000 +0100 @@ -1,7 +1,7 @@ Derek Foreman <de...@signalmarketing.com> and Ben Jansens <x...@orodu.net> Copyright (C) 2002-2006 Derek Foreman and Ben Jansens Mario Danic <mario.da...@gmail.com>, Thomas Schmitt <scdbac...@gmx.net> -Copyright (C) 2006-2014 Mario Danic, Thomas Schmitt +Copyright (C) 2006-2017 Mario Danic, Thomas Schmitt This program is free software; you can redistribute it and/or modify diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/ChangeLog new/libburn-1.4.8/ChangeLog --- old/libburn-1.4.6/ChangeLog 2016-09-16 14:14:24.000000000 +0200 +++ new/libburn-1.4.8/ChangeLog 2017-09-12 13:39:09.000000000 +0200 @@ -1,8 +1,15 @@ +libburn-1.4.8.tar.gz Tue Sep 12 2017 +=============================================================================== +* Bug fix: Option -dummy did not affect writing by direct_write_amount= +* New API call burn_drive_reset_simulate() +* New API call burn_drive_get_bd_r_pow() +* Refusing to write to BD-R if formatted to Pseudo Overwrite libburn-1.4.6.tar.gz Fri Sep 16 2016 =============================================================================== * Bug fix: SAO CD could be perceived 2 blocks to short. Regression in 1.4.4 by rev 5672. +* Now operating optical drives on OpenBSD. Thanks to SASANO Takayoshi. * New API call burn_drive_set_immed() * New cdrskin option use_immed_bit= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/Makefile.am new/libburn-1.4.8/Makefile.am --- old/libburn-1.4.6/Makefile.am 2016-09-16 13:45:15.000000000 +0200 +++ new/libburn-1.4.8/Makefile.am 2017-09-12 13:31:27.000000000 +0200 @@ -114,9 +114,9 @@ test_poll_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) test_poll_SOURCES = test/poll.c -## cdrskin construction site - ts A60816 - B60701 +## cdrskin construction site - ts A60816 - B70912 cdrskin_cdrskin_CPPFLAGS = -Ilibburn -cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_1_4_6 +cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_1_4_8 # cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) # ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/Makefile.in new/libburn-1.4.8/Makefile.in --- old/libburn-1.4.6/Makefile.in 2016-09-16 14:22:22.000000000 +0200 +++ new/libburn-1.4.8/Makefile.in 2017-09-12 15:14:07.000000000 +0200 @@ -518,7 +518,7 @@ test_poll_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) test_poll_SOURCES = test/poll.c cdrskin_cdrskin_CPPFLAGS = -Ilibburn -cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_1_4_6 +cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_1_4_8 # cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS) # ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/README new/libburn-1.4.8/README --- old/libburn-1.4.6/README 2016-09-16 14:02:18.000000000 +0200 +++ new/libburn-1.4.8/README 2017-09-12 13:32:58.000000000 +0200 @@ -6,12 +6,12 @@ ------------------------------------------------------------------------------ libburnia-project.org By Mario Danic <mario.da...@gmail.com> and Thomas Schmitt <scdbac...@gmx.net> -Copyright (C) 2006-2016 Mario Danic, Thomas Schmitt +Copyright (C) 2006-2017 Mario Danic, Thomas Schmitt Still containing parts of Libburn. By Derek Foreman <de...@signalmarketing.com> and Ben Jansens <x...@orodu.net> Copyright (C) 2002-2006 Derek Foreman and Ben Jansens - http://files.libburnia-project.org/releases/libburn-1.4.6.tar.gz + http://files.libburnia-project.org/releases/libburn-1.4.8.tar.gz ------------------------------------------------------------------------------ @@ -19,10 +19,10 @@ From tarball -Obtain libburn-1.4.6.tar.gz, take it to a directory of your choice and do: +Obtain libburn-1.4.8.tar.gz, take it to a directory of your choice and do: - tar xzf libburn-1.4.6.tar.gz - cd libburn-1.4.6 + tar xzf libburn-1.4.8.tar.gz + cd libburn-1.4.8 ./configure --prefix=/usr make @@ -770,6 +770,13 @@ ISO images on identical input and identical constant options. Several moderately embarrassing bugs have been fixed. +- Tue Sep 12 2017 release 1.4.8: + libburn now refuses to write to SRM+POW formatted BD-R, because it would + spoil them. libisofs got several bugs fixed and offers new API calls to + supoort new xorriso features. libisoburn and xorriso offer more detail + control with particular boot sector types. New bugs and a regression from + version 1.4.4 were fixed. + ------------------------------------------------------------------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/acinclude.m4 new/libburn-1.4.8/acinclude.m4 --- old/libburn-1.4.6/acinclude.m4 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/acinclude.m4 2017-01-27 16:05:25.000000000 +0100 @@ -149,3 +149,24 @@ fi ]) + +dnl LIBBURNIA_CHECK_LINUX_SCSI is by Thomas Schmitt, libburnia project +dnl +AC_DEFUN([LIBBURNIA_CHECK_LINUX_SCSI], +[ + dnl Check whether it is a Linux without scsi/scsi.h + AH_TEMPLATE([Libburn_use_sg_dummY], + [Define to compile without OS specific SCSI features]) + AC_MSG_CHECKING([for missing scsi/scsi.h on Linux]) + AC_TRY_COMPILE([ +#ifdef __linux +#include <scsi/scsi.h> +#endif + ], + [;], + [AC_MSG_RESULT([no])], + [AC_DEFINE([Libburn_use_sg_dummY], [yes]) + AC_MSG_RESULT([yes])] + ) +]) + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/cdrskin/README new/libburn-1.4.8/cdrskin/README --- old/libburn-1.4.6/cdrskin/README 2016-09-16 14:03:44.000000000 +0200 +++ new/libburn-1.4.8/cdrskin/README 2017-09-12 13:34:20.000000000 +0200 @@ -4,9 +4,9 @@ cdrskin. By Thomas Schmitt <scdbac...@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-1.4.6.tar.gz +http://scdbackup.sourceforge.net/cdrskin-1.4.8.tar.gz -Copyright (C) 2006-2016 Thomas Schmitt, provided under GPL version 2 or later. +Copyright (C) 2006-2017 Thomas Schmitt, provided under GPL version 2 or later. ------------------------------------------------------------------------------ @@ -26,10 +26,10 @@ Compilation, First Glimpse, Installation -Obtain cdrskin-1.4.6.tar.gz, take it to a directory of your choice and do: +Obtain cdrskin-1.4.8.tar.gz, take it to a directory of your choice and do: - tar xzf cdrskin-1.4.6.tar.gz - cd cdrskin-1.4.6 + tar xzf cdrskin-1.4.8.tar.gz + cd cdrskin-1.4.8 Within that directory execute: @@ -591,7 +591,7 @@ Based on and sub project of: libburnia-project.org By Mario Danic <mario.da...@gmail.com> and Thomas Schmitt <scdbac...@gmx.net> -Copyright (C) 2006-2014 Mario Danic, Thomas Schmitt +Copyright (C) 2006-2017 Mario Danic, Thomas Schmitt libburnia-project.org is inspired by and in other components still containing parts of diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/cdrskin/cdrskin.1 new/libburn-1.4.8/cdrskin/cdrskin.1 --- old/libburn-1.4.6/cdrskin/cdrskin.1 2016-09-16 14:03:30.000000000 +0200 +++ new/libburn-1.4.8/cdrskin/cdrskin.1 2017-09-12 13:33:53.000000000 +0200 @@ -2,7 +2,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH CDRSKIN 1 "Version 1.4.6, Sep 16, 2016" +.TH CDRSKIN 1 "Version 1.4.7, Sep 12, 2017" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -532,6 +532,7 @@ .br Options -mode2, -xa, and -xa2 get mapped to -data, not using the desired CD sector formats and thus not taking advantage of eventual higher payload. +.TP .BI \-xa1 Subsequent tracks are data tracks with input suitable for CD-ROM XA mode 2 form 1. This differs from -data input by 8 additional header bytes per block. @@ -810,7 +811,7 @@ .TP .BI speed= number Set speed of drive. With data CD, 1x speed corresponds to a throughput of -150,000 bytes/second. With DVD, 1x = 1,385,000 bytes/second. +153,600 bytes/second. With DVD, 1x = 1,385,000 bytes/second. With BD 1x = 4,495,625 bytes/second. It is not an error to set a speed higher than is suitable for drive and media. One should stay within a realistic speed range, though. @@ -1068,7 +1069,7 @@ and switches back to normal session oriented writing. .br Both, write_start_address and direct_write_amount size must be aligned to a -media dependend transaction size. With DVD-RAM, BD-RE, DVD+RW this is 2k, with +media dependent transaction size. With DVD-RAM, BD-RE, DVD+RW this is 2k, with overwriteable DVD-RW it is 32k. .TP .BI dvd_obs= default|32k|64k diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/cdrskin/cdrskin.c new/libburn-1.4.8/cdrskin/cdrskin.c --- old/libburn-1.4.6/cdrskin/cdrskin.c 2016-09-16 14:03:20.000000000 +0200 +++ new/libburn-1.4.8/cdrskin/cdrskin.c 2017-09-12 13:33:45.000000000 +0200 @@ -1,6 +1,6 @@ /* - cdrskin.c , Copyright 2006-2016 Thomas Schmitt <scdbac...@gmx.net> + cdrskin.c , Copyright 2006-2017 Thomas Schmitt <scdbac...@gmx.net> Provided under GPL version 2 or later. A cdrecord compatible command line interface for libburn. @@ -87,7 +87,7 @@ /** The official program version */ #ifndef Cdrskin_prog_versioN -#define Cdrskin_prog_versioN "1.4.6" +#define Cdrskin_prog_versioN "1.4.8" #endif /** The official libburn interface revision to use. @@ -100,7 +100,7 @@ #define Cdrskin_libburn_minoR 4 #endif #ifndef Cdrskin_libburn_micrO -#define Cdrskin_libburn_micrO 6 +#define Cdrskin_libburn_micrO 8 #endif @@ -120,34 +120,34 @@ #undef Cdrskin_libburn_versioN #endif -#ifdef Cdrskin_libburn_1_4_6 -#define Cdrskin_libburn_versioN "1.4.6" +#ifdef Cdrskin_libburn_1_4_8 +#define Cdrskin_libburn_versioN "1.4.8" #endif -#ifdef Cdrskin_libburn_1_4_7 -#define Cdrskin_libburn_versioN "1.4.7" +#ifdef Cdrskin_libburn_1_4_9 +#define Cdrskin_libburn_versioN "1.4.9" #endif #ifndef Cdrskin_libburn_versioN -#define Cdrskin_libburn_1_4_6 -#define Cdrskin_libburn_versioN "1.4.6" +#define Cdrskin_libburn_1_4_8 +#define Cdrskin_libburn_versioN "1.4.8" #endif -#ifdef Cdrskin_libburn_1_4_6 +#ifdef Cdrskin_libburn_1_4_8 #undef Cdrskin_libburn_majoR #undef Cdrskin_libburn_minoR #undef Cdrskin_libburn_micrO #define Cdrskin_libburn_majoR 1 #define Cdrskin_libburn_minoR 4 -#define Cdrskin_libburn_micrO 6 +#define Cdrskin_libburn_micrO 8 #endif -#ifdef Cdrskin_libburn_1_4_7 +#ifdef Cdrskin_libburn_1_4_9 #undef Cdrskin_libburn_majoR #undef Cdrskin_libburn_minoR #undef Cdrskin_libburn_micrO #define Cdrskin_libburn_majoR 1 #define Cdrskin_libburn_minoR 4 -#define Cdrskin_libburn_micrO 7 +#define Cdrskin_libburn_micrO 9 #endif @@ -2855,7 +2855,7 @@ printf(" --drive_not_exclusive combined not_o_excl and not_f_setlk.\n"); printf(" --drive_not_f_setlk do not obtain exclusive lock via fcntl.\n"); printf(" --drive_not_o_excl do not ask kernel to prevent opening\n"); - printf(" busy drives. Effect is kernel dependend.\n"); + printf(" busy drives. Effect is kernel dependent.\n"); printf( " drive_scsi_dev_family=<sr|scd|sg|default> select Linux device\n"); printf(" file family to be used for (pseudo-)SCSI.\n"); @@ -5134,7 +5134,7 @@ struct burn_toc_entry toc_entry; enum burn_disc_status s; char profile_name[80]; - int profile_number; + int profile_number, is_bdr_pow= 0; drive= skin->drives[skin->driveno].drive; @@ -5255,8 +5255,10 @@ if(open_sessions > 0 && !have_real_open_session) open_sessions--; + is_bdr_pow= burn_drive_get_bd_r_pow(drive); printf("Media summary: %d sessions, %d tracks, %s %s\n", num_sessions + open_sessions, track_count, + is_bdr_pow ? "unusable (POW)" : s==BURN_DISC_BLANK ? "blank" : s==BURN_DISC_APPENDABLE ? "appendable" : s==BURN_DISC_FULL ? "closed" : @@ -5294,7 +5296,7 @@ struct burn_toc_entry toc_entry; enum burn_disc_status s, show_status; char profile_name[80]; - int pno; + int pno, is_bdr_pow= 0; char media_class[80]; int nominal_sessions= 1, ftils= 1, ltils= 1, first_track= 1, read_capacity= 0; int app_code, cd_info_valid, lra, alloc_blocks, free_blocks; @@ -5323,10 +5325,12 @@ strcpy(media_class, "BD"); else sprintf(media_class, "Unknown class (profile 0x%4.4X)", pno); + is_bdr_pow= burn_drive_get_bd_r_pow(drive); printf("\n"); printf("Mounted media class: %s\n", media_class); - printf("Mounted media type: %s\n", profile_name); + printf("Mounted media type: %s%s\n", profile_name, + is_bdr_pow ? ", Pseudo Overwrite formatted" : ""); ret= burn_disc_erasable(drive); printf("Disk Is %serasable\n", (ret || skin->media_is_overwriteable) ? "" : "not "); @@ -5339,6 +5343,7 @@ if(ovwrt_full) show_status= BURN_DISC_FULL; printf("disk status: %s\n", + is_bdr_pow ? "unusable (POW)" : show_status == BURN_DISC_BLANK ? "empty" : show_status == BURN_DISC_APPENDABLE ? "incomplete/appendable" : show_status == BURN_DISC_FULL ? "complete" : @@ -5576,7 +5581,7 @@ char profile_name[80], *manuf= NULL, *media_code1= NULL, *media_code2= NULL; char *book_type= NULL, *product_id= NULL; char *sno= NULL; - int sno_len = 0, i; + int sno_len = 0, i, is_bdr_pow= 0; ClN(printf("cdrskin: pseudo-atip on drive %d\n",skin->driveno)); ret= Cdrskin_grab_drive(skin,0); @@ -5651,7 +5656,9 @@ if(profile_number==0x13) /* DVD-RW */ printf("cdrskin: message for sdvdbackup: \"(growisofs mode Restricted Overwrite)\"\n"); } else if(strstr(profile_name,"BD")==profile_name) { - printf("Mounted Media: %2.2Xh, %s\n", profile_number, profile_name); + is_bdr_pow= burn_drive_get_bd_r_pow(drive); + printf("Mounted Media: %2.2Xh, %s%s\n", profile_number, profile_name, + is_bdr_pow ? ", Pseudo Overwrite formatted" : ""); } else { printf("ATIP info from disk:\n"); if(burn_disc_erasable(drive)) { @@ -5766,6 +5773,7 @@ { struct burn_drive *drive; int ret, i, status, num_formats, profile_no, type, alloc_blocks, free_blocks; + int is_bdr_pow= 0; off_t size; unsigned dummy; char status_text[80], profile_name[90]; @@ -5782,10 +5790,12 @@ ret= 0; goto ex; } ret= burn_disc_get_profile(drive, &profile_no, profile_name); + is_bdr_pow= burn_drive_get_bd_r_pow(drive); printf("Media current: "); if(profile_no > 0 && ret > 0) { if(profile_name[0]) - printf("%s\n", profile_name); + printf("%s%s\n", profile_name, + is_bdr_pow ? ", Pseudo Overwrite formatted" : ""); else printf("%4.4Xh\n", profile_no); } else @@ -5835,7 +5845,7 @@ int Cdrskin_list_speeds(struct CdrskiN *skin, int flag) { struct burn_drive *drive; - int ret, i, profile_no, high= -1, low= 0x7fffffff, is_cd= 0; + int ret, i, profile_no, high= -1, low= 0x7fffffff, is_cd= 0, is_bdr_pow= 0; char profile_name[90], *speed_unit= "D"; double speed_factor= 1385000.0, cd_factor= 75.0 * 2352; struct burn_speed_descriptor *speed_list= NULL, *item, *other; @@ -5850,10 +5860,12 @@ ret= 0; goto ex; } ret= burn_disc_get_profile(drive, &profile_no, profile_name); + is_bdr_pow= burn_drive_get_bd_r_pow(drive); printf("Media current: "); if(profile_no > 0 && ret > 0) { if(profile_name[0]) - printf("%s\n", profile_name); + printf("%s%s\n", profile_name, + is_bdr_pow ? ", Pseudo Overwrite formatted" : ""); else printf("%4.4Xh\n", profile_no); } else @@ -6989,6 +7001,7 @@ int ret, max_chunksize= 64*1024, source_fd= -1, is_from_stdin, eof_sensed= 0; int self_opened= 0; char *buf= NULL, *source_path, amount_text[81]; + char *dummy_text= ""; struct burn_multi_caps *caps= NULL; ret= Cdrskin_grab_drive(skin,0); @@ -7042,8 +7055,11 @@ sprintf(amount_text,"%.fk",(double) (data_count/1024)); else strcpy(amount_text,"0=open_ended"); - fprintf(stderr,"Beginning direct write (start=%.fk,amount=%s) ...\n", - (double) (byte_address/1024),amount_text); + burn_drive_reset_simulate(skin->grabbed_drive, !!skin->dummy_mode); + if(skin->dummy_mode) + dummy_text= " simulation of"; + fprintf(stderr,"Beginning%s direct write (start=%.fk,amount=%s) ...\n", + dummy_text, (double) (byte_address / 1024), amount_text); for(i= 0; i<data_count || data_count==0; i+= chunksize) { if(data_count==0) chunksize= (alignment > 0 ? alignment : 2048); @@ -7937,7 +7953,7 @@ int Cdrskin_msinfo(struct CdrskiN *skin, int flag) { int num_sessions, session_no, ret, num_tracks, open_sessions= 0; - int nwa= -123456789, lba= -123456789, aux_lba; + int nwa= -123456789, lba= -123456789, aux_lba, is_bdr_pow= 0; char msg[80]; enum burn_disc_status s; struct burn_drive *drive; @@ -7966,6 +7982,12 @@ fprintf(stderr,"cdrskin: or on overwriteables with existing ISO-9660 file system.\n"); {ret= 0; goto ex;} } + is_bdr_pow= burn_drive_get_bd_r_pow(drive); + if(is_bdr_pow) { + fprintf(stderr, + "cdrskin: FATAL : -msinfo cannot operate on POW formatted BD-R discs\n"); + {ret= 0; goto ex;} + } disc= burn_drive_get_disc(drive); if(disc==NULL) { /* No TOC available. Try to inquire directly. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/cdrskin/cdrskin_eng.html new/libburn-1.4.8/cdrskin/cdrskin_eng.html --- old/libburn-1.4.6/cdrskin/cdrskin_eng.html 2016-09-16 14:11:51.000000000 +0200 +++ new/libburn-1.4.8/cdrskin/cdrskin_eng.html 2017-09-12 13:35:25.000000000 +0200 @@ -67,7 +67,7 @@ GPL software included:<BR> </H2> <DL> -<DT>libburn-1.4.6</DT> +<DT>libburn-1.4.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) @@ -202,13 +202,13 @@ <P> <DL> <DT>Download as source code (see README):</DT> -<DD><A HREF="cdrskin-1.4.6.tar.gz">cdrskin-1.4.6.tar.gz</A> +<DD><A HREF="cdrskin-1.4.8.tar.gz">cdrskin-1.4.8.tar.gz</A> (1060 KB). </DD> -<DD><A HREF="cdrskin-1.4.6.tar.gz.sig">cdrskin-1.4.6.tar.gz.sig</A></DD> +<DD><A HREF="cdrskin-1.4.8.tar.gz.sig">cdrskin-1.4.8.tar.gz.sig</A></DD> <DD> (detached GPG signature for verification by -<KBD>gpg --verify cdrskin-1.4.6.tar.gz.sig cdrskin-1.4.6.tar.gz</KBD> +<KBD>gpg --verify cdrskin-1.4.8.tar.gz.sig cdrskin-1.4.8.tar.gz</KBD> <BR> after <KBD>gpg --keyserver keys.gnupg.net --recv-keys ABC0A854</KBD>). </DD> @@ -259,19 +259,17 @@ <HR> <P> -Enhancements towards previous stable version cdrskin-1.4.4: +Enhancements towards previous stable version cdrskin-1.4.6: <UL> -<LI>New cdrskin option use_immed_bit=</LI> -<LI>Now operating drives on OpenBSD</LI> +<LI>Refusing to write to BD-R if formatted to Pseudo Overwrite</LI> <!-- <LI>none</LI> --> </UL> -Bug fixes towards cdrskin-1.4.4: +Bug fixes towards cdrskin-1.4.6: <UL> -<LI>SAO CD could be perceived 2 blocks to short. -Regression in 1.4.4 by rev 5672.</LI> +<LI>Option -dummy did not affect writing by direct_write_amount=</LI> <!-- <LI>none</LI> Bug fixes towards cdrskin-1.4.2 (without .pl01): @@ -284,8 +282,8 @@ <P> <DL> -<DT><H3>Development snapshot, version 1.4.7 :</H3></DT> -<DD>Enhancements towards current stable version 1.4.6: +<DT><H3>Development snapshot, version 1.4.9 :</H3></DT> +<DD>Enhancements towards current stable version 1.4.8: <UL> <LI>none yet</LI> <!-- @@ -294,7 +292,7 @@ </UL> </DD> -<DD>Bug fixes towards cdrskin-1.4.6: +<DD>Bug fixes towards cdrskin-1.4.8: <UL> <LI>none yet</LI> <!-- @@ -304,10 +302,10 @@ </DD> <DD> </DD> -<DD><A HREF="README_cdrskin_devel">README 1.4.7</A> -<DD><A HREF="cdrskin__help_devel">cdrskin-1.4.7 --help</A></DD> -<DD><A HREF="cdrskin_help_devel">cdrskin-1.4.7 -help</A></DD> -<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 1.4.7)</A></DD> +<DD><A HREF="README_cdrskin_devel">README 1.4.9</A> +<DD><A HREF="cdrskin__help_devel">cdrskin-1.4.9 --help</A></DD> +<DD><A HREF="cdrskin_help_devel">cdrskin-1.4.9 -help</A></DD> +<DD><A HREF="man_1_cdrskin_devel.html">man cdrskin (as of 1.4.9)</A></DD> <DD> </DD> <DT>Maintainers of cdrskin unstable packages please use SVN of <A HREF="http://libburnia-project.org"> libburnia-project.org</A></DT> @@ -327,7 +325,7 @@ <A HREF="README_cdrskin_devel">upcoming README</A> ): </DD> <DD> -<A HREF="cdrskin-1.4.7.tar.gz">cdrskin-1.4.7.tar.gz</A> +<A HREF="cdrskin-1.4.9.tar.gz">cdrskin-1.4.9.tar.gz</A> (1060 KB). </DD> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/cdrskin/cdrskin_timestamp.h new/libburn-1.4.8/cdrskin/cdrskin_timestamp.h --- old/libburn-1.4.6/cdrskin/cdrskin_timestamp.h 2016-09-16 14:04:20.000000000 +0200 +++ new/libburn-1.4.8/cdrskin/cdrskin_timestamp.h 2017-09-12 13:34:49.000000000 +0200 @@ -1 +1 @@ -#define Cdrskin_timestamP "2016.09.16.113001" +#define Cdrskin_timestamP "2017.09.12.110001" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/cdrskin/changelog.txt new/libburn-1.4.8/cdrskin/changelog.txt --- old/libburn-1.4.6/cdrskin/changelog.txt 2016-09-16 14:15:10.000000000 +0200 +++ new/libburn-1.4.8/cdrskin/changelog.txt 2017-09-12 13:39:38.000000000 +0200 @@ -4907,7 +4907,7 @@ configure.ac Some changes in the comments -24 Dec 2008 [1338] +24 Dec 2007 [1338] libburn/libburn.h libburn/source.h libburn/source.c @@ -13557,7 +13557,7 @@ + cdrskin/add_ts_changes_to_libburn_1_4_7 Updated cdrskin tarball generator - [] +16 Sep 2016 [5763] ChangeLog cdrskin/changelog.txt Updated change log @@ -13569,6 +13569,130 @@ * New cdrskin option use_immed_bit= +2016.09.16.190600 [5768] +Makefile.am +configure.ac +README +libburn/libburn.h +cdrskin/cdrskin.c +cdrskin/cdrskin.1 +cdrskin/README +cdrskin/compile_cdrskin.sh +cdrskin/cdrskin_timestamp.h +cdrskin/cdrskin_eng.html +Made number transition to 1.4.7 + +16 Sep 2016 [5769] +- cdrskin/add_ts_changes_to_libburn_1_4_4 +- cdrskin/add_ts_changes_to_libburn_1_4_5 ++ cdrskin/add_ts_changes_to_libburn_1_4_6 ++ cdrskin/add_ts_changes_to_libburn_1_4_7 +Updated cdrskin tarball generator + +16 Sep 2016 [5770] +ChangeLog +cdrskin/changelog.txt +Updated change log + +------------------------------------ cycle - cdrskin-1.4.7 - 2016.09.16.190600 + + +16 Sep 2016 [5771] +libburn release 1.4.6 is ready +http://svn.libburnia-project.org/libburn/branches/1.4.6 +http://svn.libburnia-project.org/libburn/tags/1.4.6 + + +2016.11.18.131813 [80175e0] [5778] +libburn/libburn.h +libburn/transport.h +libburn/drive.c +libburn/write.c +libburn/mmc.c +libburn/libburn.ver +Let random access writing obey simulation mode of previous sequential run. +New API call burn_drive_reset_simulate(). + +2016.11.18.132335 [19a1b8e] [5579] +cdrskin/cdrskin.c +Bug fix: Option -dummy did not affect writing by direct_write_amount= + +11 Jan 2017 [074f88f] [5791] +cdrskin/cdrskin.1 +Corrected documentation of bytes/second value of 1x CD speed + +27 Jan 2017 [6b020a3] [5792] +configure.ac +acinclude.m4 +COPYRIGHT +Detecting Linux systems without generic SCSI support by scsi/scsi.h + +27 Jan 2017 [6f6bf68] [5795] +acinclude.m4 +Small adjustement for previous commit + +2017.01.28.200155 [724d518] [5797] +libburn/file.h +libburn/file.c +libburn/async.h +libburn/async.c +Giving up use of function pthread_cancel() + +2017.01.28.200802 [858e42d] [5798] +cdrskin/cdrskin.c +cdrskin/cdrskin.1 +Corrected harmless typos found by lintian + +2017.02.06.135800 [d71d80d] [5800] +libburn/libburn.h +libburn/drive.c +libburn/libburn.ver +New API call burn_drive_get_bd_r_pow() + +2017.02.06.141213 [a4b688a] [5801] +libburn/libburn.h +libburn/options.c +libburn/write.c +Refusing to write to BD-R if formatted to Pseudo Overwrite + +2017.02.06.161439 [2bb8bf4] [5802] +cdrskin/cdrskin.c +Reporting POW formatted BD-R as unusable + +2017.07.15.194129 [113f587] +libburn/read.c +Fixed the block count in error message about read attempt after medium end + +2017.09.12.110001 [516dc2c] +Makefile.am +configure.ac +README +libburn/libburn.h +cdrskin/cdrskin.c +cdrskin/cdrskin.1 +cdrskin/README +cdrskin/compile_cdrskin.sh +cdrskin/cdrskin_timestamp.h +cdrskin/cdrskin_eng.html +Made number transition to 1.4.8 + +12 Sep 2017 [ea486a1] +- cdrskin/add_ts_changes_to_libburn_1_4_6 +- cdrskin/add_ts_changes_to_libburn_1_4_7 ++ cdrskin/add_ts_changes_to_libburn_1_4_8 ++ cdrskin/add_ts_changes_to_libburn_1_4_9 +Updated cdrskin tarball generator + +12 Sep 2017 [] +ChangeLog +cdrskin/changelog.txt +Updated change log + +----------------------------------- release - cdrskin-1.4.8 - 2017.09.12.110001 +* Bug fix: Option -dummy did not affect writing by direct_write_amount= +* New API call burn_drive_get_bd_r_pow() +* Refusing to write to BD-R if formatted to Pseudo Overwrite + [] ChangeLog @@ -13576,7 +13700,15 @@ cdrskin/changelog.txt Updated change log ------------------------------------- cycle - cdrskin-1.4.7 - +------------------------------------ cycle - cdrskin-1.5.0 - + + [] [] +libburn/spc.h +libburn/spc.c +libburn/sg-linux.c +Making commands retryable after particular Linux kernel transport errors +(currently as libburn/*.[ch].after_1_4_8) + [] ChangeLog @@ -13584,7 +13716,7 @@ cdrskin/changelog.txt Updated change log ------------------------------------- cycle - cdrskin-1.4.7 - +------------------------------------ cycle - cdrskin-1.5.0 - ********************************************************************** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/cdrskin/compile_cdrskin.sh new/libburn-1.4.8/cdrskin/compile_cdrskin.sh --- old/libburn-1.4.6/cdrskin/compile_cdrskin.sh 2016-09-16 14:04:08.000000000 +0200 +++ new/libburn-1.4.8/cdrskin/compile_cdrskin.sh 2017-09-12 13:34:39.000000000 +0200 @@ -1,14 +1,14 @@ #!/bin/sh # compile_cdrskin.sh -# Copyright 2005 - 2016 Thomas Schmitt, scdbac...@gmx.net, GPL v2 or later +# Copyright 2005 - 2017 Thomas Schmitt, scdbac...@gmx.net, GPL v2 or later # to be executed within ./libburn-* or./cdrskin-* debug_opts="-O2" def_opts= largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1" fifo_opts="" -libvers="-DCdrskin_libburn_1_4_6" +libvers="-DCdrskin_libburn_1_4_8" # To be used if Makefile.am uses libburn_libburn_la_CFLAGS # burn="libburn/libburn_libburn_la-" @@ -41,15 +41,15 @@ elif test "$i" = "-compile_dewav" then compile_dewav=1 - elif test "$i" = "-libburn_1_4_6" + elif test "$i" = "-libburn_1_4_8" then - libvers="-DCdrskin_libburn_1_4_6" + libvers="-DCdrskin_libburn_1_4_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_1_4_7" + libvers="-DCdrskin_libburn_1_4_9" libdax_audioxtr_o="$burn"libdax_audioxtr.o libdax_msgs_o="$burn"libdax_msgs.o cleanup_src_or_obj="$burn"cleanup.o @@ -99,7 +99,7 @@ echo "Options:" echo " -compile_cdrfifo compile program cdrskin/cdrfifo." echo " -compile_dewav compile program test/dewav without libburn." - echo " -libburn_1_4_6 set macro to match libburn-1.4.6" + echo " -libburn_1_4_8 set macro to match libburn-1.4.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." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/configure new/libburn-1.4.8/configure --- old/libburn-1.4.6/configure 2016-09-16 14:22:21.000000000 +0200 +++ new/libburn-1.4.8/configure 2017-09-12 15:14:07.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libburn 1.4.6. +# Generated by GNU Autoconf 2.69 for libburn 1.4.8. # # Report bugs to <http://libburnia-project.org>. # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='libburn' PACKAGE_TARNAME='libburn' -PACKAGE_VERSION='1.4.6' -PACKAGE_STRING='libburn 1.4.6' +PACKAGE_VERSION='1.4.8' +PACKAGE_STRING='libburn 1.4.8' PACKAGE_BUGREPORT='http://libburnia-project.org' PACKAGE_URL='' @@ -1357,7 +1357,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libburn 1.4.6 to adapt to many kinds of systems. +\`configure' configures libburn 1.4.8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1428,7 +1428,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libburn 1.4.6:";; + short | recursive ) echo "Configuration of libburn 1.4.8:";; esac cat <<\_ACEOF @@ -1556,7 +1556,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libburn configure 1.4.6 +libburn configure 1.4.8 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1925,7 +1925,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libburn $as_me 1.4.6, which was +It was created by libburn $as_me 1.4.8, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2910,7 +2910,7 @@ # Define the identity of the package. PACKAGE='libburn' - VERSION='1.4.6' + VERSION='1.4.8' cat >>confdefs.h <<_ACEOF @@ -3007,7 +3007,7 @@ BURN_MAJOR_VERSION=1 BURN_MINOR_VERSION=4 -BURN_MICRO_VERSION=6 +BURN_MICRO_VERSION=8 BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION @@ -3016,8 +3016,8 @@ LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION -LT_CURRENT=103 -LT_AGE=99 +LT_CURRENT=105 +LT_AGE=101 LT_REVISION=0 LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` @@ -12691,6 +12691,39 @@ fi fi +# There are Linuxes with no public generic SCSI interface + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for missing scsi/scsi.h on Linux" >&5 +$as_echo_n "checking for missing scsi/scsi.h on Linux... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __linux +#include <scsi/scsi.h> +#endif + +int +main () +{ +; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + $as_echo "#define Libburn_use_sg_dummY yes" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + # Library versioning normally serves a complex purpose. # Since libburn obeys strict ABI backward compatibility, it needs only the # simple feature to declare function names "global:" or "local:". Only the @@ -13456,7 +13489,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libburn $as_me 1.4.6, which was +This file was extended by libburn $as_me 1.4.8, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13513,7 +13546,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libburn config.status 1.4.6 +libburn config.status 1.4.8 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/configure.ac new/libburn-1.4.8/configure.ac --- old/libburn-1.4.6/configure.ac 2016-09-16 14:00:48.000000000 +0200 +++ new/libburn-1.4.8/configure.ac 2017-09-12 13:32:02.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([libburn], [1.4.6], [http://libburnia-project.org]) +AC_INIT([libburn], [1.4.8], [http://libburnia-project.org]) AC_PREREQ([2.50]) dnl AC_CONFIG_HEADER([config.h]) @@ -109,6 +109,7 @@ dnl 1.4.2 = libburn.so.4.95.0 dnl 1.4.4 = libburn.so.4.97.0 dnl 1.4.6 = libburn.so.4.99.0 +dnl 1.4.8 = libburn.so.4.101.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. @@ -134,7 +135,7 @@ dnl As said: Only copies. Original in libburn/libburn.h : burn_header_version_* BURN_MAJOR_VERSION=1 BURN_MINOR_VERSION=4 -BURN_MICRO_VERSION=6 +BURN_MICRO_VERSION=8 BURN_VERSION=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION AC_SUBST(BURN_MAJOR_VERSION) @@ -145,14 +146,14 @@ dnl Libtool versioning LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION dnl -dnl This is the release version libburn-1.4.6 +dnl This is the release version libburn-1.4.8 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 = 103 - 99 = 4 . Linux library name = libburn.so.4.99.0 -LT_CURRENT=103 -LT_AGE=99 +dnl SONAME = 105 - 101 = 4 . Linux library name = libburn.so.4.101.0 +LT_CURRENT=105 +LT_AGE=101 LT_REVISION=0 LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` @@ -298,6 +299,10 @@ fi fi +dnl ts B70127 +# There are Linuxes with no public generic SCSI interface +LIBBURNIA_CHECK_LINUX_SCSI + dnl ts B00704 # Library versioning normally serves a complex purpose. # Since libburn obeys strict ABI backward compatibility, it needs only the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/async.c new/libburn-1.4.8/libburn/async.c --- old/libburn-1.4.6/libburn/async.c 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/async.c 2017-01-28 20:59:50.000000000 +0100 @@ -1,7 +1,7 @@ /* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */ /* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens - Copyright (c) 2006 - 2014 Thomas Schmitt <scdbac...@gmx.net> + Copyright (c) 2006 - 2017 Thomas Schmitt <scdbac...@gmx.net> Provided under GPL version 2 or later. */ @@ -123,6 +123,42 @@ static struct w_list *workers = NULL; +int burn_async_manage_lock(int mode) +{ + int ret; + + static pthread_mutex_t access_lock; + static int mutex_initialized = 0; + static int mutex_locked = 0; + + if (mode == BURN_ASYNC_LOCK_INIT) { + if (mutex_initialized) + return 2; + ret = pthread_mutex_init(&access_lock, NULL); + if (ret != 0) + return 0; + mutex_initialized = 1; + return 1; + } + if (!mutex_initialized) + return 0; + if (mode == BURN_ASYNC_LOCK_OBTAIN) { + ret = pthread_mutex_lock(&access_lock); + if (ret != 0) + return 0; + mutex_locked = 1; + } else if (mode == BURN_ASYNC_LOCK_RELEASE) { + if (!mutex_locked) + return 2; + ret = pthread_mutex_unlock(&access_lock); + if (ret != 0) + return 0; + mutex_locked = 0; + } + return 1; +} + + static struct w_list *find_worker(struct burn_drive *d) { struct w_list *a; @@ -149,9 +185,8 @@ a->drive = d; a->u = *data; -/* - memcpy(&(a->u), data, sizeof(union w_list_data)); -*/ + + burn_async_manage_lock(BURN_ASYNC_LOCK_INIT); /* insert at front of the list */ a->next = workers; @@ -162,6 +197,7 @@ d->busy = BURN_DRIVE_SPAWNING; #ifdef Libburn_create_detached_threadS + /* ts A71019 : Trying to start the threads detached to get rid of the zombies which do neither react on pthread_join() nor on pthread_detach(). @@ -169,12 +205,12 @@ pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); attr_pt= &attr; -/* - libdax_msgs_submit(libdax_messenger, -1, 0x00020158, - LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_LOW, - "add_worker(): Creating detached thread.", 0, 0); -*/ -#endif + +#endif /* Libburn_create_detached_threadS */ + + /* Worker specific locks are to be released early by the worker */ + if (f == (WorkerFunc) burn_fifo_source_shoveller) + burn_async_manage_lock(BURN_ASYNC_LOCK_OBTAIN); if (pthread_create(&a->thread, attr_pt, f, a)) { free(a); @@ -704,7 +740,6 @@ static void *fifo_worker_func(struct w_list *w) { - int old; #define Libburn_protect_fifo_threaD 1 @@ -718,10 +753,6 @@ pthread_sigmask(SIG_SETMASK, &sigset, &oldset); #endif /* Libburn_protect_fifo_threaD */ - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old); - pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &old); - /* Note: Only burn_fifo_abort() shall cancel the fifo thread */ - burn_fifo_source_shoveller(w->u.fifo.source, w->u.fifo.flag); remove_worker(pthread_self()); @@ -764,18 +795,19 @@ int ret; pthread_t pt; - if (fs->thread_is_valid <= 0 || fs->thread_handle == NULL) - return(2); + burn_async_manage_lock(BURN_ASYNC_LOCK_OBTAIN); -#ifdef NIX - libdax_msgs_submit(libdax_messenger, -1, 0x00000002, - LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, - "Aborting running burn_source_fifo thread", 0, 0); -#endif /* NIX */ + if (fs->thread_is_valid <= 0 || fs->thread_handle == NULL) { + burn_async_manage_lock(BURN_ASYNC_LOCK_RELEASE); + return 2; + } + pt = *((pthread_t *) fs->thread_handle); + + burn_async_manage_lock(BURN_ASYNC_LOCK_RELEASE); + + fs->do_abort = 1; + ret = pthread_join(pt, NULL); - pt= *((pthread_t *) fs->thread_handle); - remove_worker(pt); - ret = pthread_cancel(pt); return (ret == 0); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/async.h new/libburn-1.4.8/libburn/async.h --- old/libburn-1.4.6/libburn/async.h 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/async.h 2017-01-28 20:48:34.000000000 +0100 @@ -1,5 +1,10 @@ /* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */ +/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens + Copyright (c) 2006 - 2017 Thomas Schmitt <scdbac...@gmx.net> + Provided under GPL version 2 or later. +*/ + #ifndef BURN__ASYNC_H #define BURN__ASYNC_H @@ -14,5 +19,10 @@ /* To abort a running fifo thread before the fifo object gets deleted */ int burn_fifo_abort(struct burn_source_fifo *fs, int flag); +/* ts B70126 */ +#define BURN_ASYNC_LOCK_RELEASE 0 +#define BURN_ASYNC_LOCK_OBTAIN 1 +#define BURN_ASYNC_LOCK_INIT 2 +int burn_async_manage_lock(int mode); #endif /* BURN__ASYNC_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/drive.c new/libburn-1.4.8/libburn/drive.c --- old/libburn-1.4.6/libburn/drive.c 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/drive.c 2017-02-06 14:57:32.000000000 +0100 @@ -1,7 +1,7 @@ /* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */ /* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens - Copyright (c) 2006 - 2016 Thomas Schmitt <scdbac...@gmx.net> + Copyright (c) 2006 - 2017 Thomas Schmitt <scdbac...@gmx.net> Provided under GPL version 2 or later. */ @@ -1587,6 +1587,20 @@ } +int burn_drive_reset_simulate(struct burn_drive *d, int simulate) +{ + if (d->busy != BURN_DRIVE_IDLE) { + libdax_msgs_submit(libdax_messenger, + d->global_index, 0x00020140, + LIBDAX_MSGS_SEV_FATAL, LIBDAX_MSGS_PRIO_HIGH, + "Drive is busy on attempt to write random access",0,0); + return 0; + } + d->do_simulate = !!simulate; + return 1; +} + + int burn_msf_to_sectors(int m, int s, int f) { return (m * 60 + s) * 75 + f; @@ -3600,6 +3614,18 @@ } +int burn_drive_get_bd_r_pow(struct burn_drive *d) +{ + struct burn_feature_descr *feature; + + if (d->current_profile == 0x41) + if (burn_drive_has_feature(d, 0x38, &feature, 0) == 1) + if (feature->flags & 1) + return 1; + return 0; +} + + int burn_drive_set_immed(struct burn_drive *drive, int enable) { drive->do_no_immed = !enable; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/file.c new/libburn-1.4.8/libburn/file.c --- old/libburn-1.4.6/libburn/file.c 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/file.c 2017-01-28 20:46:11.000000000 +0100 @@ -1,7 +1,7 @@ /* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */ /* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens - Copyright (c) 2006 - 2014 Thomas Schmitt <scdbac...@gmx.net> + Copyright (c) 2006 - 2017 Thomas Schmitt <scdbac...@gmx.net> Provided under GPL version 2 or later. */ @@ -356,13 +356,20 @@ fs->thread_pid = getpid(); fs->thread_is_valid = 1; + /* Lock was obtained by async.c:add_worker() */ + burn_async_manage_lock(BURN_ASYNC_LOCK_RELEASE); + bufsize = fs->chunksize * fs->chunks; while (!fs->end_of_consumption) { + if (fs->do_abort) + goto emergency_exit; /* wait for enough buffer space available */ wpos = fs->buf_writepos; counted = 0; while (1) { + if (fs->do_abort) + goto emergency_exit; rpos = fs->buf_readpos; diff = rpos - wpos; trans_end = 0; @@ -405,6 +412,8 @@ } /* Obtain next chunk */ + if (fs->do_abort) + goto emergency_exit; if (fs->inp->read != NULL) ret = fs->inp->read(fs->inp, (unsigned char *) bufpt, fs->inp_read_size); @@ -430,6 +439,8 @@ fs->put_counter++; /* activate read chunk */ + if (fs->do_abort) + goto emergency_exit; if (ret > fs->inp_read_size) /* beware of ill custom burn_source */ ret = fs->inp_read_size; @@ -463,8 +474,11 @@ fs->end_of_input = 1; /* wait for end of reading by consumer */; - while (fs->buf_readpos != fs->buf_writepos && !fs->end_of_consumption) - fifo_sleep(0); + while (fs->buf_readpos != fs->buf_writepos && !fs->end_of_consumption) { + if (fs->do_abort) + goto emergency_exit; + fifo_sleep(0); + } /* destroy ring buffer */; if (!fs->end_of_consumption) @@ -481,8 +495,11 @@ ((size_t) fs->chunksize) * (size_t) fs->chunks, 0); fs->buf = NULL; +emergency_exit:; + burn_async_manage_lock(BURN_ASYNC_LOCK_OBTAIN); fs->thread_handle= NULL; fs->thread_is_valid = 0; + burn_async_manage_lock(BURN_ASYNC_LOCK_RELEASE); return (fs->input_error == 0); } @@ -524,6 +541,7 @@ fs->thread_handle = NULL; fs->thread_pid = 0; fs->thread_is_valid = 0; + fs->do_abort = 0; fs->inp = NULL; /* set later */ if (flag & 1) fs->inp_read_size = 32 * 1024; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/file.h new/libburn-1.4.8/libburn/file.h --- old/libburn-1.4.6/libburn/file.h 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/file.h 2017-01-28 20:44:02.000000000 +0100 @@ -1,7 +1,7 @@ /* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */ /* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens - Copyright (c) 2006 - 2010 Thomas Schmitt <scdbac...@gmx.net> + Copyright (c) 2006 - 2017 Thomas Schmitt <scdbac...@gmx.net> Provided under GPL version 2 or later. */ @@ -27,8 +27,8 @@ /* The fifo stays inactive and unequipped with eventual resources until its read() method is called for the first time. Only then burn_fifo_start() gets called, allocates the complete - resources, starts a thread with burn_fifo_source_shuffler() - which shuffles data and finally destroys the resources. + resources, starts a thread with burn_fifo_source_shoveller() + which shovels data and finally destroys the resources. This late start is to stay modest in case of multiple tracks in one disc. */ @@ -38,6 +38,9 @@ int thread_pid; int thread_is_valid; + /* The shoveller aborts if this is 1. Resource leaks are possible. */ + volatile int do_abort; + /* the burn_source for which this fifo is acting as proxy */ struct burn_source *inp; int inp_read_size; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/libburn.h new/libburn-1.4.8/libburn/libburn.h --- old/libburn-1.4.6/libburn/libburn.h 2016-09-16 14:02:49.000000000 +0200 +++ new/libburn-1.4.8/libburn/libburn.h 2017-09-12 13:33:12.000000000 +0200 @@ -1,7 +1,7 @@ /* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */ /* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens - Copyright (c) 2006 - 2016 Thomas Schmitt <scdbac...@gmx.net> + Copyright (c) 2006 - 2017 Thomas Schmitt <scdbac...@gmx.net> Provided under GPL version 2 or later. This is the official API definition of libburn. @@ -1313,6 +1313,18 @@ int burn_disc_read_atip(struct burn_drive *drive); +/* ts B70206 */ +/** Tells whether a BD-R medium with Pseudo Overwrite (POW) formatting is in + the drive. Such a formatting may have been applied by dvd+rw-tools. It + prevents sequential multi-session. + libburn will refuse to write to such a medium. + @param drive The drive to query. + @return 1 if BD-R Pseudo Overwrite , 0 if not BD-R or not POW + @since 1.4.8 +*/ +int burn_drive_get_bd_r_pow(struct burn_drive *drive); + + /* ts A61020 */ /** Returns start and end lba of the media which is currently inserted in the given drive. The drive has to be grabbed to have hope for reply. @@ -3033,6 +3045,24 @@ int min_usec, int max_usec, int timeout_sec, int min_percent, int max_percent); +/* ts B61116 */ +/** Control the write simulation mode before or after burn_write_opts get + into effect. + Beginning with version 1.4.8 a burn run by burn_disc_write() brings the + burn_drive object in the simulation state as set to the burn_write_opts + by burn_write_opts_set_simulate(). This state is respected by call + burn_random_access_write() until a new call of burn_disc_write() happens + or until burn_drive_reset_simulate() is called. + This call may only be made when burn_drive_get_status() returns + BURN_DRIVE_IDLE. + + @param d The drive to control + @param simulate 1 enables simulation, 0 enables real writing + @return 1=success , 0=failure + @since 1.4.8 +*/ +int burn_drive_reset_simulate(struct burn_drive *d, int simulate); + /* these are for my [Derek Foreman's ?] debugging, they will disappear */ /* ts B11012 : @@ -3100,8 +3130,13 @@ media content and burn_disc_get_status() stay unchanged. Note: With stdio-drives, the target file gets eventually created, opened, lseeked, and closed, but not written. So there are effects on it. - Warning: Call burn_random_access_write() will never do simulation because - it does not get any burn_write_opts. + Note: Up to version 1.4.6 the call burn_random_access_write() after + burn_disc_write() did not simulate because it does not get any + burn_write_opts and the drive did not memorize the simulation state. + This has changed now. burn_random_access_write() will not write after + a simulated burn run. + Use burn_drive_reset_simulate(drive, 0) if you really want to end + simulation before you call burn_disc_write() with new write options. @param opts The write opts to change @param sim Non-zero enables simulation, 0 enables real writing @return Returns 1 on success and 0 on failure. @@ -3671,7 +3706,7 @@ */ #define burn_header_version_major 1 #define burn_header_version_minor 4 -#define burn_header_version_micro 6 +#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. @@ -3944,6 +3979,11 @@ only after the write transaction has ended (successfully or not). So it is wise not to transfer giant amounts of data in a single call. Important: Data have to fit into the already formatted area of the media. + + If the burn_drive object is in simulation mode, then no actual write + operation or synchronization of the drive buffer will happen. + See burn_drive_reset_simulate(). + @param d The drive to which to write @param byte_address The start address of the write in byte (1 LBA unit = 2048 bytes) (do respect media alignment) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/libburn.ver new/libburn-1.4.8/libburn/libburn.ver --- old/libburn-1.4.6/libburn/libburn.ver 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/libburn.ver 2017-02-06 14:57:48.000000000 +0100 @@ -50,6 +50,7 @@ burn_drive_free_speedlist; burn_drive_get_adr; burn_drive_get_all_profiles; +burn_drive_get_bd_r_pow; burn_drive_get_best_speed; burn_drive_get_disc; burn_drive_get_drive_role; @@ -71,6 +72,7 @@ burn_drive_probe_cd_write_modes; burn_drive_re_assess; burn_drive_release; +burn_drive_reset_simulate; burn_drive_scan; burn_drive_scan_and_grab; burn_drive_set_buffer_waiting; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/mmc.c new/libburn-1.4.8/libburn/mmc.c --- old/libburn-1.4.6/libburn/mmc.c 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/mmc.c 2016-11-18 14:16:58.000000000 +0100 @@ -5383,6 +5383,8 @@ d->start_lba = -2000000000; d->end_lba = -2000000000; + d->do_simulate= 0; + /* ts A61201 - A90815*/ d->erasable = 0; d->current_profile = -1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/options.c new/libburn-1.4.8/libburn/options.c --- old/libburn-1.4.6/libburn/options.c 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/options.c 2017-02-06 15:09:13.000000000 +0100 @@ -1,6 +1,6 @@ /* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens - Copyright (c) 2006 - 2012 Thomas Schmitt <scdbac...@gmx.net> + Copyright (c) 2006 - 2017 Thomas Schmitt <scdbac...@gmx.net> Provided under GPL version 2 or later. */ @@ -323,6 +323,11 @@ reasons[0] = 0; + if (burn_drive_get_bd_r_pow(d)) { + strcat(reasons, + "MEDIA: unsuitable BD-R Pseudo Overwrite formatting, "); + return BURN_WRITE_NONE; + } if (d->status != BURN_DISC_BLANK && d->status != BURN_DISC_APPENDABLE){ if (d->status == BURN_DISC_FULL) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/read.c new/libburn-1.4.8/libburn/read.c --- old/libburn-1.4.6/libburn/read.c 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/read.c 2017-07-15 21:41:22.000000000 +0200 @@ -498,7 +498,7 @@ sprintf(msg, "Read start address %ds larger than number of readable blocks %d", (int) (byte_address / 2048 + !!(byte_address % 2048)), - d->media_read_capacity); + d->media_read_capacity + 1); libdax_msgs_submit(libdax_messenger, d->global_index, 0x00020172, (flag & 32) ? LIBDAX_MSGS_SEV_DEBUG : LIBDAX_MSGS_SEV_SORRY, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/transport.h new/libburn-1.4.8/libburn/transport.h --- old/libburn-1.4.6/libburn/transport.h 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/transport.h 2016-11-18 14:15:42.000000000 +0100 @@ -336,6 +336,8 @@ int start_lba; int end_lba; + /* ts B61116 */ + int do_simulate; /* ts A70131 : from 51h READ DISC INFORMATION Number of Sessions (-1)*/ int complete_sessions; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libburn-1.4.6/libburn/write.c new/libburn-1.4.8/libburn/write.c --- old/libburn-1.4.6/libburn/write.c 2016-09-16 12:48:51.000000000 +0200 +++ new/libburn-1.4.8/libburn/write.c 2017-02-06 15:12:07.000000000 +0100 @@ -1,7 +1,7 @@ /* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */ /* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens - Copyright (c) 2006 - 2016 Thomas Schmitt <scdbac...@gmx.net> + Copyright (c) 2006 - 2017 Thomas Schmitt <scdbac...@gmx.net> Provided under GPL version 2 or later. */ @@ -1419,7 +1419,7 @@ enum burn_write_types wt; struct burn_drive *d = o->drive; char *msg = NULL, *reason_pt; - int no_media = 0, ret, has_cdtext; + int no_media = 0, ret, has_cdtext, is_bd_pow = 0; reason_pt= reasons; reasons[0] = 0; @@ -1497,6 +1497,20 @@ sequential stdio "drive" */ if (o->start_byte >= 0) strcat(reasons, "write start address not supported, "); + + is_bd_pow = burn_drive_get_bd_r_pow(d); + if (is_bd_pow && !silent) + libdax_msgs_submit(libdax_messenger, d->global_index, + 0x0002011e, + LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, + "Unsuitable media detected: BD-R formatted to POW.", + 0, 0); + if (is_bd_pow) { + strcat(reasons, + "unsuitable media formatting POW detected, "); + return 0; + } + } else { unsuitable_profile:; msg = calloc(1, 160); @@ -2589,6 +2603,8 @@ if (d->cancel || count <= 0) return 0; + if(d->do_simulate) + return 1; todo = count; done = 0; @@ -2619,6 +2635,7 @@ d->cancel = 1; ret = 0; goto ex; } + ret = 1; ex:; BURN_FREE_MEM(msg); return ret; @@ -2794,6 +2811,7 @@ d->write = burn_stdio_mmc_dummy_write; else d->write = burn_stdio_mmc_write; + d->do_simulate = o->simulate; d->sync_cache = burn_stdio_mmc_sync_cache; burn_stdio_slowdown(d, &prev_time, 0, 1); /* initialize */ @@ -3289,7 +3307,9 @@ rpt += d->buffer->bytes; d->buffer->sectors = chunksize; d->nwa = start; - if(d->drive_role == 1) { + if(d->do_simulate) { + err = 0; + } else if(d->drive_role == 1) { err = d->write(d, d->nwa, d->buffer); } else { ret = burn_stdio_write(fd, (char *) d->buffer->data, @@ -3309,7 +3329,9 @@ if(d->drive_role == 1) d->needs_sync_cache = 1; if(flag & 1) { - if(d->drive_role == 1) + if(d->do_simulate) { + ; + } else if(d->drive_role == 1) d->sync_cache(d); else burn_stdio_sync_cache(fd, d, 2);