diff options
Diffstat (limited to 'sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp')
-rw-r--r-- | sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp | 270 |
1 files changed, 0 insertions, 270 deletions
diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp b/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp deleted file mode 100644 index a839f7e2a930..000000000000 --- a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp +++ /dev/null @@ -1,270 +0,0 @@ ---- src/device/k3bdevicemanager.cpp.orig Sat Jul 17 11:50:08 2004 -+++ src/device/k3bdevicemanager.cpp Sun Aug 22 15:28:36 2004 -@@ -49,6 +49,12 @@ - #include <sys/stat.h> - #include <sys/ioctl.h> - -+#ifdef __FreeBSD__ -+#include <osreldate.h> -+#include <ktempfile.h> -+#include <sys/param.h> -+#endif -+ - - #ifdef Q_OS_LINUX - -@@ -196,6 +202,13 @@ - { - m_foundDevices = 0; - -+#ifdef __FreeBSD__ -+// What k3b does here is the following: it takes a list of device point, which are good candidates for cd drives -+// 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(); -+#else - QFile info("/proc/sys/dev/cdrom/info"); - QString line,devstring; - info.open(IO_ReadOnly); -@@ -286,6 +299,7 @@ - // m_foundDevices++; - // } - -+#endif - scanFstab(); - - return m_foundDevices; -@@ -423,6 +437,7 @@ - bool K3bCdDevice::DeviceManager::testForCdrom(const QString& devicename) - { - bool ret = false; -+#ifndef __FreeBSD__ - int cdromfd = K3bCdDevice::openDevice( devicename.ascii() ); - if (cdromfd < 0) { - kdDebug() << "could not open device " << devicename << " (" << strerror(errno) << ")" << endl; -@@ -463,11 +478,36 @@ - } - - ::close( cdromfd ); -+#endif - return ret; - } - - K3bDevice* K3bCdDevice::DeviceManager::addDevice( const QString& devicename ) - { -+#ifdef __FreeBSD__ -+// 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 = findDevice(devicename); -+ if (device) -+ return 0; -+ // resolve all symlinks -+ QString resolved = resolveSymLink( devicename ); -+ kdDebug() << "(K3bDeviceManager) " << devicename << " resolved to " << resolved << endl; -+ if( K3bDevice* oldDev = findDevice( resolved ) ) -+ { -+ kdDebug() << "(K3bDeviceManager) dev already found" << endl; -+ oldDev->addDeviceNode( resolved ); -+ 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 -@@ -499,6 +539,7 @@ - device->m_target = target; - device->m_lun = lun; - } -+#endif - - if( !device->init() ) { - kdDebug() << "Could not initialize device " << devicename << endl; -@@ -574,9 +615,20 @@ - - if( K3bDevice* dev = findDevice( resolveSymLink(md) ) ) - { -+#ifndef __FreeBSD__ - kdDebug() << "(K3bDeviceManager) found device for " << md << ": " << resolveSymLink(md) << endl; - if( dev->mountDevice().isEmpty() ) { - dev->setMountPoint( mountInfo->fs_file ); -+#else -+ kdDebug() << "(K3bDeviceManager) found device for " << md << " (" << resolveSymLink(md) << "): " << mountInfo->fs_file << endl; -+// Several mount points for one device might exist. If more than one are found, the one with -+// user permission should have a higher priority. -+ struct stat filestat; -+ if( dev->mountDevice().isEmpty() || (mountInfo->fs_file && !stat(mountInfo->fs_file, &filestat) && filestat.st_uid == geteuid())) -+ { -+ kdDebug() << "(K3bDeviceManager) setting mount point for device " << md << ": " << mountInfo->fs_file << endl; -+ dev->setMountPoint( mountInfo->fs_file ); -+#endif - dev->setMountDevice( md ); - dev->m_supermount = supermount; - } -@@ -585,6 +637,8 @@ - { - // compare bus, id, lun since the same device can for example be - // determined as /dev/srX or /dev/scdX -+#ifndef __FreeBSD__ -+// On FreeBSD scsi parameters can not be extracted from a file handle - int bus = -1, id = -1, lun = -1; - if( determineBusIdLun( mountInfo->fs_spec, bus, id, lun ) ) { - if( K3bDevice* dev = findDevice( bus, id, lun ) ) { -@@ -595,6 +649,17 @@ - } - } - } -+#else -+// Therefore they are looked up in the device list. -+ kdDebug() << "(K3bDeviceManager) device: " << mountInfo->fs_spec << endl; -+ if( K3bDevice* dev = findDevice( mountInfo->fs_spec ) ) { -+ kdDebug() << " found! " << endl; -+ if( dev->mountDevice().isEmpty() ) { -+ dev->setMountPoint( mountInfo->fs_file ); -+ dev->setMountDevice( md ); -+ } -+ } -+#endif - - - } -@@ -670,5 +735,131 @@ - return QString::fromLatin1( resolved ); - } - -+ -+#ifdef __FreeBSD__ -+#include <cam/cam.h> -+#include <cam/scsi/scsi_pass.h> -+#include <camlib.h> -+void K3bCdDevice::DeviceManager::bsd_scan_devices() -+{ -+ 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 -+ -+ 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; -+ -+ 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 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 - - #include "k3bdevicemanager.moc" |