aboutsummaryrefslogtreecommitdiff
path: root/sysutils
diff options
context:
space:
mode:
authorMark Linimon <linimon@FreeBSD.org>2004-05-28 05:52:01 +0000
committerMark Linimon <linimon@FreeBSD.org>2004-05-28 05:52:01 +0000
commit7b2a844d4f0ada056bd21e55082c6788546119b5 (patch)
tree2308a9c96cccba77806e86ba3c6f70895b454638 /sysutils
parent9fa169b13cbd59804f5d631000c9ddc8ac3663bc (diff)
downloadports-7b2a844d4f0ada056bd21e55082c6788546119b5.tar.gz
ports-7b2a844d4f0ada056bd21e55082c6788546119b5.zip
Notes
Diffstat (limited to 'sysutils')
-rw-r--r--sysutils/k3b-kde4/Makefile4
-rw-r--r--sysutils/k3b-kde4/distinfo3
-rw-r--r--sysutils/k3b-kde4/files/patch-src-Makefile.in6
-rw-r--r--sysutils/k3b-kde4/files/patch-src-core-k3bdefaultexternalprograms.cpp38
-rw-r--r--sysutils/k3b-kde4/files/patch-src-core-k3bprocess.cpp2
-rw-r--r--sysutils/k3b-kde4/files/patch-src-core-k3bprocess.h2
-rw-r--r--sysutils/k3b-kde4/files/patch-src-device-k3bdevice.cpp57
-rw-r--r--sysutils/k3b-kde4/files/patch-src-device-k3bdevice.h6
-rw-r--r--sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp303
-rw-r--r--sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.h38
-rw-r--r--sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.cpp127
-rw-r--r--sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.h41
-rw-r--r--sysutils/k3b-kde4/files/patch-src-rip-k3bdvdrippingprocess.cpp16
-rw-r--r--sysutils/k3b-kde4/files/patch-src-rip-k3bmovieview.cpp2
-rw-r--r--sysutils/k3b-kde4/files/patch-src-rip-k3btcwrapper.cpp11
-rw-r--r--sysutils/k3b-kde4/pkg-message30
-rw-r--r--sysutils/k3b-kde4/pkg-plist1
-rw-r--r--sysutils/k3b/Makefile4
-rw-r--r--sysutils/k3b/distinfo3
-rw-r--r--sysutils/k3b/files/patch-src-Makefile.in6
-rw-r--r--sysutils/k3b/files/patch-src-core-k3bdefaultexternalprograms.cpp38
-rw-r--r--sysutils/k3b/files/patch-src-core-k3bprocess.cpp2
-rw-r--r--sysutils/k3b/files/patch-src-core-k3bprocess.h2
-rw-r--r--sysutils/k3b/files/patch-src-device-k3bdevice.cpp57
-rw-r--r--sysutils/k3b/files/patch-src-device-k3bdevice.h6
-rw-r--r--sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp303
-rw-r--r--sysutils/k3b/files/patch-src-device-k3bdevicemanager.h38
-rw-r--r--sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp127
-rw-r--r--sysutils/k3b/files/patch-src-device-k3bscsicommand.h41
-rw-r--r--sysutils/k3b/files/patch-src-rip-k3bdvdrippingprocess.cpp16
-rw-r--r--sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp2
-rw-r--r--sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp11
-rw-r--r--sysutils/k3b/pkg-message30
-rw-r--r--sysutils/k3b/pkg-plist1
34 files changed, 720 insertions, 654 deletions
diff --git a/sysutils/k3b-kde4/Makefile b/sysutils/k3b-kde4/Makefile
index 7601b89875f6..7c18bbbb8c88 100644
--- a/sysutils/k3b-kde4/Makefile
+++ b/sysutils/k3b-kde4/Makefile
@@ -6,8 +6,7 @@
#
PORTNAME= k3b
-PORTVERSION= 0.11.6
-PORTREVISION= 1
+PORTVERSION= 0.11.9
CATEGORIES= sysutils multimedia kde
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= ${PORTNAME}
@@ -19,6 +18,7 @@ RUN_DEPENDS= cdrecord:${PORTSDIR}/sysutils/cdrtools \
cdrdao:${PORTSDIR}/sysutils/cdrdao \
mkisofs:${PORTSDIR}/sysutils/mkisofs
LIB_DEPENDS= mad:${PORTSDIR}/audio/libmad \
+ id3tag:${PORTSDIR}/audio/libid3tag \
vorbis:${PORTSDIR}/audio/libvorbis \
FLAC:${PORTSDIR}/audio/flac
diff --git a/sysutils/k3b-kde4/distinfo b/sysutils/k3b-kde4/distinfo
index e5a440541f5b..f87a9ba30f2e 100644
--- a/sysutils/k3b-kde4/distinfo
+++ b/sysutils/k3b-kde4/distinfo
@@ -1 +1,2 @@
-MD5 (k3b-0.11.6.tar.bz2) = 0015b9ad457713425464dbdad6a15ab9
+MD5 (k3b-0.11.9.tar.bz2) = 88f46a5cfbda5fa89b4bfee504567df1
+SIZE (k3b-0.11.9.tar.bz2) = 3217141
diff --git a/sysutils/k3b-kde4/files/patch-src-Makefile.in b/sysutils/k3b-kde4/files/patch-src-Makefile.in
index bf6506bc152a..c3dd4bab796b 100644
--- a/sysutils/k3b-kde4/files/patch-src-Makefile.in
+++ b/sysutils/k3b-kde4/files/patch-src-Makefile.in
@@ -1,6 +1,6 @@
---- 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 @@
+--- src/Makefile.in.orig Mon Mar 29 20:04:54 2004
++++ src/Makefile.in Tue May 11 22:57:03 2004
+@@ -272,7 +272,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 k3bcdcontentsview.cpp k3bwriterspeedverificationdialog.cpp k3bdatatrackreader.cpp k3binterface_skel.cpp k3bprojectinterface_skel.cpp
diff --git a/sysutils/k3b-kde4/files/patch-src-core-k3bdefaultexternalprograms.cpp b/sysutils/k3b-kde4/files/patch-src-core-k3bdefaultexternalprograms.cpp
index 008a58d004fe..3fe07352d47f 100644
--- a/sysutils/k3b-kde4/files/patch-src-core-k3bdefaultexternalprograms.cpp
+++ b/sysutils/k3b-kde4/files/patch-src-core-k3bdefaultexternalprograms.cpp
@@ -1,6 +1,6 @@
---- src/core/k3bdefaultexternalprograms.cpp.orig Wed Jan 21 11:20:10 2004
-+++ src/core/k3bdefaultexternalprograms.cpp Fri Feb 13 21:03:38 2004
-@@ -28,6 +28,7 @@
+--- src/core/k3bdefaultexternalprograms.cpp.orig Mon Mar 22 18:13:21 2004
++++ src/core/k3bdefaultexternalprograms.cpp Tue May 11 22:57:03 2004
+@@ -30,6 +30,7 @@
#include <unistd.h>
#include <sys/stat.h>
#include <stdlib.h>
@@ -8,7 +8,7 @@
-@@ -89,7 +90,7 @@
+@@ -123,7 +124,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -17,7 +17,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path << "-version";
-@@ -128,7 +129,7 @@
+@@ -162,7 +163,7 @@
// probe features
@@ -26,7 +26,7 @@
out.setProcess( &fp );
fp << path << "-help";
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -200,7 +201,7 @@
+@@ -236,7 +237,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -35,7 +35,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path << "-version";
-@@ -229,7 +230,7 @@
+@@ -265,7 +266,7 @@
// probe features
@@ -44,7 +44,7 @@
out.setProcess( &fp );
fp << path << "-help";
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -285,7 +286,7 @@
+@@ -321,7 +322,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -53,7 +53,7 @@
vp << path << "-version";
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -313,7 +314,7 @@
+@@ -349,7 +350,7 @@
// probe features
@@ -62,7 +62,7 @@
fp << path << "-help";
out.setProcess( &fp );
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -374,7 +375,7 @@
+@@ -410,7 +411,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -71,7 +71,7 @@
vp << path << "-version";
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -402,7 +403,7 @@
+@@ -438,7 +439,7 @@
// probe features
@@ -80,7 +80,7 @@
fp << path << "-help";
out.setProcess( &fp );
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -462,7 +463,7 @@
+@@ -498,7 +499,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -89,7 +89,7 @@
vp << path ;
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -490,7 +491,7 @@
+@@ -530,7 +531,7 @@
// probe features
@@ -98,7 +98,7 @@
fp << path << "write" << "-h";
out.setProcess( &fp );
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -556,7 +557,7 @@
+@@ -599,7 +600,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -107,7 +107,7 @@
vp << path ;
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -610,7 +611,7 @@
+@@ -653,7 +654,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -116,7 +116,7 @@
vp << path << "-V";
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -667,7 +668,7 @@
+@@ -710,7 +711,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -125,7 +125,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path << "--version";
-@@ -726,7 +727,7 @@
+@@ -769,7 +770,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -134,7 +134,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path << "-version";
-@@ -795,7 +796,7 @@
+@@ -838,7 +839,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -143,7 +143,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path;
-@@ -868,7 +869,7 @@
+@@ -911,7 +912,7 @@
K3bExternalBin* bin = 0;
// probe version
diff --git a/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.cpp b/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.cpp
index 14543eb14ea8..425eec00ad79 100644
--- a/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.cpp
+++ b/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.cpp
@@ -1,5 +1,5 @@
--- src/core/k3bprocess.cpp.orig Sun Feb 1 09:18:58 2004
-+++ src/core/k3bprocess.cpp Fri Feb 13 21:03:38 2004
++++ src/core/k3bprocess.cpp Tue May 11 22:57:03 2004
@@ -28,6 +28,60 @@
#include <unistd.h>
#include <stdio.h>
diff --git a/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.h b/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.h
index f4f96946d694..10fae690100f 100644
--- a/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.h
+++ b/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.h
@@ -1,5 +1,5 @@
--- src/core/k3bprocess.h.orig Tue Jan 27 09:19:13 2004
-+++ src/core/k3bprocess.h Fri Feb 13 21:03:38 2004
++++ src/core/k3bprocess.h Tue May 11 22:57:03 2004
@@ -194,4 +194,21 @@
KProcess* m_process;
};
diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.cpp b/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.cpp
index c3e8d0ce63d7..5315827ee675 100644
--- a/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.cpp
+++ b/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.cpp
@@ -1,5 +1,5 @@
---- src/device/k3bdevice.cpp.orig Thu Feb 12 11:21:15 2004
-+++ src/device/k3bdevice.cpp Fri Feb 13 21:03:38 2004
+--- src/device/k3bdevice.cpp.orig Sun Mar 14 17:35:20 2004
++++ src/device/k3bdevice.cpp Mon May 24 23:31:19 2004
@@ -56,6 +56,12 @@
#endif // Q_OS_LINUX
@@ -24,3 +24,56 @@
//
+@@ -192,6 +200,7 @@
+ unsigned char header[2048];
+ ::memset( header, 0, 2048 );
+
++ cmd.clear();
+ cmd[0] = MMC::GET_CONFIGURATION;
+ cmd[8] = 8;
+ if( cmd.transport( TR_DIR_READ, header, 8 ) ) {
+@@ -733,6 +742,14 @@
+ m_bufferSize = 1024;
+ d->burnfree = false;
+ }
++ else if( description().startsWith("CD-R56S") ) {
++ m_writeModes |= TAO;
++ d->deviceType |= CDROM|CDR;
++ m_maxWriteSpeed = 6;
++ m_maxReadSpeed = 24;
++ m_bufferSize = 1302;
++ d->burnfree = false;
++ }
+ }
+ else if( vendor().startsWith("MATSHITA") ) {
+ if( description().startsWith("CD-R CW-7501") ) {
+@@ -2317,10 +2334,12 @@
+ {
+ // if the device is already opened we do not close it
+ // to allow fast multible method calls in a row
++#ifndef __FreeBSD__
+ bool needToClose = !isOpen();
+
+ if (open() < 0)
+ return;
++#endif
+
+ // header size is 8
+ unsigned char* buffer = 0;
+@@ -2406,13 +2425,16 @@
+ delete [] buffer;
+ }
+
++#ifndef __FreeBSD__
+ if( needToClose )
+ close();
++#endif
+ }
+
+
+ bool K3bCdDevice::CdDevice::readTocPmaAtip( unsigned char** data, int& dataLen, int format, bool time, int track ) const
+ {
++ kdDebug() << "(K3bCdDevice::CdDevice) readTocPmaAtip started, format:" << format << ", time: " << time << ", track: " << track << endl;
+ unsigned char header[2048];
+ ::memset( header, 0, 2048 );
+
diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.h b/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.h
index ecb893f0d514..836458ced45e 100644
--- a/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.h
+++ b/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.h
@@ -1,6 +1,6 @@
---- src/device/k3bdevice.h.orig Fri Jan 30 11:28:15 2004
-+++ src/device/k3bdevice.h Fri Feb 13 21:03:38 2004
-@@ -654,6 +654,10 @@
+--- src/device/k3bdevice.h.orig Sun Mar 14 17:35:20 2004
++++ src/device/k3bdevice.h Tue May 11 22:57:03 2004
+@@ -661,6 +661,10 @@
class Private;
Private* d;
diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp b/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp
index 75ba9c14b38f..7b40314e293a 100644
--- a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp
+++ b/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp
@@ -1,5 +1,5 @@
---- src/device/k3bdevicemanager.cpp.orig Wed Jan 21 11:20:10 2004
-+++ src/device/k3bdevicemanager.cpp Fri Feb 13 21:03:38 2004
+--- src/device/k3bdevicemanager.cpp.orig Sun Feb 29 13:52:41 2004
++++ src/device/k3bdevicemanager.cpp Tue May 11 22:57:03 2004
@@ -49,6 +49,12 @@
#include <sys/stat.h>
#include <sys/ioctl.h>
@@ -13,7 +13,7 @@
#ifdef Q_OS_LINUX
-@@ -196,6 +202,22 @@
+@@ -196,6 +202,13 @@
{
m_foundDevices = 0;
@@ -22,21 +22,12 @@
+// and asks their properties. If they are indeed cd drives, they are added to a device list. This does not work
+// on FreeBSD (no corresponding ioctls). Here cdrecord is asked for a list of scsi device, which work as cd
+// drives. The device points of those devices are added to the device list.
-+ bsd_scan_devices(false);
-+ kdDebug() << "(K3bDeviceManager) analyze found device" << endl;
-+ for ( QValueList<BSDDevice>::iterator it = m_devices.begin(); it != m_devices.end(); ++it )
-+ {
-+ if( addDevice( (*it).m_name ) )
-+ {
-+ kdDebug() << "(K3bDeviceManager) Device " << (*it).m_name << " added" << endl;
-+ m_foundDevices++;
-+ }
-+ }
++ bsd_scan_devices();
+#else
QFile info("/proc/sys/dev/cdrom/info");
QString line,devstring;
info.open(IO_ReadOnly);
-@@ -286,6 +308,7 @@
+@@ -286,6 +299,7 @@
// m_foundDevices++;
// }
@@ -44,7 +35,7 @@
scanFstab();
return m_foundDevices;
-@@ -427,6 +450,7 @@
+@@ -427,6 +441,7 @@
bool K3bCdDevice::DeviceManager::testForCdrom(const QString& devicename)
{
bool ret = false;
@@ -52,7 +43,7 @@
int cdromfd = K3bCdDevice::openDevice( devicename.ascii() );
if (cdromfd < 0) {
kdDebug() << "could not open device " << devicename << " (" << strerror(errno) << ")" << endl;
-@@ -467,11 +491,51 @@
+@@ -467,11 +482,36 @@
}
::close( cdromfd );
@@ -66,45 +57,30 @@
+// this piece of code extracts some device parameter, like scsi or ide device. The whole process
+// fails on FreeBSD. Here the device name is simply looked up in a list of devices found by a
+// call of cdrecord --scanbus.
-+ K3bDevice* device = 0;
-+ if (!m_lastRefresh.isValid())
-+ bsd_scan_devices(false);
-+ bool found = false;
-+ for ( QValueList<BSDDevice>::iterator it = m_devices.begin(); it != m_devices.end(); ++it )
-+ {
-+ if( (*it).m_name == devicename )
-+ {
-+ device = new K3bDevice((*it).m_name.latin1());
-+ device->m_bus = (*it).m_bus;
-+ device->m_target = (*it).m_target;
-+ device->m_lun = (*it).m_lun;
-+ device->m_passDevice = (*it).m_passDevice;
-+ device->m_vendor = (*it).m_vendor;
-+ device->m_description = (*it).m_product;
-+ device->m_version = (*it).m_revision;
-+ found = true;
-+ break;
-+ }
-+ }
-+ if (!found)
-+ {
++ K3bDevice* device = findDevice(devicename);
++ if (device)
++ return 0;
+ // resolve all symlinks
+ QString resolved = resolveSymLink( devicename );
+ kdDebug() << "(K3bDeviceManager) " << devicename << " resolved to " << resolved << endl;
-+ int bus, target, lun;
-+ if( K3bDevice* oldDev = findDevice( bus, target, lun ) )
++ if( K3bDevice* oldDev = findDevice( resolved ) )
+ {
-+ kdDebug() << "(K3bDeviceManager) dev already found" << endl;
-+ oldDev->addDeviceNode( resolved );
++ kdDebug() << "(K3bDeviceManager) dev already found" << endl;
++ oldDev->addDeviceNode( resolved );
++ return 0;
+ }
-+ return 0;
-+ }
++ device = new K3bDevice(resolved.latin1());
++ return addDevice( device );
++}
+
++K3bDevice* K3bCdDevice::DeviceManager::addDevice( CdDevice* device )
++{
++ const QString devicename = device->devicename();
+#else
K3bDevice* device = 0;
// resolve all symlinks
-@@ -503,6 +567,7 @@
+@@ -503,6 +543,7 @@
device->m_target = target;
device->m_lun = lun;
}
@@ -112,7 +88,7 @@
if( !device->init() ) {
kdDebug() << "Could not initialize device " << devicename << endl;
-@@ -578,9 +643,20 @@
+@@ -578,9 +619,20 @@
if( K3bDevice* dev = findDevice( resolveSymLink(md) ) )
{
@@ -133,7 +109,7 @@
dev->setMountDevice( md );
dev->m_supermount = supermount;
}
-@@ -589,6 +665,8 @@
+@@ -589,6 +641,8 @@
{
// compare bus, id, lun since the same device can for example be
// determined as /dev/srX or /dev/scdX
@@ -142,7 +118,7 @@
int bus = -1, id = -1, lun = -1;
if( determineBusIdLun( mountInfo->fs_spec, bus, id, lun ) ) {
if( K3bDevice* dev = findDevice( bus, id, lun ) ) {
-@@ -599,6 +677,17 @@
+@@ -599,6 +653,17 @@
}
}
}
@@ -160,129 +136,134 @@
}
-@@ -673,5 +762,126 @@
+@@ -674,5 +739,131 @@
return QString::fromLatin1( resolved );
}
+
+#ifdef __FreeBSD__
-+// Calls "camcontrol devlist" to get a list of all available cd devices.
-+// The sudo flag indicates, that "camcontrol devlist" should be
-+// called. This is tried, if bsd_scan_devices(false) fails.
-+// The result of the scan ist stored in m_devices. If within 3
-+// seconds after the last call to bsd_scan_devices this function
-+// is called again, the last result is used (prevents to call
-+// camcontrol several times within a short time).
-+void K3bCdDevice::DeviceManager::bsd_scan_devices(bool sudo)
++#include <cam/cam.h>
++#include <cam/scsi/scsi_pass.h>
++#include <camlib.h>
++void K3bCdDevice::DeviceManager::bsd_scan_devices()
+{
-+ QDateTime now = QDateTime::currentDateTime();
-+ if (m_lastRefresh.isValid() && m_lastRefresh.secsTo(now) < 3)
-+ return;
-+ m_lastRefresh = now;
-+ m_devices.clear();
-+ kdDebug() << "(K3bDeviceManager) Scanning for devices: " << sudo << endl;
-+ KTempFile tmpfile;
-+ tmpfile.setAutoDelete(true);
++ union ccb ccb;
++ int fd, i;
++ int need_close = 0;
++ int skip_device = 0;
++ int bus, target, lun;
++ QString dev1, dev2;
++
++ if ((fd = open(XPT_DEVICE, O_RDWR)) == -1)
++ {
++ kdDebug() << "couldn't open %s " << XPT_DEVICE << endl;
++ return;
++ }
++
++ memset(&ccb, 0, sizeof(ccb));
++
++ ccb.ccb_h.func_code = XPT_DEV_MATCH;
++ char buffer[100*sizeof(struct dev_match_result)];
++ ccb.cdm.match_buf_len = 100*sizeof(struct dev_match_result);
++ ccb.cdm.matches = (struct dev_match_result *)buffer;
++ ccb.cdm.num_matches = 0;
++ ccb.cdm.num_patterns = 0;
++ ccb.cdm.pattern_buf_len = 0;
++ do {
++ if (ioctl(fd, CAMIOCOMMAND, &ccb) == -1) {
++ kdDebug() << "(bsd_scan_devices) error sending CAMIOCOMMAND ioctl: " << errno << endl;
++ break;
++ }
++
++ if ((ccb.ccb_h.status != CAM_REQ_CMP)
++ || ((ccb.cdm.status != CAM_DEV_MATCH_LAST) && (ccb.cdm.status != CAM_DEV_MATCH_MORE))) {
++ kdDebug() << "(bsd_scan_devices) got CAM error " << ccb.ccb_h.status << ", CDM error %d" << ccb.cdm.status << endl;
++ break;
++ }
++ kdDebug() << "(bsd_scan_devices) number of matches " << (int)ccb.cdm.num_matches << endl;
++ for (int i = 0; i < (int)ccb.cdm.num_matches; i++) {
++ switch (ccb.cdm.matches[i].type) {
++ case DEV_MATCH_DEVICE: {
++ struct device_match_result *dev_result = &ccb.cdm.matches[i].result.device_result;
++
++ if (dev_result->flags & DEV_RESULT_UNCONFIGURED)
++ {
++ skip_device = 1;
++ break;
++ }
++ else
++ skip_device = 0;
++ if (need_close)
++ {
++ QString pass = dev1;
++ QString dev = "/dev/" + dev2;
++ if (dev2.startsWith("pass"))
++ {
++ pass = dev2;
++ dev = "/dev/" + dev1;
++ }
++#if __FreeBSD_version < 500100
++ dev += "c";
++#endif
+
-+ // create call
-+ QString call = "/bin/sh -c \"";
-+ if (sudo)
-+ call += "sudo ";
-+ call += "camcontrol devlist > " + tmpfile.name() + " 2>&1 \"";
-+ kdDebug() << "(K3bDeviceManager) Reading device list : " << call << endl;
-+ if (system(call.latin1()))
-+ {
-+ if (!sudo)
-+ {
-+ m_lastRefresh = m_lastRefresh.addDays(-1);
-+ bsd_scan_devices(true);
-+ }
-+ return;
-+ }
++ K3bDevice* device = new K3bDevice(dev.latin1());
++ device->m_bus = bus;
++ device->m_target = target;
++ device->m_lun = lun;
++ device->m_passDevice = "/dev/" + pass;
++ kdDebug() << "(bsd_scan_devices) add device " << dev << ":" << bus << ":" << target << ":" << lun << endl;
++ addDevice(device);
++ need_close = 0;
++ }
++ bus = dev_result->path_id;
++ target = dev_result->target_id;
++ lun = dev_result->target_lun;
+
-+ // read tmp file line by line
-+ QFile tmp (tmpfile.name());
-+ if ( tmp.open( IO_ReadOnly ) )
-+ {
-+ QTextStream stream( &tmp );
-+ while ( !stream.eof() )
++ need_close = 1;
++
++ break;
++ }
++ case DEV_MATCH_PERIPH: {
++ struct periph_match_result *periph_result = &ccb.cdm.matches[i].result.periph_result;
++
++ if (skip_device != 0)
++ break;
++
++ if (need_close > 1)
++ dev1 = periph_result->periph_name + QString::number(periph_result->unit_number);
++ else
++ dev2 = periph_result->periph_name + QString::number(periph_result->unit_number);
++
++ need_close++;
++ break;
++ }
++ }
++ }
++
++ } while ((ccb.ccb_h.status == CAM_REQ_CMP)
++ && (ccb.cdm.status == CAM_DEV_MATCH_MORE));
++
++ if (need_close)
+ {
-+ QString str = stream.readLine();
-+ if (!str.startsWith("<"))
-+ continue;
-+ str.remove(0,1);
-+ int i = str.find(">");
-+ if (i < 0)
-+ continue;
-+ QStringList details = QStringList::split(" ", str.left(i));
-+ i = str.find("at scbus", i);
-+ if (i < 0)
-+ continue;
-+ str.remove(0, i+8);
-+ i = str.find(" ");
-+ if (i < 0)
-+ continue;
-+ bool ok;
-+ int bus = str.left(i).toInt(&ok);
-+ if (!ok)
-+ continue;
-+ i = str.find("target ", i);
-+ if (i < 0)
-+ continue;
-+ str.remove(0, i+7);
-+ i = str.find(" ");
-+ if (i < 0)
-+ continue;
-+ int target = str.left(i).toInt(&ok);
-+ if (!ok)
-+ continue;
-+ i = str.find("lun ", i);
-+ if (i < 0)
-+ continue;
-+ str.remove(0, i+4);
-+ i = str.find(" ");
-+ if (i < 0)
-+ continue;
-+ int lun = str.left(i).toInt(&ok);
-+ if (!ok)
-+ continue;
-+ i = str.find("(", i);
-+ if (i < 0)
-+ continue;
-+ str.remove(0, i+1);
-+ i = str.find(",");
-+ if (i < 0)
-+ continue;
-+ QString name = str.left(i);
-+ str.remove(0, i+1);
-+ i = str.find(")");
-+ if (i < 0)
-+ continue;
-+ QString pass = name;
-+ if (name.startsWith("pass"))
-+ name = str.left(i);
-+ else
-+ pass = str.left(i);
-+ QString vendor, product, revision;
-+ if (details.count() > 0)
-+ revision = details.last();
-+ details.pop_back();
-+ if (details.count() > 0)
-+ product = details.last();
-+ details.pop_back();
-+ if (details.count() > 0)
-+ vendor = details.join(" ");
-+ if (!name.startsWith("cd"))
-+ continue;
-+ kdDebug() << "(K3bDeviceManager) Found device " << name << ", pass = " << pass << ", bus = " << bus << ", target = " << target << ", lun = " << lun << endl;
-+ kdDebug() << "(K3bDeviceManager) vendor: " << vendor << ", product: " << product << ", revision: " << revision << ", target = " << target << ", lun = " << lun << endl;
-+#if __FreeBSD_version >= 500100
-+ m_devices.push_back(BSDDevice("/dev/" + name, "/dev/" + pass, vendor, product, revision, bus, target, lun));
-+#else
-+ m_devices.push_back(BSDDevice("/dev/" + name + "c", "/dev/" + pass, vendor, product, revision, bus, target, lun));
++ QString pass = dev1;
++ QString dev = "/dev/" + dev2;
++ if (dev2.startsWith("pass"))
++ {
++ pass = dev2;
++ dev = "/dev/" + dev1;
++ }
++#if __FreeBSD_version < 500100
++ dev += "c";
+#endif
-+ }
-+ }
++ K3bDevice* device = new K3bDevice(dev.latin1());
++ device->m_bus = bus;
++ device->m_target = target;
++ device->m_lun = lun;
++ device->m_passDevice = "/dev/" + pass;
++ kdDebug() << "(bsd_scan_devices) add device " << dev << ":" << bus << ":" << target << ":" << lun << endl;
++ addDevice(device);
++ }
++ close(fd);
+}
+#endif
diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.h b/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.h
index 8d285e3ec035..eb08ec300f78 100644
--- a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.h
+++ b/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.h
@@ -1,42 +1,12 @@
--- src/device/k3bdevicemanager.h.orig Wed Jan 21 11:20:11 2004
-+++ src/device/k3bdevicemanager.h Fri Feb 13 21:03:38 2004
-@@ -24,6 +24,10 @@
- #include <qptrlist.h>
-
- #include <kdebug.h>
-+#ifdef __FreeBSD__
-+#include <qdatetime.h>
-+#include <qvaluelist.h>
-+#endif
-
- class KProcess;
- class KConfig;
-@@ -112,6 +116,29 @@
++++ src/device/k3bdevicemanager.h Tue May 11 22:57:03 2004
+@@ -112,6 +112,10 @@
class Private;
Private* d;
+#ifdef __FreeBSD__
-+ void bsd_scan_devices(bool sudo);
-+ QDateTime m_lastRefresh;
-+ class BSDDevice
-+ {
-+ public:
-+ BSDDevice() : m_bus(-1), m_target(-1), m_lun(-1) {}
-+ BSDDevice(const QString & name, const QString & passDevice, const QString & vendor,
-+ const QString & product, const QString & revision, int bus, int target, int lun) :
-+ m_name(name), m_passDevice(passDevice), m_vendor(vendor), m_product(product),
-+ m_revision(revision), m_bus(bus), m_target(target), m_lun(lun) {}
-+ BSDDevice(const BSDDevice & src) :
-+ m_name(src.m_name), m_passDevice(src.m_passDevice), m_vendor(src.m_vendor), m_product(src.m_product),
-+ m_revision(src.m_revision), m_bus(src.m_bus), m_target(src.m_target), m_lun(src.m_lun) {}
-+ const BSDDevice & operator= (const BSDDevice & src)
-+ { m_name = src.m_name; m_passDevice = src.m_passDevice; m_vendor = src.m_vendor;
-+ m_product = src.m_product; m_revision = src.m_revision; m_bus = src.m_bus; m_target = src.m_target;
-+ m_lun = src.m_lun; return *this; }
-+ QString m_name, m_passDevice, m_vendor, m_product, m_revision;
-+ int m_bus, m_target, m_lun;
-+ };
-+ QValueList<BSDDevice> m_devices;
++ void bsd_scan_devices();
++ CdDevice* addDevice( CdDevice* );
+#endif
};
}
diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.cpp b/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.cpp
index 6c11e8f5307f..f4814b46bbff 100644
--- a/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.cpp
+++ b/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.cpp
@@ -1,18 +1,5 @@
--- src/device/k3bscsicommand.cpp.orig Wed Jan 21 11:20:11 2004
-+++ src/device/k3bscsicommand.cpp Fri Feb 13 21:03:38 2004
-@@ -1,10 +1,10 @@
- /*
- *
-- * $Id: k3bscsicommand.cpp,v 1.4 2004/01/21 10:20:11 trueg Exp $
-+ * $Id: k3bscsicommand.cpp,v 1.3 2003/12/31 14:15:17 trueg Exp $
- * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org>
- *
- * This file is part of the K3b project.
-- * Copyright (C) 1998-2004 Sebastian Trueg <trueg@k3b.org>
-+ * Copyright (C) 1998-2003 Sebastian Trueg <trueg@k3b.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
++++ src/device/k3bscsicommand.cpp Mon May 24 23:32:04 2004
@@ -58,13 +58,14 @@
@@ -34,7 +21,7 @@
K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev )
: m_device(dev)
-@@ -135,6 +136,105 @@
+@@ -135,6 +136,155 @@
return 0;
}
@@ -65,42 +52,41 @@
+#include <sys/ioctl.h>
+
+K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev )
-+ : m_device(dev)
++ : closecam(true), m_device(dev)
+{
-+ clear();
++ cam = cam_open_pass (m_device->m_passDevice.latin1(),O_RDWR,NULL);
++ kdDebug() << "(K3bCdDevice::ScsiCommand) open device " << m_device->m_passDevice << ((cam)?" succeeded.":" failed.") << endl;
++ clear();
++}
++
++K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev, struct cam_device * c)
++ : closecam(false), cam(c), m_device(dev)
++{
++ clear();
+}
+
+K3bCdDevice::ScsiCommand::~ScsiCommand()
+{
-+ if(cam)
++ if(cam && closecam)
++ {
+ cam_close_device(cam);
-+// if (m_fd >0)
-+// close(m_fd);
++ kdDebug() << "(K3bCdDevice::ScsiCommand) device " << m_device->m_passDevice << " closed." << endl;
++ }
+}
+
+
+void K3bCdDevice::ScsiCommand::clear()
+{
-+// char pass[32];
-+ cam=NULL;
+ memset (&ccb,0,sizeof(ccb));
-+ ccb.ccb_h.func_code = XPT_GDEVLIST;
-+// if (ioctl (m_fd,CAMGETPASSTHRU,&ccb) < 0) return;
-+// sprintf (pass,"/dev/%.15s%u",ccb.cgdl.periph_name,ccb.cgdl.unit_number);
-+ cam = cam_open_pass (m_device->m_passDevice.latin1(),O_RDWR,NULL);
-+ kdDebug() << "(K3bCdDevice::ScsiCommand) open device " << m_device->m_passDevice << ((cam)?" succeeded.":" failed.") << endl;
++ if (!cam)
++ return;
++ ccb.ccb_h.path_id = cam->path_id;
++ ccb.ccb_h.target_id = cam->target_id;
++ ccb.ccb_h.target_lun = cam->target_lun;
+}
+
+unsigned char& K3bCdDevice::ScsiCommand::operator[]( size_t i )
+{
-+ if (!i && cam)
-+ {
-+ memset(&ccb,0,sizeof(ccb));
-+ ccb.ccb_h.path_id = cam->path_id;
-+ ccb.ccb_h.target_id = cam->target_id;
-+ ccb.ccb_h.target_lun = cam->target_lun;
-+ cam_fill_csio (&(ccb.csio), 1, NULL, CAM_DEV_QFRZDIS, MSG_SIMPLE_Q_TAG, NULL, 0, sizeof(ccb.csio.sense_data), 0, 30*1000);
-+ }
+ ccb.csio.cdb_len = i+1;
+ return ccb.csio.cdb_io.cdb_bytes[i];
+}
@@ -114,26 +100,77 @@
+ return -1;
+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport command " << QString::number((int)ccb.csio.cdb_io.cdb_bytes[0], 16) << ", length: " << (int)ccb.csio.cdb_len << endl;
+ int ret=0;
-+ ccb.csio.ccb_h.flags |= dir;
-+ ccb.csio.data_ptr = (u_int8_t *)data;
-+ ccb.csio.dxfer_len = len;
++ unsigned char command = ccb.csio.cdb_io.cdb_bytes[0];
++ int direction = CAM_DEV_QFRZDIS;
++ if (!len)
++ direction |= CAM_DIR_NONE;
++ else
++ direction |= (dir & TR_DIR_READ)?CAM_DIR_IN : CAM_DIR_OUT;
++ cam_fill_csio (&(ccb.csio), 1, NULL, direction | CAM_DEV_QFRZDIS, MSG_SIMPLE_Q_TAG, (u_int8_t *)data, len, sizeof(ccb.csio.sense_data), ccb.csio.cdb_len, 30*1000);
++ unsigned char * sense = (unsigned char *)&ccb.csio.sense_data;
+ if ((ret = cam_send_ccb(cam, &ccb)) < 0)
+ {
+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed: " << ret << endl;
-+ return -1;
++ goto dump_error;
+ }
+ if ((ccb.ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP)
-+ {
-+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport succeeded" << endl;
-+ return 0;
-+ }
++ return 0;
++
+ errno = EIO;
-+ ret = ERRCODE(((unsigned char *)&ccb.csio.sense_data));
++ // FreeBSD 5-CURRENT since 2003-08-24, including 5.2 fails to
++ // pull sense data automatically, at least for ATAPI transport,
++ // so I reach for it myself...
++ if ((ccb.csio.scsi_status==SCSI_STATUS_CHECK_COND) &&
++ !(ccb.ccb_h.status&CAM_AUTOSNS_VALID))
++ {
++ u_int8_t _sense[18];
++ u_int32_t resid=ccb.csio.resid;
++
++ memset(_sense,0,sizeof(_sense));
++
++ operator[](0) = 0x03; // REQUEST SENSE
++ ccb.csio.cdb_io.cdb_bytes[4] = sizeof(_sense);
++ ccb.csio.cdb_len = 6;
++ ccb.csio.ccb_h.flags |= CAM_DIR_IN|CAM_DIS_AUTOSENSE;
++ ccb.csio.data_ptr = _sense;
++ ccb.csio.dxfer_len = sizeof(_sense);
++ ccb.csio.sense_len = 0;
++ ret = cam_send_ccb(cam, &ccb);
++
++ ccb.csio.resid = resid;
++ if (ret<0)
++ {
++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (2): " << ret << endl;
++ ret = -1;
++ goto dump_error;
++ }
++ if ((ccb.ccb_h.status&CAM_STATUS_MASK) != CAM_REQ_CMP)
++ {
++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (3): " << ret << endl;
++ errno=EIO,-1;
++ ret = -1;
++ goto dump_error;
++ }
++
++ memcpy(sense,_sense,sizeof(_sense));
++ }
++
++ ret = ERRCODE(sense);
++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (4): " << ret << endl;
+ if (ret == 0)
+ ret = -1;
+ else
+ CREAM_ON_ERRNO(((unsigned char *)&ccb.csio.sense_data));
-+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (2): " << ret << endl;
++dump_error:
++ kdDebug() << "(K3bCdDevice::ScsiCommand) failed: " << endl
++ << " command: " << QString("%1 (%2)")
++ .arg( MMC::commandString( ccb.csio.cdb_io.cdb_bytes[0] ) )
++ .arg( QString::number(ccb.csio.cdb_io.cdb_bytes[0], 16) ) << endl
++ << " errorcode: " << QString::number(((struct scsi_sense_data *)sense)->error_code & SSD_ERRCODE, 16) << endl
++ << " sense key: " << senseKeyToString(((struct scsi_sense_data *)sense)->flags & SSD_KEY) << endl
++ << " asc: " << QString::number(((struct scsi_sense_data *)sense)->add_sense_code, 16) << endl
++ << " ascq: " << QString::number(((struct scsi_sense_data *)sense)->add_sense_code_qual, 16) << endl;
++
+ return ret;
+}
+#endif
diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.h b/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.h
index 06cebf91dd79..e50cd874fde6 100644
--- a/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.h
+++ b/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.h
@@ -1,18 +1,5 @@
--- src/device/k3bscsicommand.h.orig Wed Jan 21 11:20:11 2004
-+++ src/device/k3bscsicommand.h Fri Feb 13 21:03:38 2004
-@@ -1,10 +1,10 @@
- /*
- *
-- * $Id: k3bscsicommand.h,v 1.3 2004/01/21 10:20:11 trueg Exp $
-+ * $Id: k3bscsicommand.h,v 1.2 2003/12/19 19:40:40 trueg Exp $
- * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org>
- *
- * This file is part of the K3b project.
-- * Copyright (C) 1998-2004 Sebastian Trueg <trueg@k3b.org>
-+ * Copyright (C) 1998-2003 Sebastian Trueg <trueg@k3b.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
++++ src/device/k3bscsicommand.h Tue May 11 22:57:03 2004
@@ -17,9 +17,27 @@
#define _K3B_SCSI_COMMAND_H_
@@ -41,24 +28,7 @@
#include <qstring.h>
-@@ -87,16 +105,24 @@
- }
-
-
-+#ifndef __FreeBSD__
- enum TransportDirection {
- TR_DIR_NONE,
- TR_DIR_READ,
- TR_DIR_WRITE
- };
-+#else
-+ enum TransportDirection {
-+ TR_DIR_NONE = 0,
-+ TR_DIR_READ = CAM_DIR_IN,
-+ TR_DIR_WRITE = CAM_DIR_OUT
-+ };
-+#endif
-
+@@ -96,7 +114,7 @@
class ScsiCommand
{
public:
@@ -67,7 +37,7 @@
ScsiCommand( const CdDevice* );
~ScsiCommand();
-@@ -109,9 +135,13 @@
+@@ -109,10 +127,16 @@
size_t len = 0 );
private:
@@ -76,9 +46,12 @@
struct request_sense m_sense;
-
+#else
++ ScsiCommand( const CdDevice* , struct cam_device *);
++ bool closecam;
+ struct cam_device *cam;
+ union ccb ccb;
-+#endif
int m_fd;
++#endif
const CdDevice* m_device;
bool m_needToCloseDevice;
+ };
diff --git a/sysutils/k3b-kde4/files/patch-src-rip-k3bdvdrippingprocess.cpp b/sysutils/k3b-kde4/files/patch-src-rip-k3bdvdrippingprocess.cpp
new file mode 100644
index 000000000000..3406f0b1f2e2
--- /dev/null
+++ b/sysutils/k3b-kde4/files/patch-src-rip-k3bdvdrippingprocess.cpp
@@ -0,0 +1,16 @@
+--- src/rip/k3bdvdrippingprocess.cpp.orig Wed Jan 21 11:20:20 2004
++++ src/rip/k3bdvdrippingprocess.cpp Tue May 11 22:57:03 2004
+@@ -278,10 +278,13 @@
+ void K3bDvdRippingProcess::slotPreProcessingDvd() {
+ QString video;
+ QDir video_ts( m_mountPoint + "/VIDEO_TS");
++#ifndef FreeBSD
++// on FreeBSD both /VIDEO_TS and /video_ts exist on dvd devices ?!?
+ if( video_ts.exists() ) {
+ m_udfMount = true;
+ kdDebug() << "(K3bDvdRippingProcess) <" << m_mountPoint << "> has UDF filesystem." << endl;
+ }
++#endif
+ video_ts.setPath( m_mountPoint + "/video_ts");
+ if( !video_ts.exists() && !m_udfMount){
+ m_preProcessingFailed = true;
diff --git a/sysutils/k3b-kde4/files/patch-src-rip-k3bmovieview.cpp b/sysutils/k3b-kde4/files/patch-src-rip-k3bmovieview.cpp
index cfd8f4e7c79a..214c1d362c8e 100644
--- a/sysutils/k3b-kde4/files/patch-src-rip-k3bmovieview.cpp
+++ b/sysutils/k3b-kde4/files/patch-src-rip-k3bmovieview.cpp
@@ -1,5 +1,5 @@
--- src/rip/k3bmovieview.cpp.orig Fri Feb 6 12:08:51 2004
-+++ src/rip/k3bmovieview.cpp Fri Feb 13 21:03:38 2004
++++ src/rip/k3bmovieview.cpp Tue May 11 22:57:03 2004
@@ -223,8 +223,11 @@
}
diff --git a/sysutils/k3b-kde4/files/patch-src-rip-k3btcwrapper.cpp b/sysutils/k3b-kde4/files/patch-src-rip-k3btcwrapper.cpp
index 9ef70edca96a..3ea66527aaa7 100644
--- a/sysutils/k3b-kde4/files/patch-src-rip-k3btcwrapper.cpp
+++ b/sysutils/k3b-kde4/files/patch-src-rip-k3btcwrapper.cpp
@@ -1,5 +1,5 @@
--- src/rip/k3btcwrapper.cpp.orig Wed Jan 21 11:20:20 2004
-+++ src/rip/k3btcwrapper.cpp Fri Feb 13 21:03:38 2004
++++ src/rip/k3btcwrapper.cpp Tue May 11 22:57:03 2004
@@ -65,7 +65,12 @@
//K3bProcess *p = new K3bProcess();
emit tcprobeTitleParsed( m_currentTitle );
@@ -13,3 +13,12 @@
//p->setSplitStdout( true );
connect( p, SIGNAL(receivedStderr(KProcess*, char*, int)), this, SLOT(slotParseTcprobeError(KProcess*, char*, int)) );
connect( p, SIGNAL(receivedStdout(KProcess*, char*, int)), this, SLOT(slotParseTcprobeOutput(KProcess*, char*, int)) );
+@@ -77,7 +82,7 @@
+ if( !p->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) {
+ // something went wrong when starting the program
+ // it "should" be the executable
+- kdDebug() << "(K3bDirView) Error during checking drive for DVD." << endl;
++ kdDebug() << "(K3bTcWrapper) Error during checking drive for DVD." << endl;
+ }
+ }
+
diff --git a/sysutils/k3b-kde4/pkg-message b/sysutils/k3b-kde4/pkg-message
index fb5f51307cac..d28ebfa63e81 100644
--- a/sysutils/k3b-kde4/pkg-message
+++ b/sysutils/k3b-kde4/pkg-message
@@ -9,26 +9,18 @@ Notes:
Alternatively do all of the following:
3a. set the suid flag on cdrecord and cdrdao. The 'Notes' the chapter of
'man cdrecord' discusses this.
-3b. - install sudo (security/sudo) and add the following line or similar to
- sudoers (usually in /usr/local/etc/sudoers):
- ALL ALL = NOPASSWD: /sbin/camcontrol devlist
- - or execute 'camcontrol devlist'. For every user who should be able to use
- k3b. Resolve all errors e.g. by giving him/her access rights to /dev/xpt0.
- 'camcontrol devlist' must run without error for all these users!
- Note that giving access rights to /dev/xpt* might be a security leak!
- - or give camcontrol the suid flag, which is a security leak as well.
-3c. - For every user who should be able to use k3b and for every CD or DVD
+3b. - For every user who should be able to use k3b and for every CD or DVD
device add a directory in the users home directory. These directories
must be owned by the corresponding user. For each such directory add a
line in /ect/fstab (see remark 2), like:
/dev/cd0c /usr/home/XXX/cdrom cd9660 ro,noauto,nodev,nosuid 0 0
Furthermore allow user mounts as described in topic 9.22 of the FAQ:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/disks.html#USER-FLOPPYMOUNT
- - or just give mount and umount the sudo flag, which is a security leak.
-3d. - Every user who should be able to use k3b must have read and write access
- to all pass through devices connected with CD and DVD drives. Run
- 'camcontrol devlist' to identify those devices (seek string 'passX' at
- the end of each line and modify the rights of /dev/passX). Note, that
+ - or just give mount and umount the suid flag, which is a security leak.
+3c. - Every user who should be able to use k3b must have read and write access
+ to all pass through devices connected with CD and DVD drives and to the /dev/xpt0
+ device. Run 'camcontrol devlist' to identify those devices (seek string 'passX'
+ at the end of each line and modify the rights of /dev/passX). Note, that
this is a security leak as well but that there is no alternative!
4. Create a directory on a partition, which has enough disk space to hold a CDs
or DVDs content (usually below /usr). Enter this directory in Settings->
@@ -40,14 +32,14 @@ Notes:
work. See http://cdrdao.sourceforge.net/drives.html.
6. To burn video CDs install the port multimedia/vcdimager.
7. To rip DVDs additionally install the ports multimedia/transcode,
- multimedia/libdvdread and multimedia/xvid. Note that multimedia/transcode
- requires some variables to be set. Type "make fetch" in the
- multimedia/transcode ports directory for details. The ripping process
- itself is described in
- http://k3b.sourceforge.net/cgi-bin/index.pl/videoencoding.
+ multimedia/libdvdread and multimedia/xvid. Note that k3b does NOT work with
+ transcode 0.6.12. 0.6.10 is the last known working version. The ripping process
+ itself is described in http://k3b.sourceforge.net/cgi-bin/index.pl/videoencoding.
8. To burn bootable video CDs, install the port multimedia/emovix.
9. To burn DVDs, install the port sysutils/dvd+rw-tools.
10. To normalize the volumes of audio cds, install the port audio/normalize.
11. To rip into more audio formats, install the port audio/sox.
+UPGRADERS FROM 0.11.6 OR BELOW SHOULD NOTE THE CHANGED TOPIC 3C!!!
+
To read this instructions again, type 'make showinfo' in the k3b port directory
diff --git a/sysutils/k3b-kde4/pkg-plist b/sysutils/k3b-kde4/pkg-plist
index ee921880d623..8619a4eec1ed 100644
--- a/sysutils/k3b-kde4/pkg-plist
+++ b/sysutils/k3b-kde4/pkg-plist
@@ -35,6 +35,7 @@ include/k3bexternalbinmanager.h
include/k3bfileitem.h
include/k3bglobals.h
include/k3binteractiondialog.h
+include/k3bintvalidator.h
include/k3biso9660.h
include/k3bisooptions.h
include/k3bjob.h
diff --git a/sysutils/k3b/Makefile b/sysutils/k3b/Makefile
index 7601b89875f6..7c18bbbb8c88 100644
--- a/sysutils/k3b/Makefile
+++ b/sysutils/k3b/Makefile
@@ -6,8 +6,7 @@
#
PORTNAME= k3b
-PORTVERSION= 0.11.6
-PORTREVISION= 1
+PORTVERSION= 0.11.9
CATEGORIES= sysutils multimedia kde
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= ${PORTNAME}
@@ -19,6 +18,7 @@ RUN_DEPENDS= cdrecord:${PORTSDIR}/sysutils/cdrtools \
cdrdao:${PORTSDIR}/sysutils/cdrdao \
mkisofs:${PORTSDIR}/sysutils/mkisofs
LIB_DEPENDS= mad:${PORTSDIR}/audio/libmad \
+ id3tag:${PORTSDIR}/audio/libid3tag \
vorbis:${PORTSDIR}/audio/libvorbis \
FLAC:${PORTSDIR}/audio/flac
diff --git a/sysutils/k3b/distinfo b/sysutils/k3b/distinfo
index e5a440541f5b..f87a9ba30f2e 100644
--- a/sysutils/k3b/distinfo
+++ b/sysutils/k3b/distinfo
@@ -1 +1,2 @@
-MD5 (k3b-0.11.6.tar.bz2) = 0015b9ad457713425464dbdad6a15ab9
+MD5 (k3b-0.11.9.tar.bz2) = 88f46a5cfbda5fa89b4bfee504567df1
+SIZE (k3b-0.11.9.tar.bz2) = 3217141
diff --git a/sysutils/k3b/files/patch-src-Makefile.in b/sysutils/k3b/files/patch-src-Makefile.in
index bf6506bc152a..c3dd4bab796b 100644
--- a/sysutils/k3b/files/patch-src-Makefile.in
+++ b/sysutils/k3b/files/patch-src-Makefile.in
@@ -1,6 +1,6 @@
---- 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 @@
+--- src/Makefile.in.orig Mon Mar 29 20:04:54 2004
++++ src/Makefile.in Tue May 11 22:57:03 2004
+@@ -272,7 +272,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 k3bcdcontentsview.cpp k3bwriterspeedverificationdialog.cpp k3bdatatrackreader.cpp k3binterface_skel.cpp k3bprojectinterface_skel.cpp
diff --git a/sysutils/k3b/files/patch-src-core-k3bdefaultexternalprograms.cpp b/sysutils/k3b/files/patch-src-core-k3bdefaultexternalprograms.cpp
index 008a58d004fe..3fe07352d47f 100644
--- a/sysutils/k3b/files/patch-src-core-k3bdefaultexternalprograms.cpp
+++ b/sysutils/k3b/files/patch-src-core-k3bdefaultexternalprograms.cpp
@@ -1,6 +1,6 @@
---- src/core/k3bdefaultexternalprograms.cpp.orig Wed Jan 21 11:20:10 2004
-+++ src/core/k3bdefaultexternalprograms.cpp Fri Feb 13 21:03:38 2004
-@@ -28,6 +28,7 @@
+--- src/core/k3bdefaultexternalprograms.cpp.orig Mon Mar 22 18:13:21 2004
++++ src/core/k3bdefaultexternalprograms.cpp Tue May 11 22:57:03 2004
+@@ -30,6 +30,7 @@
#include <unistd.h>
#include <sys/stat.h>
#include <stdlib.h>
@@ -8,7 +8,7 @@
-@@ -89,7 +90,7 @@
+@@ -123,7 +124,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -17,7 +17,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path << "-version";
-@@ -128,7 +129,7 @@
+@@ -162,7 +163,7 @@
// probe features
@@ -26,7 +26,7 @@
out.setProcess( &fp );
fp << path << "-help";
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -200,7 +201,7 @@
+@@ -236,7 +237,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -35,7 +35,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path << "-version";
-@@ -229,7 +230,7 @@
+@@ -265,7 +266,7 @@
// probe features
@@ -44,7 +44,7 @@
out.setProcess( &fp );
fp << path << "-help";
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -285,7 +286,7 @@
+@@ -321,7 +322,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -53,7 +53,7 @@
vp << path << "-version";
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -313,7 +314,7 @@
+@@ -349,7 +350,7 @@
// probe features
@@ -62,7 +62,7 @@
fp << path << "-help";
out.setProcess( &fp );
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -374,7 +375,7 @@
+@@ -410,7 +411,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -71,7 +71,7 @@
vp << path << "-version";
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -402,7 +403,7 @@
+@@ -438,7 +439,7 @@
// probe features
@@ -80,7 +80,7 @@
fp << path << "-help";
out.setProcess( &fp );
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -462,7 +463,7 @@
+@@ -498,7 +499,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -89,7 +89,7 @@
vp << path ;
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -490,7 +491,7 @@
+@@ -530,7 +531,7 @@
// probe features
@@ -98,7 +98,7 @@
fp << path << "write" << "-h";
out.setProcess( &fp );
if( fp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -556,7 +557,7 @@
+@@ -599,7 +600,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -107,7 +107,7 @@
vp << path ;
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -610,7 +611,7 @@
+@@ -653,7 +654,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -116,7 +116,7 @@
vp << path << "-V";
K3bProcess::OutputCollector out( &vp );
if( vp.start( KProcess::Block, KProcess::AllOutput ) ) {
-@@ -667,7 +668,7 @@
+@@ -710,7 +711,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -125,7 +125,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path << "--version";
-@@ -726,7 +727,7 @@
+@@ -769,7 +770,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -134,7 +134,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path << "-version";
-@@ -795,7 +796,7 @@
+@@ -838,7 +839,7 @@
K3bExternalBin* bin = 0;
// probe version
@@ -143,7 +143,7 @@
K3bProcess::OutputCollector out( &vp );
vp << path;
-@@ -868,7 +869,7 @@
+@@ -911,7 +912,7 @@
K3bExternalBin* bin = 0;
// probe version
diff --git a/sysutils/k3b/files/patch-src-core-k3bprocess.cpp b/sysutils/k3b/files/patch-src-core-k3bprocess.cpp
index 14543eb14ea8..425eec00ad79 100644
--- a/sysutils/k3b/files/patch-src-core-k3bprocess.cpp
+++ b/sysutils/k3b/files/patch-src-core-k3bprocess.cpp
@@ -1,5 +1,5 @@
--- src/core/k3bprocess.cpp.orig Sun Feb 1 09:18:58 2004
-+++ src/core/k3bprocess.cpp Fri Feb 13 21:03:38 2004
++++ src/core/k3bprocess.cpp Tue May 11 22:57:03 2004
@@ -28,6 +28,60 @@
#include <unistd.h>
#include <stdio.h>
diff --git a/sysutils/k3b/files/patch-src-core-k3bprocess.h b/sysutils/k3b/files/patch-src-core-k3bprocess.h
index f4f96946d694..10fae690100f 100644
--- a/sysutils/k3b/files/patch-src-core-k3bprocess.h
+++ b/sysutils/k3b/files/patch-src-core-k3bprocess.h
@@ -1,5 +1,5 @@
--- src/core/k3bprocess.h.orig Tue Jan 27 09:19:13 2004
-+++ src/core/k3bprocess.h Fri Feb 13 21:03:38 2004
++++ src/core/k3bprocess.h Tue May 11 22:57:03 2004
@@ -194,4 +194,21 @@
KProcess* m_process;
};
diff --git a/sysutils/k3b/files/patch-src-device-k3bdevice.cpp b/sysutils/k3b/files/patch-src-device-k3bdevice.cpp
index c3e8d0ce63d7..5315827ee675 100644
--- a/sysutils/k3b/files/patch-src-device-k3bdevice.cpp
+++ b/sysutils/k3b/files/patch-src-device-k3bdevice.cpp
@@ -1,5 +1,5 @@
---- src/device/k3bdevice.cpp.orig Thu Feb 12 11:21:15 2004
-+++ src/device/k3bdevice.cpp Fri Feb 13 21:03:38 2004
+--- src/device/k3bdevice.cpp.orig Sun Mar 14 17:35:20 2004
++++ src/device/k3bdevice.cpp Mon May 24 23:31:19 2004
@@ -56,6 +56,12 @@
#endif // Q_OS_LINUX
@@ -24,3 +24,56 @@
//
+@@ -192,6 +200,7 @@
+ unsigned char header[2048];
+ ::memset( header, 0, 2048 );
+
++ cmd.clear();
+ cmd[0] = MMC::GET_CONFIGURATION;
+ cmd[8] = 8;
+ if( cmd.transport( TR_DIR_READ, header, 8 ) ) {
+@@ -733,6 +742,14 @@
+ m_bufferSize = 1024;
+ d->burnfree = false;
+ }
++ else if( description().startsWith("CD-R56S") ) {
++ m_writeModes |= TAO;
++ d->deviceType |= CDROM|CDR;
++ m_maxWriteSpeed = 6;
++ m_maxReadSpeed = 24;
++ m_bufferSize = 1302;
++ d->burnfree = false;
++ }
+ }
+ else if( vendor().startsWith("MATSHITA") ) {
+ if( description().startsWith("CD-R CW-7501") ) {
+@@ -2317,10 +2334,12 @@
+ {
+ // if the device is already opened we do not close it
+ // to allow fast multible method calls in a row
++#ifndef __FreeBSD__
+ bool needToClose = !isOpen();
+
+ if (open() < 0)
+ return;
++#endif
+
+ // header size is 8
+ unsigned char* buffer = 0;
+@@ -2406,13 +2425,16 @@
+ delete [] buffer;
+ }
+
++#ifndef __FreeBSD__
+ if( needToClose )
+ close();
++#endif
+ }
+
+
+ bool K3bCdDevice::CdDevice::readTocPmaAtip( unsigned char** data, int& dataLen, int format, bool time, int track ) const
+ {
++ kdDebug() << "(K3bCdDevice::CdDevice) readTocPmaAtip started, format:" << format << ", time: " << time << ", track: " << track << endl;
+ unsigned char header[2048];
+ ::memset( header, 0, 2048 );
+
diff --git a/sysutils/k3b/files/patch-src-device-k3bdevice.h b/sysutils/k3b/files/patch-src-device-k3bdevice.h
index ecb893f0d514..836458ced45e 100644
--- a/sysutils/k3b/files/patch-src-device-k3bdevice.h
+++ b/sysutils/k3b/files/patch-src-device-k3bdevice.h
@@ -1,6 +1,6 @@
---- src/device/k3bdevice.h.orig Fri Jan 30 11:28:15 2004
-+++ src/device/k3bdevice.h Fri Feb 13 21:03:38 2004
-@@ -654,6 +654,10 @@
+--- src/device/k3bdevice.h.orig Sun Mar 14 17:35:20 2004
++++ src/device/k3bdevice.h Tue May 11 22:57:03 2004
+@@ -661,6 +661,10 @@
class Private;
Private* d;
diff --git a/sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp b/sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp
index 75ba9c14b38f..7b40314e293a 100644
--- a/sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp
+++ b/sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp
@@ -1,5 +1,5 @@
---- src/device/k3bdevicemanager.cpp.orig Wed Jan 21 11:20:10 2004
-+++ src/device/k3bdevicemanager.cpp Fri Feb 13 21:03:38 2004
+--- src/device/k3bdevicemanager.cpp.orig Sun Feb 29 13:52:41 2004
++++ src/device/k3bdevicemanager.cpp Tue May 11 22:57:03 2004
@@ -49,6 +49,12 @@
#include <sys/stat.h>
#include <sys/ioctl.h>
@@ -13,7 +13,7 @@
#ifdef Q_OS_LINUX
-@@ -196,6 +202,22 @@
+@@ -196,6 +202,13 @@
{
m_foundDevices = 0;
@@ -22,21 +22,12 @@
+// and asks their properties. If they are indeed cd drives, they are added to a device list. This does not work
+// on FreeBSD (no corresponding ioctls). Here cdrecord is asked for a list of scsi device, which work as cd
+// drives. The device points of those devices are added to the device list.
-+ bsd_scan_devices(false);
-+ kdDebug() << "(K3bDeviceManager) analyze found device" << endl;
-+ for ( QValueList<BSDDevice>::iterator it = m_devices.begin(); it != m_devices.end(); ++it )
-+ {
-+ if( addDevice( (*it).m_name ) )
-+ {
-+ kdDebug() << "(K3bDeviceManager) Device " << (*it).m_name << " added" << endl;
-+ m_foundDevices++;
-+ }
-+ }
++ bsd_scan_devices();
+#else
QFile info("/proc/sys/dev/cdrom/info");
QString line,devstring;
info.open(IO_ReadOnly);
-@@ -286,6 +308,7 @@
+@@ -286,6 +299,7 @@
// m_foundDevices++;
// }
@@ -44,7 +35,7 @@
scanFstab();
return m_foundDevices;
-@@ -427,6 +450,7 @@
+@@ -427,6 +441,7 @@
bool K3bCdDevice::DeviceManager::testForCdrom(const QString& devicename)
{
bool ret = false;
@@ -52,7 +43,7 @@
int cdromfd = K3bCdDevice::openDevice( devicename.ascii() );
if (cdromfd < 0) {
kdDebug() << "could not open device " << devicename << " (" << strerror(errno) << ")" << endl;
-@@ -467,11 +491,51 @@
+@@ -467,11 +482,36 @@
}
::close( cdromfd );
@@ -66,45 +57,30 @@
+// this piece of code extracts some device parameter, like scsi or ide device. The whole process
+// fails on FreeBSD. Here the device name is simply looked up in a list of devices found by a
+// call of cdrecord --scanbus.
-+ K3bDevice* device = 0;
-+ if (!m_lastRefresh.isValid())
-+ bsd_scan_devices(false);
-+ bool found = false;
-+ for ( QValueList<BSDDevice>::iterator it = m_devices.begin(); it != m_devices.end(); ++it )
-+ {
-+ if( (*it).m_name == devicename )
-+ {
-+ device = new K3bDevice((*it).m_name.latin1());
-+ device->m_bus = (*it).m_bus;
-+ device->m_target = (*it).m_target;
-+ device->m_lun = (*it).m_lun;
-+ device->m_passDevice = (*it).m_passDevice;
-+ device->m_vendor = (*it).m_vendor;
-+ device->m_description = (*it).m_product;
-+ device->m_version = (*it).m_revision;
-+ found = true;
-+ break;
-+ }
-+ }
-+ if (!found)
-+ {
++ K3bDevice* device = findDevice(devicename);
++ if (device)
++ return 0;
+ // resolve all symlinks
+ QString resolved = resolveSymLink( devicename );
+ kdDebug() << "(K3bDeviceManager) " << devicename << " resolved to " << resolved << endl;
-+ int bus, target, lun;
-+ if( K3bDevice* oldDev = findDevice( bus, target, lun ) )
++ if( K3bDevice* oldDev = findDevice( resolved ) )
+ {
-+ kdDebug() << "(K3bDeviceManager) dev already found" << endl;
-+ oldDev->addDeviceNode( resolved );
++ kdDebug() << "(K3bDeviceManager) dev already found" << endl;
++ oldDev->addDeviceNode( resolved );
++ return 0;
+ }
-+ return 0;
-+ }
++ device = new K3bDevice(resolved.latin1());
++ return addDevice( device );
++}
+
++K3bDevice* K3bCdDevice::DeviceManager::addDevice( CdDevice* device )
++{
++ const QString devicename = device->devicename();
+#else
K3bDevice* device = 0;
// resolve all symlinks
-@@ -503,6 +567,7 @@
+@@ -503,6 +543,7 @@
device->m_target = target;
device->m_lun = lun;
}
@@ -112,7 +88,7 @@
if( !device->init() ) {
kdDebug() << "Could not initialize device " << devicename << endl;
-@@ -578,9 +643,20 @@
+@@ -578,9 +619,20 @@
if( K3bDevice* dev = findDevice( resolveSymLink(md) ) )
{
@@ -133,7 +109,7 @@
dev->setMountDevice( md );
dev->m_supermount = supermount;
}
-@@ -589,6 +665,8 @@
+@@ -589,6 +641,8 @@
{
// compare bus, id, lun since the same device can for example be
// determined as /dev/srX or /dev/scdX
@@ -142,7 +118,7 @@
int bus = -1, id = -1, lun = -1;
if( determineBusIdLun( mountInfo->fs_spec, bus, id, lun ) ) {
if( K3bDevice* dev = findDevice( bus, id, lun ) ) {
-@@ -599,6 +677,17 @@
+@@ -599,6 +653,17 @@
}
}
}
@@ -160,129 +136,134 @@
}
-@@ -673,5 +762,126 @@
+@@ -674,5 +739,131 @@
return QString::fromLatin1( resolved );
}
+
+#ifdef __FreeBSD__
-+// Calls "camcontrol devlist" to get a list of all available cd devices.
-+// The sudo flag indicates, that "camcontrol devlist" should be
-+// called. This is tried, if bsd_scan_devices(false) fails.
-+// The result of the scan ist stored in m_devices. If within 3
-+// seconds after the last call to bsd_scan_devices this function
-+// is called again, the last result is used (prevents to call
-+// camcontrol several times within a short time).
-+void K3bCdDevice::DeviceManager::bsd_scan_devices(bool sudo)
++#include <cam/cam.h>
++#include <cam/scsi/scsi_pass.h>
++#include <camlib.h>
++void K3bCdDevice::DeviceManager::bsd_scan_devices()
+{
-+ QDateTime now = QDateTime::currentDateTime();
-+ if (m_lastRefresh.isValid() && m_lastRefresh.secsTo(now) < 3)
-+ return;
-+ m_lastRefresh = now;
-+ m_devices.clear();
-+ kdDebug() << "(K3bDeviceManager) Scanning for devices: " << sudo << endl;
-+ KTempFile tmpfile;
-+ tmpfile.setAutoDelete(true);
++ union ccb ccb;
++ int fd, i;
++ int need_close = 0;
++ int skip_device = 0;
++ int bus, target, lun;
++ QString dev1, dev2;
++
++ if ((fd = open(XPT_DEVICE, O_RDWR)) == -1)
++ {
++ kdDebug() << "couldn't open %s " << XPT_DEVICE << endl;
++ return;
++ }
++
++ memset(&ccb, 0, sizeof(ccb));
++
++ ccb.ccb_h.func_code = XPT_DEV_MATCH;
++ char buffer[100*sizeof(struct dev_match_result)];
++ ccb.cdm.match_buf_len = 100*sizeof(struct dev_match_result);
++ ccb.cdm.matches = (struct dev_match_result *)buffer;
++ ccb.cdm.num_matches = 0;
++ ccb.cdm.num_patterns = 0;
++ ccb.cdm.pattern_buf_len = 0;
++ do {
++ if (ioctl(fd, CAMIOCOMMAND, &ccb) == -1) {
++ kdDebug() << "(bsd_scan_devices) error sending CAMIOCOMMAND ioctl: " << errno << endl;
++ break;
++ }
++
++ if ((ccb.ccb_h.status != CAM_REQ_CMP)
++ || ((ccb.cdm.status != CAM_DEV_MATCH_LAST) && (ccb.cdm.status != CAM_DEV_MATCH_MORE))) {
++ kdDebug() << "(bsd_scan_devices) got CAM error " << ccb.ccb_h.status << ", CDM error %d" << ccb.cdm.status << endl;
++ break;
++ }
++ kdDebug() << "(bsd_scan_devices) number of matches " << (int)ccb.cdm.num_matches << endl;
++ for (int i = 0; i < (int)ccb.cdm.num_matches; i++) {
++ switch (ccb.cdm.matches[i].type) {
++ case DEV_MATCH_DEVICE: {
++ struct device_match_result *dev_result = &ccb.cdm.matches[i].result.device_result;
++
++ if (dev_result->flags & DEV_RESULT_UNCONFIGURED)
++ {
++ skip_device = 1;
++ break;
++ }
++ else
++ skip_device = 0;
++ if (need_close)
++ {
++ QString pass = dev1;
++ QString dev = "/dev/" + dev2;
++ if (dev2.startsWith("pass"))
++ {
++ pass = dev2;
++ dev = "/dev/" + dev1;
++ }
++#if __FreeBSD_version < 500100
++ dev += "c";
++#endif
+
-+ // create call
-+ QString call = "/bin/sh -c \"";
-+ if (sudo)
-+ call += "sudo ";
-+ call += "camcontrol devlist > " + tmpfile.name() + " 2>&1 \"";
-+ kdDebug() << "(K3bDeviceManager) Reading device list : " << call << endl;
-+ if (system(call.latin1()))
-+ {
-+ if (!sudo)
-+ {
-+ m_lastRefresh = m_lastRefresh.addDays(-1);
-+ bsd_scan_devices(true);
-+ }
-+ return;
-+ }
++ K3bDevice* device = new K3bDevice(dev.latin1());
++ device->m_bus = bus;
++ device->m_target = target;
++ device->m_lun = lun;
++ device->m_passDevice = "/dev/" + pass;
++ kdDebug() << "(bsd_scan_devices) add device " << dev << ":" << bus << ":" << target << ":" << lun << endl;
++ addDevice(device);
++ need_close = 0;
++ }
++ bus = dev_result->path_id;
++ target = dev_result->target_id;
++ lun = dev_result->target_lun;
+
-+ // read tmp file line by line
-+ QFile tmp (tmpfile.name());
-+ if ( tmp.open( IO_ReadOnly ) )
-+ {
-+ QTextStream stream( &tmp );
-+ while ( !stream.eof() )
++ need_close = 1;
++
++ break;
++ }
++ case DEV_MATCH_PERIPH: {
++ struct periph_match_result *periph_result = &ccb.cdm.matches[i].result.periph_result;
++
++ if (skip_device != 0)
++ break;
++
++ if (need_close > 1)
++ dev1 = periph_result->periph_name + QString::number(periph_result->unit_number);
++ else
++ dev2 = periph_result->periph_name + QString::number(periph_result->unit_number);
++
++ need_close++;
++ break;
++ }
++ }
++ }
++
++ } while ((ccb.ccb_h.status == CAM_REQ_CMP)
++ && (ccb.cdm.status == CAM_DEV_MATCH_MORE));
++
++ if (need_close)
+ {
-+ QString str = stream.readLine();
-+ if (!str.startsWith("<"))
-+ continue;
-+ str.remove(0,1);
-+ int i = str.find(">");
-+ if (i < 0)
-+ continue;
-+ QStringList details = QStringList::split(" ", str.left(i));
-+ i = str.find("at scbus", i);
-+ if (i < 0)
-+ continue;
-+ str.remove(0, i+8);
-+ i = str.find(" ");
-+ if (i < 0)
-+ continue;
-+ bool ok;
-+ int bus = str.left(i).toInt(&ok);
-+ if (!ok)
-+ continue;
-+ i = str.find("target ", i);
-+ if (i < 0)
-+ continue;
-+ str.remove(0, i+7);
-+ i = str.find(" ");
-+ if (i < 0)
-+ continue;
-+ int target = str.left(i).toInt(&ok);
-+ if (!ok)
-+ continue;
-+ i = str.find("lun ", i);
-+ if (i < 0)
-+ continue;
-+ str.remove(0, i+4);
-+ i = str.find(" ");
-+ if (i < 0)
-+ continue;
-+ int lun = str.left(i).toInt(&ok);
-+ if (!ok)
-+ continue;
-+ i = str.find("(", i);
-+ if (i < 0)
-+ continue;
-+ str.remove(0, i+1);
-+ i = str.find(",");
-+ if (i < 0)
-+ continue;
-+ QString name = str.left(i);
-+ str.remove(0, i+1);
-+ i = str.find(")");
-+ if (i < 0)
-+ continue;
-+ QString pass = name;
-+ if (name.startsWith("pass"))
-+ name = str.left(i);
-+ else
-+ pass = str.left(i);
-+ QString vendor, product, revision;
-+ if (details.count() > 0)
-+ revision = details.last();
-+ details.pop_back();
-+ if (details.count() > 0)
-+ product = details.last();
-+ details.pop_back();
-+ if (details.count() > 0)
-+ vendor = details.join(" ");
-+ if (!name.startsWith("cd"))
-+ continue;
-+ kdDebug() << "(K3bDeviceManager) Found device " << name << ", pass = " << pass << ", bus = " << bus << ", target = " << target << ", lun = " << lun << endl;
-+ kdDebug() << "(K3bDeviceManager) vendor: " << vendor << ", product: " << product << ", revision: " << revision << ", target = " << target << ", lun = " << lun << endl;
-+#if __FreeBSD_version >= 500100
-+ m_devices.push_back(BSDDevice("/dev/" + name, "/dev/" + pass, vendor, product, revision, bus, target, lun));
-+#else
-+ m_devices.push_back(BSDDevice("/dev/" + name + "c", "/dev/" + pass, vendor, product, revision, bus, target, lun));
++ QString pass = dev1;
++ QString dev = "/dev/" + dev2;
++ if (dev2.startsWith("pass"))
++ {
++ pass = dev2;
++ dev = "/dev/" + dev1;
++ }
++#if __FreeBSD_version < 500100
++ dev += "c";
+#endif
-+ }
-+ }
++ K3bDevice* device = new K3bDevice(dev.latin1());
++ device->m_bus = bus;
++ device->m_target = target;
++ device->m_lun = lun;
++ device->m_passDevice = "/dev/" + pass;
++ kdDebug() << "(bsd_scan_devices) add device " << dev << ":" << bus << ":" << target << ":" << lun << endl;
++ addDevice(device);
++ }
++ close(fd);
+}
+#endif
diff --git a/sysutils/k3b/files/patch-src-device-k3bdevicemanager.h b/sysutils/k3b/files/patch-src-device-k3bdevicemanager.h
index 8d285e3ec035..eb08ec300f78 100644
--- a/sysutils/k3b/files/patch-src-device-k3bdevicemanager.h
+++ b/sysutils/k3b/files/patch-src-device-k3bdevicemanager.h
@@ -1,42 +1,12 @@
--- src/device/k3bdevicemanager.h.orig Wed Jan 21 11:20:11 2004
-+++ src/device/k3bdevicemanager.h Fri Feb 13 21:03:38 2004
-@@ -24,6 +24,10 @@
- #include <qptrlist.h>
-
- #include <kdebug.h>
-+#ifdef __FreeBSD__
-+#include <qdatetime.h>
-+#include <qvaluelist.h>
-+#endif
-
- class KProcess;
- class KConfig;
-@@ -112,6 +116,29 @@
++++ src/device/k3bdevicemanager.h Tue May 11 22:57:03 2004
+@@ -112,6 +112,10 @@
class Private;
Private* d;
+#ifdef __FreeBSD__
-+ void bsd_scan_devices(bool sudo);
-+ QDateTime m_lastRefresh;
-+ class BSDDevice
-+ {
-+ public:
-+ BSDDevice() : m_bus(-1), m_target(-1), m_lun(-1) {}
-+ BSDDevice(const QString & name, const QString & passDevice, const QString & vendor,
-+ const QString & product, const QString & revision, int bus, int target, int lun) :
-+ m_name(name), m_passDevice(passDevice), m_vendor(vendor), m_product(product),
-+ m_revision(revision), m_bus(bus), m_target(target), m_lun(lun) {}
-+ BSDDevice(const BSDDevice & src) :
-+ m_name(src.m_name), m_passDevice(src.m_passDevice), m_vendor(src.m_vendor), m_product(src.m_product),
-+ m_revision(src.m_revision), m_bus(src.m_bus), m_target(src.m_target), m_lun(src.m_lun) {}
-+ const BSDDevice & operator= (const BSDDevice & src)
-+ { m_name = src.m_name; m_passDevice = src.m_passDevice; m_vendor = src.m_vendor;
-+ m_product = src.m_product; m_revision = src.m_revision; m_bus = src.m_bus; m_target = src.m_target;
-+ m_lun = src.m_lun; return *this; }
-+ QString m_name, m_passDevice, m_vendor, m_product, m_revision;
-+ int m_bus, m_target, m_lun;
-+ };
-+ QValueList<BSDDevice> m_devices;
++ void bsd_scan_devices();
++ CdDevice* addDevice( CdDevice* );
+#endif
};
}
diff --git a/sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp b/sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp
index 6c11e8f5307f..f4814b46bbff 100644
--- a/sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp
+++ b/sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp
@@ -1,18 +1,5 @@
--- src/device/k3bscsicommand.cpp.orig Wed Jan 21 11:20:11 2004
-+++ src/device/k3bscsicommand.cpp Fri Feb 13 21:03:38 2004
-@@ -1,10 +1,10 @@
- /*
- *
-- * $Id: k3bscsicommand.cpp,v 1.4 2004/01/21 10:20:11 trueg Exp $
-+ * $Id: k3bscsicommand.cpp,v 1.3 2003/12/31 14:15:17 trueg Exp $
- * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org>
- *
- * This file is part of the K3b project.
-- * Copyright (C) 1998-2004 Sebastian Trueg <trueg@k3b.org>
-+ * Copyright (C) 1998-2003 Sebastian Trueg <trueg@k3b.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
++++ src/device/k3bscsicommand.cpp Mon May 24 23:32:04 2004
@@ -58,13 +58,14 @@
@@ -34,7 +21,7 @@
K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev )
: m_device(dev)
-@@ -135,6 +136,105 @@
+@@ -135,6 +136,155 @@
return 0;
}
@@ -65,42 +52,41 @@
+#include <sys/ioctl.h>
+
+K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev )
-+ : m_device(dev)
++ : closecam(true), m_device(dev)
+{
-+ clear();
++ cam = cam_open_pass (m_device->m_passDevice.latin1(),O_RDWR,NULL);
++ kdDebug() << "(K3bCdDevice::ScsiCommand) open device " << m_device->m_passDevice << ((cam)?" succeeded.":" failed.") << endl;
++ clear();
++}
++
++K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev, struct cam_device * c)
++ : closecam(false), cam(c), m_device(dev)
++{
++ clear();
+}
+
+K3bCdDevice::ScsiCommand::~ScsiCommand()
+{
-+ if(cam)
++ if(cam && closecam)
++ {
+ cam_close_device(cam);
-+// if (m_fd >0)
-+// close(m_fd);
++ kdDebug() << "(K3bCdDevice::ScsiCommand) device " << m_device->m_passDevice << " closed." << endl;
++ }
+}
+
+
+void K3bCdDevice::ScsiCommand::clear()
+{
-+// char pass[32];
-+ cam=NULL;
+ memset (&ccb,0,sizeof(ccb));
-+ ccb.ccb_h.func_code = XPT_GDEVLIST;
-+// if (ioctl (m_fd,CAMGETPASSTHRU,&ccb) < 0) return;
-+// sprintf (pass,"/dev/%.15s%u",ccb.cgdl.periph_name,ccb.cgdl.unit_number);
-+ cam = cam_open_pass (m_device->m_passDevice.latin1(),O_RDWR,NULL);
-+ kdDebug() << "(K3bCdDevice::ScsiCommand) open device " << m_device->m_passDevice << ((cam)?" succeeded.":" failed.") << endl;
++ if (!cam)
++ return;
++ ccb.ccb_h.path_id = cam->path_id;
++ ccb.ccb_h.target_id = cam->target_id;
++ ccb.ccb_h.target_lun = cam->target_lun;
+}
+
+unsigned char& K3bCdDevice::ScsiCommand::operator[]( size_t i )
+{
-+ if (!i && cam)
-+ {
-+ memset(&ccb,0,sizeof(ccb));
-+ ccb.ccb_h.path_id = cam->path_id;
-+ ccb.ccb_h.target_id = cam->target_id;
-+ ccb.ccb_h.target_lun = cam->target_lun;
-+ cam_fill_csio (&(ccb.csio), 1, NULL, CAM_DEV_QFRZDIS, MSG_SIMPLE_Q_TAG, NULL, 0, sizeof(ccb.csio.sense_data), 0, 30*1000);
-+ }
+ ccb.csio.cdb_len = i+1;
+ return ccb.csio.cdb_io.cdb_bytes[i];
+}
@@ -114,26 +100,77 @@
+ return -1;
+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport command " << QString::number((int)ccb.csio.cdb_io.cdb_bytes[0], 16) << ", length: " << (int)ccb.csio.cdb_len << endl;
+ int ret=0;
-+ ccb.csio.ccb_h.flags |= dir;
-+ ccb.csio.data_ptr = (u_int8_t *)data;
-+ ccb.csio.dxfer_len = len;
++ unsigned char command = ccb.csio.cdb_io.cdb_bytes[0];
++ int direction = CAM_DEV_QFRZDIS;
++ if (!len)
++ direction |= CAM_DIR_NONE;
++ else
++ direction |= (dir & TR_DIR_READ)?CAM_DIR_IN : CAM_DIR_OUT;
++ cam_fill_csio (&(ccb.csio), 1, NULL, direction | CAM_DEV_QFRZDIS, MSG_SIMPLE_Q_TAG, (u_int8_t *)data, len, sizeof(ccb.csio.sense_data), ccb.csio.cdb_len, 30*1000);
++ unsigned char * sense = (unsigned char *)&ccb.csio.sense_data;
+ if ((ret = cam_send_ccb(cam, &ccb)) < 0)
+ {
+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed: " << ret << endl;
-+ return -1;
++ goto dump_error;
+ }
+ if ((ccb.ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP)
-+ {
-+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport succeeded" << endl;
-+ return 0;
-+ }
++ return 0;
++
+ errno = EIO;
-+ ret = ERRCODE(((unsigned char *)&ccb.csio.sense_data));
++ // FreeBSD 5-CURRENT since 2003-08-24, including 5.2 fails to
++ // pull sense data automatically, at least for ATAPI transport,
++ // so I reach for it myself...
++ if ((ccb.csio.scsi_status==SCSI_STATUS_CHECK_COND) &&
++ !(ccb.ccb_h.status&CAM_AUTOSNS_VALID))
++ {
++ u_int8_t _sense[18];
++ u_int32_t resid=ccb.csio.resid;
++
++ memset(_sense,0,sizeof(_sense));
++
++ operator[](0) = 0x03; // REQUEST SENSE
++ ccb.csio.cdb_io.cdb_bytes[4] = sizeof(_sense);
++ ccb.csio.cdb_len = 6;
++ ccb.csio.ccb_h.flags |= CAM_DIR_IN|CAM_DIS_AUTOSENSE;
++ ccb.csio.data_ptr = _sense;
++ ccb.csio.dxfer_len = sizeof(_sense);
++ ccb.csio.sense_len = 0;
++ ret = cam_send_ccb(cam, &ccb);
++
++ ccb.csio.resid = resid;
++ if (ret<0)
++ {
++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (2): " << ret << endl;
++ ret = -1;
++ goto dump_error;
++ }
++ if ((ccb.ccb_h.status&CAM_STATUS_MASK) != CAM_REQ_CMP)
++ {
++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (3): " << ret << endl;
++ errno=EIO,-1;
++ ret = -1;
++ goto dump_error;
++ }
++
++ memcpy(sense,_sense,sizeof(_sense));
++ }
++
++ ret = ERRCODE(sense);
++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (4): " << ret << endl;
+ if (ret == 0)
+ ret = -1;
+ else
+ CREAM_ON_ERRNO(((unsigned char *)&ccb.csio.sense_data));
-+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (2): " << ret << endl;
++dump_error:
++ kdDebug() << "(K3bCdDevice::ScsiCommand) failed: " << endl
++ << " command: " << QString("%1 (%2)")
++ .arg( MMC::commandString( ccb.csio.cdb_io.cdb_bytes[0] ) )
++ .arg( QString::number(ccb.csio.cdb_io.cdb_bytes[0], 16) ) << endl
++ << " errorcode: " << QString::number(((struct scsi_sense_data *)sense)->error_code & SSD_ERRCODE, 16) << endl
++ << " sense key: " << senseKeyToString(((struct scsi_sense_data *)sense)->flags & SSD_KEY) << endl
++ << " asc: " << QString::number(((struct scsi_sense_data *)sense)->add_sense_code, 16) << endl
++ << " ascq: " << QString::number(((struct scsi_sense_data *)sense)->add_sense_code_qual, 16) << endl;
++
+ return ret;
+}
+#endif
diff --git a/sysutils/k3b/files/patch-src-device-k3bscsicommand.h b/sysutils/k3b/files/patch-src-device-k3bscsicommand.h
index 06cebf91dd79..e50cd874fde6 100644
--- a/sysutils/k3b/files/patch-src-device-k3bscsicommand.h
+++ b/sysutils/k3b/files/patch-src-device-k3bscsicommand.h
@@ -1,18 +1,5 @@
--- src/device/k3bscsicommand.h.orig Wed Jan 21 11:20:11 2004
-+++ src/device/k3bscsicommand.h Fri Feb 13 21:03:38 2004
-@@ -1,10 +1,10 @@
- /*
- *
-- * $Id: k3bscsicommand.h,v 1.3 2004/01/21 10:20:11 trueg Exp $
-+ * $Id: k3bscsicommand.h,v 1.2 2003/12/19 19:40:40 trueg Exp $
- * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org>
- *
- * This file is part of the K3b project.
-- * Copyright (C) 1998-2004 Sebastian Trueg <trueg@k3b.org>
-+ * Copyright (C) 1998-2003 Sebastian Trueg <trueg@k3b.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
++++ src/device/k3bscsicommand.h Tue May 11 22:57:03 2004
@@ -17,9 +17,27 @@
#define _K3B_SCSI_COMMAND_H_
@@ -41,24 +28,7 @@
#include <qstring.h>
-@@ -87,16 +105,24 @@
- }
-
-
-+#ifndef __FreeBSD__
- enum TransportDirection {
- TR_DIR_NONE,
- TR_DIR_READ,
- TR_DIR_WRITE
- };
-+#else
-+ enum TransportDirection {
-+ TR_DIR_NONE = 0,
-+ TR_DIR_READ = CAM_DIR_IN,
-+ TR_DIR_WRITE = CAM_DIR_OUT
-+ };
-+#endif
-
+@@ -96,7 +114,7 @@
class ScsiCommand
{
public:
@@ -67,7 +37,7 @@
ScsiCommand( const CdDevice* );
~ScsiCommand();
-@@ -109,9 +135,13 @@
+@@ -109,10 +127,16 @@
size_t len = 0 );
private:
@@ -76,9 +46,12 @@
struct request_sense m_sense;
-
+#else
++ ScsiCommand( const CdDevice* , struct cam_device *);
++ bool closecam;
+ struct cam_device *cam;
+ union ccb ccb;
-+#endif
int m_fd;
++#endif
const CdDevice* m_device;
bool m_needToCloseDevice;
+ };
diff --git a/sysutils/k3b/files/patch-src-rip-k3bdvdrippingprocess.cpp b/sysutils/k3b/files/patch-src-rip-k3bdvdrippingprocess.cpp
new file mode 100644
index 000000000000..3406f0b1f2e2
--- /dev/null
+++ b/sysutils/k3b/files/patch-src-rip-k3bdvdrippingprocess.cpp
@@ -0,0 +1,16 @@
+--- src/rip/k3bdvdrippingprocess.cpp.orig Wed Jan 21 11:20:20 2004
++++ src/rip/k3bdvdrippingprocess.cpp Tue May 11 22:57:03 2004
+@@ -278,10 +278,13 @@
+ void K3bDvdRippingProcess::slotPreProcessingDvd() {
+ QString video;
+ QDir video_ts( m_mountPoint + "/VIDEO_TS");
++#ifndef FreeBSD
++// on FreeBSD both /VIDEO_TS and /video_ts exist on dvd devices ?!?
+ if( video_ts.exists() ) {
+ m_udfMount = true;
+ kdDebug() << "(K3bDvdRippingProcess) <" << m_mountPoint << "> has UDF filesystem." << endl;
+ }
++#endif
+ video_ts.setPath( m_mountPoint + "/video_ts");
+ if( !video_ts.exists() && !m_udfMount){
+ m_preProcessingFailed = true;
diff --git a/sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp b/sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp
index cfd8f4e7c79a..214c1d362c8e 100644
--- a/sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp
+++ b/sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp
@@ -1,5 +1,5 @@
--- src/rip/k3bmovieview.cpp.orig Fri Feb 6 12:08:51 2004
-+++ src/rip/k3bmovieview.cpp Fri Feb 13 21:03:38 2004
++++ src/rip/k3bmovieview.cpp Tue May 11 22:57:03 2004
@@ -223,8 +223,11 @@
}
diff --git a/sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp b/sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp
index 9ef70edca96a..3ea66527aaa7 100644
--- a/sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp
+++ b/sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp
@@ -1,5 +1,5 @@
--- src/rip/k3btcwrapper.cpp.orig Wed Jan 21 11:20:20 2004
-+++ src/rip/k3btcwrapper.cpp Fri Feb 13 21:03:38 2004
++++ src/rip/k3btcwrapper.cpp Tue May 11 22:57:03 2004
@@ -65,7 +65,12 @@
//K3bProcess *p = new K3bProcess();
emit tcprobeTitleParsed( m_currentTitle );
@@ -13,3 +13,12 @@
//p->setSplitStdout( true );
connect( p, SIGNAL(receivedStderr(KProcess*, char*, int)), this, SLOT(slotParseTcprobeError(KProcess*, char*, int)) );
connect( p, SIGNAL(receivedStdout(KProcess*, char*, int)), this, SLOT(slotParseTcprobeOutput(KProcess*, char*, int)) );
+@@ -77,7 +82,7 @@
+ if( !p->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) {
+ // something went wrong when starting the program
+ // it "should" be the executable
+- kdDebug() << "(K3bDirView) Error during checking drive for DVD." << endl;
++ kdDebug() << "(K3bTcWrapper) Error during checking drive for DVD." << endl;
+ }
+ }
+
diff --git a/sysutils/k3b/pkg-message b/sysutils/k3b/pkg-message
index fb5f51307cac..d28ebfa63e81 100644
--- a/sysutils/k3b/pkg-message
+++ b/sysutils/k3b/pkg-message
@@ -9,26 +9,18 @@ Notes:
Alternatively do all of the following:
3a. set the suid flag on cdrecord and cdrdao. The 'Notes' the chapter of
'man cdrecord' discusses this.
-3b. - install sudo (security/sudo) and add the following line or similar to
- sudoers (usually in /usr/local/etc/sudoers):
- ALL ALL = NOPASSWD: /sbin/camcontrol devlist
- - or execute 'camcontrol devlist'. For every user who should be able to use
- k3b. Resolve all errors e.g. by giving him/her access rights to /dev/xpt0.
- 'camcontrol devlist' must run without error for all these users!
- Note that giving access rights to /dev/xpt* might be a security leak!
- - or give camcontrol the suid flag, which is a security leak as well.
-3c. - For every user who should be able to use k3b and for every CD or DVD
+3b. - For every user who should be able to use k3b and for every CD or DVD
device add a directory in the users home directory. These directories
must be owned by the corresponding user. For each such directory add a
line in /ect/fstab (see remark 2), like:
/dev/cd0c /usr/home/XXX/cdrom cd9660 ro,noauto,nodev,nosuid 0 0
Furthermore allow user mounts as described in topic 9.22 of the FAQ:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/disks.html#USER-FLOPPYMOUNT
- - or just give mount and umount the sudo flag, which is a security leak.
-3d. - Every user who should be able to use k3b must have read and write access
- to all pass through devices connected with CD and DVD drives. Run
- 'camcontrol devlist' to identify those devices (seek string 'passX' at
- the end of each line and modify the rights of /dev/passX). Note, that
+ - or just give mount and umount the suid flag, which is a security leak.
+3c. - Every user who should be able to use k3b must have read and write access
+ to all pass through devices connected with CD and DVD drives and to the /dev/xpt0
+ device. Run 'camcontrol devlist' to identify those devices (seek string 'passX'
+ at the end of each line and modify the rights of /dev/passX). Note, that
this is a security leak as well but that there is no alternative!
4. Create a directory on a partition, which has enough disk space to hold a CDs
or DVDs content (usually below /usr). Enter this directory in Settings->
@@ -40,14 +32,14 @@ Notes:
work. See http://cdrdao.sourceforge.net/drives.html.
6. To burn video CDs install the port multimedia/vcdimager.
7. To rip DVDs additionally install the ports multimedia/transcode,
- multimedia/libdvdread and multimedia/xvid. Note that multimedia/transcode
- requires some variables to be set. Type "make fetch" in the
- multimedia/transcode ports directory for details. The ripping process
- itself is described in
- http://k3b.sourceforge.net/cgi-bin/index.pl/videoencoding.
+ multimedia/libdvdread and multimedia/xvid. Note that k3b does NOT work with
+ transcode 0.6.12. 0.6.10 is the last known working version. The ripping process
+ itself is described in http://k3b.sourceforge.net/cgi-bin/index.pl/videoencoding.
8. To burn bootable video CDs, install the port multimedia/emovix.
9. To burn DVDs, install the port sysutils/dvd+rw-tools.
10. To normalize the volumes of audio cds, install the port audio/normalize.
11. To rip into more audio formats, install the port audio/sox.
+UPGRADERS FROM 0.11.6 OR BELOW SHOULD NOTE THE CHANGED TOPIC 3C!!!
+
To read this instructions again, type 'make showinfo' in the k3b port directory
diff --git a/sysutils/k3b/pkg-plist b/sysutils/k3b/pkg-plist
index ee921880d623..8619a4eec1ed 100644
--- a/sysutils/k3b/pkg-plist
+++ b/sysutils/k3b/pkg-plist
@@ -35,6 +35,7 @@ include/k3bexternalbinmanager.h
include/k3bfileitem.h
include/k3bglobals.h
include/k3binteractiondialog.h
+include/k3bintvalidator.h
include/k3biso9660.h
include/k3bisooptions.h
include/k3bjob.h