From 0c47e293291a978b77489b79f125fbdaa6eb4eca Mon Sep 17 00:00:00 2001 From: Markus Brueffer Date: Thu, 18 Mar 2004 17:41:41 +0000 Subject: - Update to 0.11.6 - remove trailing ^M in pkg-plist PR: ports/64201 Submitted by: Heiner Eichmann Approved by: arved (mentor) --- sysutils/k3b/Makefile | 9 +- sysutils/k3b/distinfo | 2 +- sysutils/k3b/files/patch-src-Makefile.in | 14 +- .../patch-src-audiodecoding-mp3-k3bmaddecoder.cpp | 124 --- .../k3b/files/patch-src-core-device-k3bdevice.cpp | 912 --------------------- .../k3b/files/patch-src-core-device-k3bdevice.h | 50 -- .../patch-src-core-device-k3bdevicemanager.cpp | 541 ------------ .../files/patch-src-core-device-k3bdevicemanager.h | 43 - .../files/patch-src-core-device-k3bscsicommand.cpp | 127 --- .../files/patch-src-core-device-k3bscsicommand.h | 51 -- .../patch-src-core-k3bdefaultexternalprograms.cpp | 81 +- sysutils/k3b/files/patch-src-core-k3bglobals.cpp | 16 - sysutils/k3b/files/patch-src-core-k3bprocess.cpp | 20 +- sysutils/k3b/files/patch-src-core-k3bprocess.h | 9 +- sysutils/k3b/files/patch-src-device-k3bdevice.cpp | 26 + sysutils/k3b/files/patch-src-device-k3bdevice.h | 13 + .../files/patch-src-device-k3bdevicemanager.cpp | 289 +++++++ .../k3b/files/patch-src-device-k3bdevicemanager.h | 43 + .../k3b/files/patch-src-device-k3bscsicommand.cpp | 142 ++++ .../k3b/files/patch-src-device-k3bscsicommand.h | 84 ++ sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp | 6 +- sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp | 30 +- sysutils/k3b/pkg-descr | 9 +- sysutils/k3b/pkg-message | 11 +- sysutils/k3b/pkg-plist | 401 +++++---- 25 files changed, 901 insertions(+), 2152 deletions(-) delete mode 100644 sysutils/k3b/files/patch-src-audiodecoding-mp3-k3bmaddecoder.cpp delete mode 100644 sysutils/k3b/files/patch-src-core-device-k3bdevice.cpp delete mode 100644 sysutils/k3b/files/patch-src-core-device-k3bdevice.h delete mode 100644 sysutils/k3b/files/patch-src-core-device-k3bdevicemanager.cpp delete mode 100644 sysutils/k3b/files/patch-src-core-device-k3bdevicemanager.h delete mode 100644 sysutils/k3b/files/patch-src-core-device-k3bscsicommand.cpp delete mode 100644 sysutils/k3b/files/patch-src-core-device-k3bscsicommand.h delete mode 100644 sysutils/k3b/files/patch-src-core-k3bglobals.cpp create mode 100644 sysutils/k3b/files/patch-src-device-k3bdevice.cpp create mode 100644 sysutils/k3b/files/patch-src-device-k3bdevice.h create mode 100644 sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp create mode 100644 sysutils/k3b/files/patch-src-device-k3bdevicemanager.h create mode 100644 sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp create mode 100644 sysutils/k3b/files/patch-src-device-k3bscsicommand.h (limited to 'sysutils/k3b') diff --git a/sysutils/k3b/Makefile b/sysutils/k3b/Makefile index f505f3fb5659..779acd569d9f 100644 --- a/sysutils/k3b/Makefile +++ b/sysutils/k3b/Makefile @@ -6,8 +6,7 @@ # PORTNAME= k3b -PORTVERSION= 0.10.3 -PORTREVISION= 1 +PORTVERSION= 0.11.6 CATEGORIES= sysutils multimedia kde MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ${PORTNAME} @@ -19,13 +18,15 @@ RUN_DEPENDS= cdrecord:${PORTSDIR}/sysutils/cdrtools \ cdrdao:${PORTSDIR}/sysutils/cdrdao \ mkisofs:${PORTSDIR}/sysutils/mkisofs LIB_DEPENDS= mad:${PORTSDIR}/audio/libmad \ - ogg:$(PORTSDIR)/audio/libogg + vorbis:${PORTSDIR}/audio/libvorbis \ + FLAC:${PORTSDIR}/audio/flac +USE_BZIP2= yes GNU_CONFIGURE= yes CONFIGURE_TARGET=--build=${MACHINE_ARCH}-portbld-freebsd${OSREL} CONFIGURE_ARGS= --with-k3bsetup=no USE_GMAKE= yes -USE_LIBTOOL_VER=13 +USE_LIBTOOL= yes INSTALLS_SHLIB= yes USE_KDELIBS_VER= 3 USE_REINPLACE= yes diff --git a/sysutils/k3b/distinfo b/sysutils/k3b/distinfo index 9b1420d69d20..e5a440541f5b 100644 --- a/sysutils/k3b/distinfo +++ b/sysutils/k3b/distinfo @@ -1 +1 @@ -MD5 (k3b-0.10.3.tar.gz) = 41a21815c2edaa3aaaa55bb922e71750 +MD5 (k3b-0.11.6.tar.bz2) = 0015b9ad457713425464dbdad6a15ab9 diff --git a/sysutils/k3b/files/patch-src-Makefile.in b/sysutils/k3b/files/patch-src-Makefile.in index 42e55ed1de9d..bf6506bc152a 100644 --- a/sysutils/k3b/files/patch-src-Makefile.in +++ b/sysutils/k3b/files/patch-src-Makefile.in @@ -1,11 +1,11 @@ ---- src/Makefile.in.orig Thu Nov 6 09:01:00 2003 -+++ src/Makefile.in Fri Nov 7 12:35:44 2003 -@@ -281,7 +281,7 @@ +--- src/Makefile.in.orig Sun Feb 29 19:38:32 2004 ++++ src/Makefile.in Mon Mar 8 15:40:08 2004 +@@ -286,7 +286,7 @@ #>+ 1 - k3b_SOURCES=k3bwelcomewidget.cpp k3bapplication.cpp k3bdiroperator.cpp kdndfileview.cpp k3bfiletreeview.cpp k3bcddbmultientriesdialog.cpp k3baudioplayer.cpp k3bprojecttabbar.cpp k3bprojecttabwidget.cpp k3bsplash.cpp k3bblankingdialog.cpp k3bfileview.cpp k3bdirview.cpp k3btoolbox.cpp k3b.cpp main.cpp k3bstatusbarmanager.cpp k3bfiletreecombobox.cpp k3breadcdreader.cpp k3binterface.cpp k3bprojectinterface.cpp k3bsystemproblemdialog.cpp k3binterface_skel.cpp k3bprojectinterface_skel.cpp + k3b_SOURCES=k3bwelcomewidget.cpp k3bapplication.cpp k3bdiroperator.cpp kdndfileview.cpp k3bfiletreeview.cpp k3bcddbmultientriesdialog.cpp k3baudioplayer.cpp k3bprojecttabbar.cpp k3bprojecttabwidget.cpp k3bsplash.cpp k3bblankingdialog.cpp k3bfileview.cpp k3bdirview.cpp k3btoolbox.cpp k3b.cpp main.cpp k3bstatusbarmanager.cpp k3bfiletreecombobox.cpp k3breadcdreader.cpp k3binterface.cpp k3bprojectinterface.cpp k3bsystemproblemdialog.cpp k3bcdcontentsview.cpp k3bwriterspeedverificationdialog.cpp k3bdatatrackreader.cpp k3binterface_skel.cpp k3bprojectinterface_skel.cpp --k3b_LDADD = ./cdinfo/libcdinfo.la ./option/liboption.la ./rip/librip.la ./cdcopy/libcdcopy.la ./dvdcopy/libdvdcopy.la ./cdclone/libcdclone.la ./videoEncoding/libvideoEncoding.la ./plugin/libk3bplugin.la $(ARTS_LIBS) -lkio -lkparts ./core/libk3bcore.la ./tools/libk3btools.la ./projects/libk3bproject.la ./images/libimagewriting.la -+k3b_LDADD = ./cdinfo/libcdinfo.la ./option/liboption.la ./rip/librip.la ./cdcopy/libcdcopy.la ./dvdcopy/libdvdcopy.la ./cdclone/libcdclone.la ./videoEncoding/libvideoEncoding.la ./plugin/libk3bplugin.la $(ARTS_LIBS) -lkio -lkparts -lcam ./core/libk3bcore.la ./tools/libk3btools.la ./projects/libk3bproject.la ./images/libimagewriting.la +-k3b_LDADD = ./cdinfo/libcdinfo.la ./option/liboption.la ./rip/librip.la ./cdcopy/libcdcopy.la ./dvdcopy/libdvdcopy.la ./videoEncoding/libvideoEncoding.la ./plugin/libk3bplugin.la $(ARTS_LIBS) -lkio -lkparts ./device/libk3bdevice.la ./core/libk3bcore.la ./tools/libk3btools.la ./projects/libk3bproject.la ./images/libimagewriting.la ++k3b_LDADD = ./cdinfo/libcdinfo.la ./option/liboption.la ./rip/librip.la ./cdcopy/libcdcopy.la ./dvdcopy/libdvdcopy.la ./videoEncoding/libvideoEncoding.la ./plugin/libk3bplugin.la $(ARTS_LIBS) -lkio -lkparts -lcam ./device/libk3bdevice.la ./core/libk3bcore.la ./tools/libk3btools.la ./projects/libk3bproject.la ./images/libimagewriting.la - SUBDIRS = core tools plugin projects cddb cdinfo option rip cdcopy cdclone images dvdcopy videoEncoding pics icons konqi mimetypes tests audiodecoding audioencoding sounds $(K3BSETUP1_BUILD) + SUBDIRS = device core tools plugin projects cddb cdinfo option rip cdcopy images dvdcopy videoEncoding pics icons konqi mimetypes tests audiodecoding audioencoding sounds $(K3BSETUP1_BUILD) diff --git a/sysutils/k3b/files/patch-src-audiodecoding-mp3-k3bmaddecoder.cpp b/sysutils/k3b/files/patch-src-audiodecoding-mp3-k3bmaddecoder.cpp deleted file mode 100644 index ab64d2773e8c..000000000000 --- a/sysutils/k3b/files/patch-src-audiodecoding-mp3-k3bmaddecoder.cpp +++ /dev/null @@ -1,124 +0,0 @@ ---- src/audiodecoding/mp3/k3bmaddecoder.cpp.orig Mon Sep 1 12:14:10 2003 -+++ src/audiodecoding/mp3/k3bmaddecoder.cpp Fri Nov 7 12:35:44 2003 -@@ -37,6 +37,8 @@ - #include - #include - #include -+#include -+#include - - #include - -@@ -716,23 +718,24 @@ - return false; - } - -- // there seem to be mp3 files starting with a lot of zeros -- // we try to skip these. -- // there might still be files with more than bufLen zeros... -- const int bufLen = 4096; -- char buf[bufLen]; -- if( f.readBlock( buf, bufLen ) < bufLen ) { -- kdDebug() << "(K3bMadDecoder) unable to read " << bufLen << " bytes from " << url.path() << endl; -+ // EXPERIMENTAL!!!!!!!! -+ -+ const int bufLen = f.size(); -+ const char * buf = (const char *)mmap(0, bufLen, PROT_READ, MAP_SHARED, f.handle(), 0); -+ if (buf == MAP_FAILED) -+ { -+ kdDebug() << "(K3bMp3Module) unable to read from " << url.path() << endl; - f.close(); - return false; - } -- f.close(); - - // skip any 0 - int i = 0; - while( i < bufLen && buf[i] == '\0' ) i++; - if( i == bufLen ) { - kdDebug() << "(K3bMadDecoder) only zeros found in the beginning of " << url.path() << endl; -+ munmap((void *)buf, bufLen); -+ f.close(); - return false; - } - -@@ -744,6 +747,8 @@ - ( (unsigned short)buf[i+3] < 0xff && (unsigned short)buf[i+4] < 0xff ) ) { - kdDebug() << "(K3bMadDecoder) found id3 magic: ID3 " - << (unsigned short)buf[i+3] << "." << (unsigned short)buf[i+4] << endl; -+ munmap((void *)buf, bufLen); -+ f.close(); - return true; - } - -@@ -756,15 +761,22 @@ - short m = (short)( buf[i+20] | (buf[i+21]<<8) ); - if( m == 80 ) { - kdDebug() << "(K3bMadDecoder) found RIFF MPEG magic." << endl; -+ munmap((void *)buf, bufLen); -+ f.close(); - return true; - } - else if( m == 85 ) { - kdDebug() << "(K3bMadDecoder) found RIFF MPEG III magic." << endl; -+ munmap((void *)buf, bufLen); -+ f.close(); - return true; - } -- else -+ else { -+ munmap((void *)buf, bufLen); -+ f.close(); - return false; - } -+ } - - - -@@ -775,16 +787,41 @@ - mad_stream_init( &stream ); - mad_header_init( &header ); - -- mad_stream_buffer( &stream, (unsigned char*)&buf[i], bufLen-i ); -- stream.error = MAD_ERROR_NONE; -+ mad_stream_buffer( &stream, (unsigned char*)buf, bufLen ); -+ unsigned long bitrate, kbps, count; -+ int vbr; -+ bitrate = kbps = count = vbr = 0; -+ mad_timer_t duration = mad_timer_zero; - bool success = true; -- if( mad_header_decode( &header, &stream ) ) { -+ while (1) { -+ if (mad_header_decode(&header, &stream) == -1) { -+ if (MAD_RECOVERABLE(stream.error)) -+ continue; -+ else -+ { -+ break; -+ } -+ } -+ if (bitrate && header.bitrate != bitrate) -+ vbr = 1; -+ -+ bitrate = header.bitrate; -+ -+ kbps += bitrate / 1000; -+ ++count; -+ -+ mad_timer_add(&duration, header.duration); -+ } -+ kbps = count?((kbps * 2) / count + 1) / 2 * (vbr ? -1 : 1):0; -+ kdDebug() << "(K3bMp3Module) File: " << url.path() << ", bitrate: " << kbps << ", duration: " << duration.seconds << "." << duration.fraction << endl; -+ if (duration.seconds == 0 || kbps == 0) -+ { - kdDebug() << "(K3bMadDecoder) could not find mpeg header." << endl; - success = false; - } - -- mad_header_finish( &header ); -- mad_stream_finish( &stream ); -+ munmap((void *)buf, bufLen); -+ f.close(); - - return success; - } diff --git a/sysutils/k3b/files/patch-src-core-device-k3bdevice.cpp b/sysutils/k3b/files/patch-src-core-device-k3bdevice.cpp deleted file mode 100644 index 449a87e89484..000000000000 --- a/sysutils/k3b/files/patch-src-core-device-k3bdevice.cpp +++ /dev/null @@ -1,912 +0,0 @@ ---- src/core/device/k3bdevice.cpp.orig Thu Oct 30 11:53:35 2003 -+++ src/core/device/k3bdevice.cpp Sat Nov 8 12:15:01 2003 -@@ -32,7 +32,9 @@ - #include - - #include -+#ifndef __FreeBSD__ - #include -+#endif - #include - #include - #include -@@ -40,6 +42,7 @@ - #include - #include - -+#ifndef __FreeBSD__ - #include - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,70) - typedef unsigned char u8; -@@ -48,6 +51,18 @@ - #include - #define __STRICT_ANSI__ - #include -+#else -+#include -+#include -+#include -+#define __BYTE_ORDER BYTE_ORDER -+#define __BIG_ENDIAN BIG_ENDIAN -+//#define CDROMEJECT CDIOCEJECT -+//#define CDROMCLOSETRAY CDIOCCLOSE -+#define CD_FRAMESIZE_RAW 2352 -+#include -+int bsd_open_close_device(int bus, int target, int lun, bool eject); -+#endif - - - -@@ -167,6 +182,7 @@ - { - kdDebug() << "(K3bCdDevice) " << blockDeviceName() << ": init()" << endl; - -+#ifndef __FreeBSD__ - if(open() < 0) - return false; - -@@ -175,10 +191,18 @@ - // we also query the mode page 2A and use the cdrom.h stuff to get as much information as possible - // - -+ // On BSD the device capabilities are already set by the devicemanager. So this code may -+ // find more capabilities -- if it works - d->deviceType = 0; -+#endif - d->supportedProfiles = 0; - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+ d->deviceType |= CDROM; -+#endif - unsigned char header[8]; - ::memset( header, 0, 8 ); - cmd[0] = 0x46; // GET CONFIGURATION -@@ -580,8 +604,16 @@ - int mm_cap_len = 0; - if( modeSense( &mm_cap_buffer, mm_cap_len, 0x2A ) ) { - mm_cap_page_2A* mm_p = (mm_cap_page_2A*)(mm_cap_buffer+8); -- if( mm_p->BUF ) d->burnfree = true; -- if( mm_p->cd_rw_write ) d->deviceType |= CDRW; -+ if( mm_p->BUF ) -+ { -+ kdDebug() << "(K3bCdDevice) ModeSense: burnfree." << endl; -+ d->burnfree = true; -+ } -+ if( mm_p->cd_rw_write ) -+ { -+ kdDebug() << "(K3bCdDevice) ModeSense: CDRW." << endl; -+ d->deviceType |= CDRW; -+ } - m_maxWriteSpeed = (int)( from2Byte(mm_p->max_write_speed) * 1024.0 / ( 2352.0 * 75.0 ) ); - m_maxReadSpeed = (int)( from2Byte(mm_p->max_read_speed) * 1024.0 / ( 2352.0 * 75.0 ) ); - -@@ -592,6 +624,7 @@ - } - - -+#ifndef __FreeBSD__ - - // - // This is the backup if the drive does not support the GET CONFIGURATION command -@@ -619,6 +652,7 @@ - if (drivetype & CDC_DVD) - d->deviceType |= DVD; - -+#endif - - if( writesCd() ) - checkWriteModes(); -@@ -642,10 +676,11 @@ - m_version = QString::fromLocal8Bit( (char*)(inq+32), 4 ).stripWhiteSpace(); - } - -+#ifndef __FreeBSD__ - close(); -+#endif - - d->interfaceType = interfaceType(); -- - return furtherInit(); - } - -@@ -649,6 +684,23 @@ - return furtherInit(); - } - -+void K3bCdDevice::CdDevice::guessProfiles() -+{ -+ if (!d->supportedProfiles) -+ { -+ kdDebug() << "(K3bCdDevice): no profiles found; setting them from device type = " << d->deviceType << endl; -+ if (d->deviceType & CDROM) d->supportedProfiles |= MEDIA_CD_ROM; -+ if (d->deviceType & CDR) d->supportedProfiles |= MEDIA_CD_R; -+ if (d->deviceType & CDRW) d->supportedProfiles |= MEDIA_CD_RW; -+ if (d->deviceType & DVDR) d->supportedProfiles |= MEDIA_DVD_R_SEQ; -+ if (d->deviceType & DVDRAM) d->supportedProfiles |= MEDIA_DVD_RAM; -+ if (d->deviceType & DVD) d->supportedProfiles |= MEDIA_DVD_ROM; -+ if (d->deviceType & DVDRW) d->supportedProfiles |= MEDIA_DVD_RW_OVWR | MEDIA_DVD_RW_SEQ;// ??? -+ if (d->deviceType & DVDPR) d->supportedProfiles |= MEDIA_DVD_PLUS_R; -+ if (d->deviceType & DVDPRW) d->supportedProfiles |= MEDIA_DVD_PLUS_RW; -+ } -+// case 0x11: d->supportedProfiles |= MEDIA_DVD_R_SEQ; -+} - - bool K3bCdDevice::CdDevice::furtherInit() - { -@@ -658,6 +710,7 @@ - - K3bCdDevice::CdDevice::interface K3bCdDevice::CdDevice::interfaceType() - { -+#ifndef __FreeBSD__ - if (d->interfaceType == OTHER) - { - // if the device is already opened we do not close it -@@ -680,6 +733,9 @@ - if( needToClose ) - close(); - } -+#else -+ d->interfaceType = SCSI; -+#endif - return d->interfaceType; - } - -@@ -826,7 +882,11 @@ - - unsigned char dvdheader[20]; - ::memset( dvdheader, 0, 20 ); -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0xad; // GPCMD_READ_DVD_STRUCTURE; - cmd[9] = 20; - if( cmd.transport( TR_DIR_READ, dvdheader, 20 ) ) { -@@ -846,6 +906,7 @@ - - int K3bCdDevice::CdDevice::isReady() const - { -+#ifndef __FreeBSD__ - // if the device is already opened we do not close it - // to allow fast multible method calls in a row - bool needToClose = !isOpen(); -@@ -905,6 +966,10 @@ - } - else - return 2; -+#else -+ ((CdDevice *)this)->refreshDeviceData(); -+ return m_driveReady; -+#endif - } - - -@@ -941,6 +1006,7 @@ - delete [] data; - } - else { -+#ifndef __FreeBSD__ - kdDebug() << "(K3bCdDevice::CdDevice) " << blockDeviceName() - << ": READ DISC INFORMATION failed. falling back to cdrom.h" << endl; - int drive_status = ::ioctl(d->deviceFd,CDROM_DRIVE_STATUS); -@@ -953,6 +1019,10 @@ - kdDebug() << "(K3bCdDevice::CdDevice) " << blockDeviceName() << ": No disk in drive" << endl; - ret = NO_DISK; - } -+#else -+ ((CdDevice *)this)->refreshDeviceData(); -+ ret = m_deviceStatus; -+#endif - } - - if( needToClose ) -@@ -1013,7 +1083,11 @@ - unsigned char header[2]; - ::memset( header, 0, 2 ); - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x51; // READ DISC INFORMATION - cmd[8] = 2; - -@@ -1199,6 +1273,7 @@ - bool readSuccess = true; - - if( !readSectorsRaw( data, lba, 1 ) ) { -+#ifndef __FreeBSD__ - kdDebug() << "(K3bCdDevice::CdDevice) " << blockDeviceName() - << ": MMC RAW READ failed. falling back to cdrom.h." << endl; - -@@ -1209,8 +1284,11 @@ - if( ::ioctl(d->deviceFd,CDROMREADRAW,data) == -1 ) { - kdDebug() << "(K3bCdDevice::CdDevice) " << blockDeviceName() - << ": could not get track header, (lba " << lba << ") ! " << strerror(errno) << endl; -+#endif - readSuccess = false; -+#ifndef __FreeBSD__ - } -+#endif - } - - if( readSuccess ) { -@@ -1556,7 +1634,7 @@ - bool success = true; - - toc.clear(); -- -+#ifndef __FreeBSD__ - struct cdrom_tochdr tochdr; - struct cdrom_tocentry tocentry; - -@@ -1642,6 +1720,10 @@ - else - success = false; - -+#else -+ ((CdDevice *)this)->refreshDeviceData(); -+ toc = m_toc; -+#endif - return success; - } - -@@ -1653,7 +1735,7 @@ - bool needToClose = !isOpen(); - - bool success = false; -- -+#ifndef __FreeBSD__ - if( open() != -1 ) { - // - // we probaly need to fixup the toc for multisession mixed-mode cds -@@ -1681,7 +1763,7 @@ - kdDebug() << "(K3bCdDevice::CdDevice) CDROMMULTISESSION failed." << endl; - } - } -- -+#endif - if( needToClose ) - close(); - -@@ -1692,17 +1774,25 @@ - bool K3bCdDevice::CdDevice::block( bool b ) const - { - if( open() != -1 ) { -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x1E; // ALLOW MEDIA REMOVAL - cmd[4] = b ? 0x1 : 0x0; - int r = cmd.transport(); - if( r ) { - kdDebug() << "(K3bCdDevice::CdDevice) MMC ALLOW MEDIA REMOVAL failed. Falling back to cdrom.h." << endl; -+#ifndef __FreeBSD__ - r = ::ioctl(d->deviceFd,CDROM_LOCKDOOR, b ? 1 : 0 ); -+#else -+ r = ::ioctl(d->deviceFd,b ? CDIOCPREVENT : CDIOCALLOW); -+#endif - } - - if( r ) -- kdDebug() << "(K3bCdDevice) Cannot block/unblock device " << devicename() << endl; -+ kdDebug() << "(K3bCdDevice) Cannot block/unblock device " << devicename() << ", errno: " << errno << endl; - - close(); - return ( r == 0 ); -@@ -1724,22 +1814,36 @@ - - return e; - } -+#ifndef __FreeBSD__ - else - return false; -+#else -+ ((CdDevice *)this)->refreshDeviceData(); -+ return m_rewritableCd; -+#endif - } - - bool K3bCdDevice::CdDevice::eject() const - { - block(false); - -+#ifndef __FreeBSD__ - if( open() != -1 ) { - ScsiCommand cmd( open() ); -+#else -+ if( true ) { -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x1B; // START/STOP UNIT - cmd[4] = 0x2; // LoEj = 1, Start = 0 - int r = cmd.transport(); - if( r ) { - kdDebug() << "(K3bCdDevice::CdDevice) MMC START/STOP UNIT failed. Falling back to cdrom.h." << endl; -+#ifndef __FreeBSD__ - r = ::ioctl( d->deviceFd, CDROMEJECT ); -+#else -+ r = bsd_open_close_device(m_bus, m_target, m_lun, true); -+#endif - } - - close(); -@@ -1752,14 +1856,23 @@ - - bool K3bCdDevice::CdDevice::load() const - { -+#ifndef __FreeBSD__ - if( open() != -1 ) { - ScsiCommand cmd( open() ); -+#else -+ if( true ) { -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x1B; // START/STOP UNIT - cmd[4] = 0x3; // LoEj = 1, Start = 1 - int r = cmd.transport(); - if( r ) { - kdDebug() << "(K3bCdDevice::CdDevice) MMC START/STOP UNIT failed. Falling back to cdrom.h." << endl; -+#ifndef __FreeBSD__ - r = ::ioctl( d->deviceFd, CDROMCLOSETRAY ); -+#else -+ r = bsd_open_close_device(m_bus, m_target, m_lun, false); -+#endif - } - close(); - return (r == 0); -@@ -1793,7 +1906,7 @@ - d->deviceFd = openDevice( QFile::encodeName(devicename()) ); - if (d->deviceFd < 0) - { -- kdDebug() << "(K3bCdDevice) Error: could not open device." << endl; -+ kdDebug() << "(K3bCdDevice) Error: could not open device: " << QFile::encodeName(devicename()) << endl; - d->deviceFd = -1; - } - -@@ -1915,7 +2028,11 @@ - unsigned char profileBuf[8]; - ::memset( profileBuf, 0, 8 ); - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x46; // GET CONFIGURATION - cmd[1] = 1; - cmd[8] = 8; -@@ -1974,7 +2091,11 @@ - } - inf.m_currentProfile = profile; - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - - if( inf.diskState() != STATE_NO_MEDIA ) { - -@@ -2037,6 +2158,33 @@ - - delete [] data; - } -+#ifdef __FreeBSD__ -+ else -+ { -+ ((CdDevice *)this)->refreshDeviceData(); -+ inf.m_rewritable = m_rewritableCd; -+ inf.m_numSessions = m_toc.size(); -+ inf.m_capacity = m_discSize; -+ inf.m_remaining = m_remainingSize; -+ inf.m_diskState = STATE_UNKNOWN; -+ inf.m_lastSessionState = STATE_UNKNOWN; -+ if (m_deviceStatus == EMPTY) -+ { -+ inf.m_diskState = STATE_EMPTY; -+ inf.m_lastSessionState = STATE_EMPTY; -+ } -+ else if (m_deviceStatus == APPENDABLE) -+ { -+ inf.m_diskState = STATE_INCOMPLETE; -+ inf.m_lastSessionState = STATE_INCOMPLETE; -+ } -+ else if (m_deviceStatus == COMPLETE) -+ { -+ inf.m_diskState = STATE_COMPLETE; -+ inf.m_lastSessionState = STATE_COMPLETE; -+ } -+ } -+#endif - - // - // Now we determine the size: -@@ -2085,7 +2233,7 @@ - if( cmd.transport( TR_DIR_READ, trackHeader, 32 ) ) { - kdDebug() << "(K3bCdDevice) READ_TRACK_INFORMATION failed." << endl; - kdDebug() << "(K3bCdDevice) getting disk size via toc." << endl; -- -+#ifndef __FreeBSD__ - // TODO: use readToc! - - struct cdrom_tocentry tocentry; -@@ -2097,6 +2245,11 @@ - inf.m_capacity = tocentry.cdte_addr.lba; - inf.m_capacity -= 1; // we need the last sector of the last track, not the first from the lead-out - } -+#else -+ ((CdDevice *)this)->refreshDeviceData(); -+ inf.m_capacity = m_discSize; -+ inf.m_capacity -= 1; -+#endif - } - else { - // not sure about this.... -@@ -2160,7 +2313,11 @@ - - unsigned char dvdheader[20]; - ::memset( dvdheader, 0, 20 ); -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0xad; // GPCMD_READ_DVD_STRUCTURE; - cmd[9] = 20; - if( cmd.transport( TR_DIR_READ, dvdheader, 20 ) ) { -@@ -2199,7 +2356,11 @@ - - bool success = true; - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x25; // READ CAPACITY - unsigned char buf[8]; - ::memset( buf, 0, 8 ); -@@ -2236,7 +2397,11 @@ - unsigned char header[4]; // for reading the size of the returned data - ::memset( header, 0, 4 ); - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x23; // GPCMD_READ_FORMAT_CAPACITIES; - cmd[8] = 4; - if( cmd.transport( TR_DIR_READ, header, 4 ) == 0 ) { -@@ -2324,7 +2489,11 @@ - unsigned char header[8]; - ::memset( header, 0, 8 ); - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x5A; // MODE SENSE - cmd[1] = 0x08; // Disable Block Descriptors - cmd[2] = page; -@@ -2362,7 +2531,11 @@ - - bool ret = false; - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x55; // MODE SELECT - cmd[1] = ( sp ? 1 : 0 ) | ( pf ? 0x10 : 0 ); - cmd[7] = pageLen>>8; -@@ -2486,7 +2659,11 @@ - unsigned char header[2]; - ::memset( header, 0, 2 ); - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0x43; // READ TOC/PMA/ATIP - cmd[1] = ( time ? 0x2 : 0x0 ); - cmd[2] = format & 0x0F; -@@ -2536,7 +2713,11 @@ - unsigned char header[8]; - ::memset( header, 0, 8 ); - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0xbd; // MECHANISM STATUS - cmd[8] = 8; // first we read the header - if( cmd.transport( TR_DIR_READ, header, 8 ) == 0 ) { -@@ -2640,7 +2821,11 @@ - - ::memset( data, 0, dataLen ); - -+#ifndef __FreeBSD__ - ScsiCommand cmd( open() ); -+#else -+ ScsiCommand cmd(m_passDevice); -+#endif - cmd[0] = 0xbe; // READ CD - cmd[1] = (sectorType<<2 & 0x1c) | ( dap ? 0x2 : 0x0 ); - cmd[2] = startAdress>>24; -@@ -2668,3 +2853,363 @@ - - return ret; - } -+#ifdef __FreeBSD__ -+void K3bDevice::CdDevice::refreshDeviceData() -+{ -+ // was it called within the last 3 seconds? -+ QDateTime now = QDateTime::currentDateTime(); -+ if (m_lastRefresh.isValid() && m_lastRefresh.secsTo(now) < 3) -+ return; // yes: use previous values -+ -+ m_driveReady = 0; -+ m_rewritableCd = 0; -+ m_discSize = 0; -+ m_remainingSize = 0; -+ m_deviceStatus = NO_INFO; -+ m_toc.clear(); -+ -+ KTempFile tmpfile; -+ tmpfile.setAutoDelete(true); -+ -+ // call cdrecord -toc to get the toc and to detect empty disks -+ QString call = "/bin/sh -c \"cdrecord -toc " + QString("dev=%1").arg( busTargetLun() ) + " > " + tmpfile.name() + " 2>&1 \""; -+ kdDebug() << "(K3bCdDevice) Reading Toc : " << call << endl; -+ system(call.latin1()); -+ -+ // read tmp file line by line -+ K3bTrack lastTrack; -+ bool firstEntry = true; -+ QFile tmp (tmpfile.name()); -+ if ( tmp.open( IO_ReadOnly ) ) -+ { -+ QTextStream stream( &tmp ); -+ bool done = false; -+ while ( !stream.eof() ) -+ { -+ QString str = stream.readLine(); -+ kdDebug() << "(K3bCdDevice): " << str << endl; -+ if (done) -+ continue; -+ // no disk inserted? -+ if ( str.startsWith( "cdrecord: No disk" ) ) -+ { -+ m_driveReady = NO_DISK; -+ kdDebug() << "(K3bCdDevice) No Toc Data!" << endl; -+ // close and delete tmp file -+ tmp.close(); -+ done = true; -+ continue; -+ } -+ // emoty disk inserted? -+ else if (str.startsWith("cdrecord: Cannot read TOC header")) -+ { -+ kdDebug() << "(K3bCdDevice) cd is empty" << endl; -+ m_driveReady = EMPTY; -+ } -+ // track data available? -+ if( str.startsWith("track:") ) -+ { -+ // cdrecord produces the following outout: -+ // lba: (<...>) adr: 1 control: mode: -+ // the last tracknumber will always be "lout", the leadout of the cd which we only use to determine the -+ // length of the last track -+ -+ // we just want the startSector, the trackType, and the trackMode -+ int start = 6; // skip the "track:" -+ start = str.find(":", start )+1; -+ int end = str.find( "(", start ); -+ -+ bool ok; -+ int startSec = str.mid( start, end-start ).toInt(&ok); -+ if( ok ) -+ { -+ start = str.find( "control:", start )+8; // skip the "control:" -+ end = str.find("mode:", start ); -+ int control = str.mid( start, end-start ).toInt(&ok); -+ if( ok ) -+ { -+ start = end + 6; -+ int mode = str.mid( start ).toInt(&ok); -+ if( ok ) -+ { -+ // all values have been determined -+ // since we need the start of the next track to determine the length we save the values -+ // in lastTrack and append the current lastTrack to the toc -+ -+ if( !firstEntry ) -+ { -+ m_toc.append( K3bTrack( lastTrack.firstSector(), startSec-1, lastTrack.type(), lastTrack.mode() ) ); -+ kdDebug() << "(K3bCDDevice) Found track: first sector: " << lastTrack.firstSector().toString() -+ << ", last sector: " << startSec-1 << ", type: " << lastTrack.type() -+ << ", mode: " << lastTrack.mode() << endl; -+ if (m_deviceStatus == EMPTY) -+ m_deviceStatus = APPENDABLE; -+ if( lastTrack.mode() == K3bTrack::MODE1 ) -+ m_deviceStatus = COMPLETE; -+ } -+ // now this is the meaning of control and mode: -+ // control (combination of the following) -+ // 0x01 - Audio with preemp -+ // 0x02 - Audio copy permitted -+ // 0x04 - Data track -+ // 0x08 - 4 channel audio -+ -+ // mode (only for data tracks) -+ // 1 - Mode 1 -+ // 2 - Mode 2 -+ -+ int trackType = 0; -+ int trackMode = K3bTrack::UNKNOWN; -+ if( control & 0x04 ) -+ { -+ trackType = K3bTrack::DATA; -+ if( mode == 1 ) -+ trackMode = K3bTrack::MODE1; -+ else if( mode == 2 ) -+ trackMode = K3bTrack::MODE2; -+ } -+ else -+ trackType = K3bTrack::AUDIO; -+ -+ lastTrack = K3bTrack( startSec, startSec, trackType, trackMode ); -+ firstEntry = false; -+ } -+ else -+ { -+ kdDebug() << "(K3bCdDevice) Could not parse mode of track: " << str.mid( start ) << endl; -+ } -+ } -+ else -+ { -+ kdDebug() << "(K3bCdDevice) Could not parse control of track: " << str.mid( start, end-start ) << endl; -+ } -+ } -+ else -+ { -+ kdDebug() << "(K3bCdDevice) Could not parse start sector of track: " << str.mid( start, end-start) << endl; -+ } -+ } -+ -+ } -+ // close and delete tmp file -+ tmp.close(); -+ -+ } -+ // skip further tests if there is no disk -+ if (m_driveReady != NO_DISK && m_driveReady != NO_INFO) -+ { -+ -+ KTempFile tmpfile2; -+ tmpfile2.setAutoDelete(true); -+ -+ // call cdrdao disk-info to get disk capacities, device status, and dsik type -+ call = "/bin/sh -c \"cdrdao disk-info --device " + QString("%1").arg( busTargetLun() ) + " --driver " + cdrdaoDriver() + " > " + tmpfile2.name() + " 2>&1 \""; -+ kdDebug() << "(K3bCdDevice) Reading remaining disk size : " << call << endl; -+ system(call.latin1()); -+ -+ // read tmp file line by line -+ QFile tmp2(tmpfile2.name()); -+ if ( tmp2.open( IO_ReadOnly ) ) -+ { -+ QTextStream stream( &tmp2 ); -+ while ( !stream.eof() ) -+ { -+ QString str = stream.readLine(); -+ kdDebug() << "(K3bCdDevice): " << str << endl; -+ -+ // remaining capacity available? -+ if ( str.contains( "Remaining Capacity :" ) ) -+ { -+ // cdrdao produces the following outout: -+ // ( blocks, MB) -+ -+ int start = str.find("(" )+1; -+ int end = str.find( " ", start ); -+ -+ bool ok; -+ int remaining = str.mid( start, end-start ).toInt(&ok); -+ if( ok ) -+ { -+ m_remainingSize = remaining-1; -+ } -+ else -+ kdDebug() << "(K3bCdDevice) Could not parse remaining time: " << str.mid( start, end-start) << endl; -+ } -+ -+ // total capacity available? -+ else if ( str.contains( "Total Capacity :" ) ) -+ { -+ // cdrdao produces the following outout: -+ //