From 7214a7b6b590d62aac622dbf2de31b1ca1ba78d5 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sun, 7 Jul 2019 22:21:21 +0900 Subject: [PATCH] tdehw: code restructuring for tdestoragedevice. 1. added disk helper source files 2. removed WITH_UDISKS2, WITH_UDISK, WITH_UDEVIL defines. The respective code is always included 3. order of execution for mount/umount activities: udisks2, udisk, udevil, pmount. Signed-off-by: Michele Calgaro --- CMakeLists.txt | 3 - tdecore/tdehw/CMakeLists.txt | 25 +- tdecore/tdehw/disksHelper.cpp | 301 +++++++++++++++ tdecore/tdehw/disksHelper.h | 36 ++ tdecore/tdehw/tdestoragedevice.cpp | 563 +++++------------------------ tdeioslave/file/file.cc | 32 +- 6 files changed, 452 insertions(+), 508 deletions(-) create mode 100644 tdecore/tdehw/disksHelper.cpp create mode 100644 tdecore/tdehw/disksHelper.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b3541bde..a35aa8bf1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,9 +92,6 @@ OPTION( WITH_HAL "Enable HAL support" OFF ) OPTION( WITH_DEVKITPOWER "Enable DeviceKit Power support" OFF ) OPTION( WITH_LOGINDPOWER "Enable Logind/Systemd Power support" OFF ) OPTION( WITH_UPOWER "Enable uPower support" ${WITH_ALL_OPTIONS} ) -OPTION( WITH_UDISKS "Enable uDisks support" ${WITH_ALL_OPTIONS} ) -OPTION( WITH_UDISKS2 "Enable uDisks2 support" ${WITH_ALL_OPTIONS} ) -OPTION( WITH_UDEVIL "Enable udevil support" ${WITH_ALL_OPTIONS} ) OPTION( WITH_CONSOLEKIT "Enable ConsoleKit support" ${WITH_ALL_OPTIONS} ) OPTION( WITH_NETWORK_MANAGER_BACKEND "Enable network-manager support" OFF ) OPTION( WITH_SUDO_TDESU_BACKEND "Use sudo as backend for tdesu (default is su)" OFF ) diff --git a/tdecore/tdehw/CMakeLists.txt b/tdecore/tdehw/CMakeLists.txt index 02b775931..9495b3717 100644 --- a/tdecore/tdehw/CMakeLists.txt +++ b/tdecore/tdehw/CMakeLists.txt @@ -17,13 +17,6 @@ if( NOT DBUS_SYSTEM_BUS ) set( DBUS_SYSTEM_BUS "unix:path=/var/run/dbus/system_bus_socket" CACHE INTERNAL "" FORCE ) endif() -if( WITH_TDEHWLIB_DAEMONS OR WITH_HAL OR WITH_DEVKITPOWER OR WITH_UPOWER OR WITH_UDISKS OR WITH_UDISKS2 OR - WITH_NETWORK_MANAGER_BACKEND OR WITH_CONSOLEKIT ) - list( APPEND TDEHW_CUSTOM_INCLUDE_DIRS ${DBUS_TQT_INCLUDE_DIRS} ) - list( APPEND TDEHW_CUSTOM_LIBRARY_DIRS ${DBUS_TQT_LIBRARY_DIRS} ) - list( APPEND TDEHW_CUSTOM_LIBRARIES ${DBUS_TQT_LIBRARIES} ) -endif( ) - if( WITH_TDEHWLIB_DAEMONS ) add_definitions( -DWITH_TDEHWLIB_DAEMONS ) endif( ) @@ -44,18 +37,6 @@ if( WITH_UPOWER ) add_definitions( -DWITH_UPOWER ) endif( ) -if( WITH_UDISKS ) - add_definitions( -DWITH_UDISKS ) -endif( ) - -if( WITH_UDISKS2 ) - add_definitions( -DWITH_UDISKS2 ) -endif( ) - -if( WITH_UDEVIL ) - add_definitions( -DWITH_UDEVIL ) -endif( ) - if( WITH_CONSOLEKIT ) add_definitions( -DWITH_CONSOLEKIT ) endif( ) @@ -92,14 +73,17 @@ include_directories( ${CMAKE_SOURCE_DIR}/tdecore ${CMAKE_SOURCE_DIR}/dcop ${CMAKE_BINARY_DIR}/tdeio/kssl + ${DBUS_TQT_INCLUDE_DIRS} ${TDEHW_CUSTOM_INCLUDE_DIRS} ) link_directories( ${TQT_LIBRARY_DIRS} + ${DBUS_TQT_LIBRARY_DIRS} ${TDEHW_CUSTOM_LIBRARY_DIRS} ) + ##### headers ################################### install( FILES tdehardwaredevices.h tdenetworkconnections.h tdegenericdevice.h @@ -120,10 +104,11 @@ set( ${target}_SRCS tdemainspowerdevice.cpp tdenetworkdevice.cpp tdebacklightdevice.cpp tdemonitordevice.cpp tdesensordevice.cpp tderootsystemdevice.cpp tdeeventdevice.cpp tdeinputdevice.cpp tdecryptographiccarddevice.cpp + disksHelper.cpp ) tde_add_library( ${target} STATIC_PIC AUTOMOC SOURCES ${${target}_SRCS} - LINK udev ${TDENM_LIBRARIES} ${TDEUPOWER_LIBRARIES} + LINK udev ${TDENM_LIBRARIES} ${TDEUPOWER_LIBRARIES} ${DBUS_TQT_LIBRARIES} ${TDEHW_CUSTOM_LIBRARIES} ) diff --git a/tdecore/tdehw/disksHelper.cpp b/tdecore/tdehw/disksHelper.cpp new file mode 100644 index 000000000..e8e164b56 --- /dev/null +++ b/tdecore/tdehw/disksHelper.cpp @@ -0,0 +1,301 @@ +/* This file is part of the TDE libraries + Copyright (C) 2012 Timothy Pearson + (C) 2013 Golubev Alexander + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "disksHelper.h" +#include "tdestoragedevice.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include "tqdbusdatalist.h" + +//------------------------------- +// UDisks +//------------------------------- +bool ejectDriveUDisks(TDEStorageDevice* sdevice) { + TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); + if (dbusConn.isConnected()) { + TQString blockDeviceString = sdevice->deviceNode(); + blockDeviceString.replace("/dev/", ""); + blockDeviceString.replace("-", "_2d"); + blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString; + + // Eject the drive! + TQT_DBusError error; + TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn); + if (driveControl.canSend()) { + TQValueList params; + TQT_DBusDataList options; + params << TQT_DBusData::fromList(options); + TQT_DBusMessage reply = driveControl.sendWithReply("DriveEject", params, &error); + if (error.isValid()) { + // Error! + printf("[ERROR][tdehwlib] ejectDriveUDisks: %s\n", error.name().ascii()); fflush(stdout); + return false; + } + else { + return true; + } + } + } + return false; +} + +int mountDriveUDisks(TQString deviceNode, TQString fileSystemType, TQStringList mountOptions, TQString* errStr) { + TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); + if (dbusConn.isConnected()) { + TQString blockDeviceString = deviceNode; + blockDeviceString.replace("/dev/", ""); + blockDeviceString.replace("-", "_2d"); + blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString; + + // Mount the drive! + TQT_DBusError error; + TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn); + if (driveControl.canSend()) { + TQValueList params; + params << TQT_DBusData::fromString(fileSystemType); + params << TQT_DBusData::fromList(TQT_DBusDataList(mountOptions)); + TQT_DBusMessage reply = driveControl.sendWithReply("FilesystemMount", params, &error); + if (error.isValid()) { + // Error! + if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { + // Service not installed or unavailable + return -2; + } + if (errStr) { + *errStr = error.name() + ": " + error.message(); + } + else { + printf("[ERROR][tdehwlib] mountDriveUDisks: %s\n", error.name().ascii()); fflush(stdout); + } + return -1; + } + else { + return 0; + } + } + else { + return -2; + } + } + return -2; +} + +int unMountDriveUDisks(TQString deviceNode, TQStringList unMountOptions, TQString* errStr) { + TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); + if (dbusConn.isConnected()) { + TQString blockDeviceString = deviceNode; + blockDeviceString.replace("/dev/", ""); + blockDeviceString.replace("-", "_2d"); + blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString; + + // Mount the drive! + TQT_DBusError error; + TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn); + if (driveControl.canSend()) { + TQValueList params; + params << TQT_DBusData::fromList(TQT_DBusDataList(unMountOptions)); + TQT_DBusMessage reply = driveControl.sendWithReply("FilesystemUnmount", params, &error); + if (error.isValid()) { + // Error! + if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { + // Service not installed or unavailable + return -2; + } + if (errStr) { + *errStr = error.name() + ": " + error.message(); + } + else { + printf("[ERROR][tdehwlib] unMountDriveUDisks: %s\n", error.name().ascii()); fflush(stdout); + } + return -1; + } + else { + return 0; + } + } + else { + return -2; + } + } + return -2; +} + +//------------------------------- +// UDisks2 +//------------------------------- +bool ejectDriveUDisks2(TDEStorageDevice* sdevice) { + TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); + if (dbusConn.isConnected()) { + TQString blockDeviceString = sdevice->deviceNode(); + blockDeviceString.replace("/dev/", ""); + blockDeviceString.replace("-", "_2d"); + blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString; + TQT_DBusProxy hardwareControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.DBus.Properties", dbusConn); + if (hardwareControl.canSend()) { + // get associated udisks2 drive path + TQT_DBusError error; + TQValueList params; + params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Block") << TQT_DBusData::fromString("Drive"); + TQT_DBusMessage reply = hardwareControl.sendWithReply("Get", params, &error); + if (error.isValid()) { + // Error! + printf("[ERROR][tdehwlib] ejectDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); + return false; + } + else { + if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) { + TQT_DBusObjectPath driveObjectPath = reply[0].toVariant().value.toObjectPath(); + if (!driveObjectPath.isValid()) { + return false; + } + + error = TQT_DBusError(); + TQT_DBusProxy driveInformation("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.DBus.Properties", dbusConn); + // can eject? + TQValueList params; + params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Drive") << TQT_DBusData::fromString("Ejectable"); + TQT_DBusMessage reply = driveInformation.sendWithReply("Get", params, &error); + if (error.isValid()) { + // Error! + printf("[ERROR][tdehwlib] ejectDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); + return false; + } + if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) { + bool ejectable = reply[0].toVariant().value.toBool(); + if (!ejectable) { + return false; + } + + // Eject the drive! + TQT_DBusProxy driveControl("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.UDisks2.Drive", dbusConn); + TQValueList params; + TQT_DBusDataMap options(TQT_DBusData::Variant); + params << TQT_DBusData::fromStringKeyMap(options); + TQT_DBusMessage reply = driveControl.sendWithReply("Eject", params, &error); + if (error.isValid()) { + // Error! + printf("[ERROR][tdehwlib] ejectDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); + return false; + } + else { + return true; + } + } + } + } + } + } + return false; +} + +int mountDriveUDisks2(TQString deviceNode, TQString fileSystemType, TQString mountOptions, TQString* errStr) { + TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); + if (dbusConn.isConnected()) { + TQString blockDeviceString = deviceNode; + blockDeviceString.replace("/dev/", ""); + blockDeviceString.replace("-", "_2d"); + blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString; + + // Mount the drive! + TQT_DBusError error; + TQT_DBusProxy driveControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.UDisks2.Filesystem", dbusConn); + if (driveControl.canSend()) { + TQValueList params; + TQMap optionsMap; + if (fileSystemType != "") { + optionsMap["fstype"] = (TQT_DBusData::fromString(fileSystemType)).getAsVariantData(); + } + optionsMap["options"] = (TQT_DBusData::fromString(mountOptions)).getAsVariantData(); + params << TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap(optionsMap)); + TQT_DBusMessage reply = driveControl.sendWithReply("Mount", params, &error); + if (error.isValid()) { + // Error! + if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { + // Service not installed or unavailable + return -2; + } + if (errStr) { + *errStr = error.name() + ": " + error.message(); + } + else { + printf("[ERROR][tdehwlib] mountDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); + } + return -1; + } + else { + return 0; + } + } + else { + return -2; + } + } + return -2; +} + +int unMountDriveUDisks2(TQString deviceNode, TQString unMountOptions, TQString* errStr) { + TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); + if (dbusConn.isConnected()) { + TQString blockDeviceString = deviceNode; + blockDeviceString.replace("/dev/", ""); + blockDeviceString.replace("-", "_2d"); + blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString; + + // Mount the drive! + TQT_DBusError error; + TQT_DBusProxy driveControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.UDisks2.Filesystem", dbusConn); + if (driveControl.canSend()) { + TQValueList params; + TQMap optionsMap; + optionsMap["options"] = (TQT_DBusData::fromString(unMountOptions)).getAsVariantData(); + params << TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap(optionsMap)); + TQT_DBusMessage reply = driveControl.sendWithReply("Unmount", params, &error); + if (error.isValid()) { + // Error! + if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { + // Service not installed or unavailable + return -2; + } + if (errStr) { + *errStr = error.name() + ": " + error.message(); + } + else { + printf("[ERROR][tdehwlib] unMountDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); + } + return -1; + } + else { + return 0; + } + } + else { + return -2; + } + } + return -2; +} + + diff --git a/tdecore/tdehw/disksHelper.h b/tdecore/tdehw/disksHelper.h new file mode 100644 index 000000000..def540f34 --- /dev/null +++ b/tdecore/tdehw/disksHelper.h @@ -0,0 +1,36 @@ +/* This file is part of the TDE libraries + Copyright (C) 2012 Timothy Pearson + (C) 2013 Golubev Alexander + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef _DISKS_HELPER_H +#define _DISKS_HELPER_H + +#include + +class TDEStorageDevice; +class TQString; +class TQStringList; + +bool ejectDriveUDisks(TDEStorageDevice* sdevice); +bool ejectDriveUDisks2(TDEStorageDevice* sdevice); +int mountDriveUDisks(TQString deviceNode, TQString fileSystemType, TQStringList mountOptions, TQString* errStr = NULL); +int mountDriveUDisks2(TQString deviceNode, TQString fileSystemType, TQString mountOptions, TQString* errStr = NULL); +int unMountDriveUDisks(TQString deviceNode, TQStringList unMountOptions, TQString* errStr = NULL); +int unMountDriveUDisks2(TQString deviceNode, TQString unMountOptions, TQString* errStr = NULL); + +#endif diff --git a/tdecore/tdehw/tdestoragedevice.cpp b/tdecore/tdehw/tdestoragedevice.cpp index 71f852e0b..bf2ca2fd4 100644 --- a/tdecore/tdehw/tdestoragedevice.cpp +++ b/tdecore/tdehw/tdestoragedevice.cpp @@ -35,8 +35,8 @@ #include "kiconloader.h" #include "tdetempfile.h" #include "kstandarddirs.h" - #include "tdehardwaredevices.h" +#include "disksHelper.h" #include "config.h" @@ -55,21 +55,6 @@ #endif #endif -// uDisks2 integration -#if defined(WITH_UDISKS) || defined(WITH_UDISKS2) - #include - #include - #include - #include - #include - #include - #include - #include -#endif // defined(WITH_UDISKS) || defined(WITH_UDISKS2) -#if defined(WITH_UDISKS) - #include "tqdbusdatalist.h" -#endif // ddefined(WITH_UDISKS) - TDEStorageDevice::TDEStorageDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn), m_mediaInserted(true), m_cryptDevice(NULL) { m_diskType = TDEDiskDeviceType::Null; m_diskStatus = TDEDiskDeviceStatus::Null; @@ -322,282 +307,7 @@ bool TDEStorageDevice::lockDriveMedia(bool lock) { } } -bool ejectDriveUDisks(TDEStorageDevice* sdevice) { -#ifdef WITH_UDISKS - TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); - if (dbusConn.isConnected()) { - TQString blockDeviceString = sdevice->deviceNode(); - blockDeviceString.replace("/dev/", ""); - blockDeviceString.replace("-", "_2d"); - blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString; - - // Eject the drive! - TQT_DBusError error; - TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn); - if (driveControl.canSend()) { - TQValueList params; - TQT_DBusDataList options; - params << TQT_DBusData::fromList(options); - TQT_DBusMessage reply = driveControl.sendWithReply("DriveEject", params, &error); - if (error.isValid()) { - // Error! - printf("[ERROR][tdehwlib] ejectDriveUDisks: %s\n", error.name().ascii()); fflush(stdout); - return false; - } - else { - return true; - } - } - } -#endif // WITH_UDISKS - return false; -} - -bool ejectDriveUDisks2(TDEStorageDevice* sdevice) { -#ifdef WITH_UDISKS2 - TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); - if (dbusConn.isConnected()) { - TQString blockDeviceString = sdevice->deviceNode(); - blockDeviceString.replace("/dev/", ""); - blockDeviceString.replace("-", "_2d"); - blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString; - TQT_DBusProxy hardwareControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.DBus.Properties", dbusConn); - if (hardwareControl.canSend()) { - // get associated udisks2 drive path - TQT_DBusError error; - TQValueList params; - params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Block") << TQT_DBusData::fromString("Drive"); - TQT_DBusMessage reply = hardwareControl.sendWithReply("Get", params, &error); - if (error.isValid()) { - // Error! - printf("[ERROR][tdehwlib] ejectDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); - return false; - } - else { - if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) { - TQT_DBusObjectPath driveObjectPath = reply[0].toVariant().value.toObjectPath(); - if (!driveObjectPath.isValid()) { - return false; - } - - error = TQT_DBusError(); - TQT_DBusProxy driveInformation("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.DBus.Properties", dbusConn); - // can eject? - TQValueList params; - params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Drive") << TQT_DBusData::fromString("Ejectable"); - TQT_DBusMessage reply = driveInformation.sendWithReply("Get", params, &error); - if (error.isValid()) { - // Error! - printf("[ERROR][tdehwlib] ejectDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); - return false; - } - if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) { - bool ejectable = reply[0].toVariant().value.toBool(); - if (!ejectable) { - return false; - } - - // Eject the drive! - TQT_DBusProxy driveControl("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.UDisks2.Drive", dbusConn); - TQValueList params; - TQT_DBusDataMap options(TQT_DBusData::Variant); - params << TQT_DBusData::fromStringKeyMap(options); - TQT_DBusMessage reply = driveControl.sendWithReply("Eject", params, &error); - if (error.isValid()) { - // Error! - printf("[ERROR][tdehwlib] ejectDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); - return false; - } - else { - return true; - } - } - } - } - } - } -#endif // WITH_UDISKS2 - return false; -} - -int mountDriveUDisks(TQString deviceNode, TQString fileSystemType, TQStringList mountOptions, TQString* errStr = NULL) { -#ifdef WITH_UDISKS - TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); - if (dbusConn.isConnected()) { - TQString blockDeviceString = deviceNode; - blockDeviceString.replace("/dev/", ""); - blockDeviceString.replace("-", "_2d"); - blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString; - - // Mount the drive! - TQT_DBusError error; - TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn); - if (driveControl.canSend()) { - TQValueList params; - params << TQT_DBusData::fromString(fileSystemType); - params << TQT_DBusData::fromList(TQT_DBusDataList(mountOptions)); - TQT_DBusMessage reply = driveControl.sendWithReply("FilesystemMount", params, &error); - if (error.isValid()) { - // Error! - if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { - // Service not installed or unavailable - return -2; - } - if (errStr) { - *errStr = error.name() + ": " + error.message(); - } - else { - printf("[ERROR][tdehwlib] mountDriveUDisks: %s\n", error.name().ascii()); fflush(stdout); - } - return -1; - } - else { - return 0; - } - } - else { - return -2; - } - } -#endif // WITH_UDISKS - return -2; -} - -int mountDriveUDisks2(TQString deviceNode, TQString fileSystemType, TQString mountOptions, TQString* errStr = NULL) { -#ifdef WITH_UDISKS2 - TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); - if (dbusConn.isConnected()) { - TQString blockDeviceString = deviceNode; - blockDeviceString.replace("/dev/", ""); - blockDeviceString.replace("-", "_2d"); - blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString; - - // Mount the drive! - TQT_DBusError error; - TQT_DBusProxy driveControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.UDisks2.Filesystem", dbusConn); - if (driveControl.canSend()) { - TQValueList params; - TQMap optionsMap; - if (fileSystemType != "") { - optionsMap["fstype"] = (TQT_DBusData::fromString(fileSystemType)).getAsVariantData(); - } - optionsMap["options"] = (TQT_DBusData::fromString(mountOptions)).getAsVariantData(); - params << TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap(optionsMap)); - TQT_DBusMessage reply = driveControl.sendWithReply("Mount", params, &error); - if (error.isValid()) { - // Error! - if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { - // Service not installed or unavailable - return -2; - } - if (errStr) { - *errStr = error.name() + ": " + error.message(); - } - else { - printf("[ERROR][tdehwlib] mountDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); - } - return -1; - } - else { - return 0; - } - } - else { - return -2; - } - } -#endif // WITH_UDISKS2 - return -2; -} - -int unMountDriveUDisks(TQString deviceNode, TQStringList unMountOptions, TQString* errStr = NULL) { -#ifdef WITH_UDISKS - TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); - if (dbusConn.isConnected()) { - TQString blockDeviceString = deviceNode; - blockDeviceString.replace("/dev/", ""); - blockDeviceString.replace("-", "_2d"); - blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString; - - // Mount the drive! - TQT_DBusError error; - TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn); - if (driveControl.canSend()) { - TQValueList params; - params << TQT_DBusData::fromList(TQT_DBusDataList(unMountOptions)); - TQT_DBusMessage reply = driveControl.sendWithReply("FilesystemUnmount", params, &error); - if (error.isValid()) { - // Error! - if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { - // Service not installed or unavailable - return -2; - } - if (errStr) { - *errStr = error.name() + ": " + error.message(); - } - else { - printf("[ERROR][tdehwlib] unMountDriveUDisks: %s\n", error.name().ascii()); fflush(stdout); - } - return -1; - } - else { - return 0; - } - } - else { - return -2; - } - } -#endif // WITH_UDISKS - return -2; -} - -int unMountDriveUDisks2(TQString deviceNode, TQString unMountOptions, TQString* errStr = NULL) { -#ifdef WITH_UDISKS2 - TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); - if (dbusConn.isConnected()) { - TQString blockDeviceString = deviceNode; - blockDeviceString.replace("/dev/", ""); - blockDeviceString.replace("-", "_2d"); - blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString; - - // Mount the drive! - TQT_DBusError error; - TQT_DBusProxy driveControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.UDisks2.Filesystem", dbusConn); - if (driveControl.canSend()) { - TQValueList params; - TQMap optionsMap; - optionsMap["options"] = (TQT_DBusData::fromString(unMountOptions)).getAsVariantData(); - params << TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap(optionsMap)); - TQT_DBusMessage reply = driveControl.sendWithReply("Unmount", params, &error); - if (error.isValid()) { - // Error! - if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { - // Service not installed or unavailable - return -2; - } - if (errStr) { - *errStr = error.name() + ": " + error.message(); - } - else { - printf("[ERROR][tdehwlib] unMountDriveUDisks2: %s\n", error.name().ascii()); fflush(stdout); - } - return -1; - } - else { - return 0; - } - } - else { - return -2; - } - } -#endif // WITH_UDISKS2 - return -2; -} - bool TDEStorageDevice::ejectDrive() { -#ifdef WITH_UDISKS2 if (!(TDEGlobal::dirs()->findExe("udisksctl").isEmpty())) { if (ejectDriveUDisks2(this)) { return true; @@ -607,9 +317,6 @@ bool TDEStorageDevice::ejectDrive() { fflush(stdout); } } -#endif // WITH_UDISKS2 - -#ifdef WITH_UDISKS if (!(TDEGlobal::dirs()->findExe("udisks").isEmpty())) { if (ejectDriveUDisks(this)) { return true; @@ -619,7 +326,6 @@ bool TDEStorageDevice::ejectDrive() { fflush(stdout); } } -#endif // WITH_UDISKS if (!(TDEGlobal::dirs()->findExe("eject").isEmpty())) { TQString command = TQString("eject -v '%1' 2>&1").arg(deviceNode()); @@ -994,24 +700,20 @@ TQString TDEStorageDevice::mountPath() { } TQString TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageMountOptions mountOptions, TQString* errRet, int* retcode) { + // Device is already mounted + if (!mountPath().isNull()) { + return mountPath(); + } + int internal_retcode; if (!retcode) { retcode = &internal_retcode; } - TQString ret = mountPath(); - - // Device is already mounted - if (!ret.isNull()) { - return ret; - } - - TQString command; TQString devNode = deviceNode(); devNode.replace("'", "'\\''"); mediaName.replace("'", "'\\''"); -#if defined(WITH_UDEVIL) || defined(WITH_UDISKS2) || defined(WITH_UDISKS) // Prepare filesystem options for mount TQStringList udisksOptions; TQString optionString; @@ -1068,109 +770,70 @@ TQString TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageMountOption if (!optionString.isEmpty()) { optionString.remove(0, 1); } -#endif // defined(WITH_UDEVIL) || defined(WITH_UDISKS2) || defined(WITH_UDISKS) - -#ifdef WITH_UDEVIL - if(command.isEmpty()) { - // Use 'udevil' command, if available - TQString udevilProg = TDEGlobal::dirs()->findExe("udevil"); - if (!udevilProg.isEmpty()) { - - TQString fileSystemType; - if (mountOptions.contains("filesystem") && !mountOptions["filesystem"].isEmpty()) { - fileSystemType = TQString("-t %1").arg(mountOptions["filesystem"]); - } - TQString mountpoint; - if (mountOptions.contains("mountpoint") - && !mountOptions["mountpoint"].isEmpty() - && (mountOptions["mountpoint"] != "/media/")) { - mountpoint = mountOptions["mountpoint"]; - mountpoint.replace("'", "'\\''"); - } - else { - mountpoint = TQString("/media/%1").arg(mediaName); - } + // Try to use UDISKS v2 via DBUS, if available + TQString errorString; + TQString fileSystemType; - command = TQString("udevil mount %1 -o '%2' '%3' '%4' 2>&1").arg(fileSystemType).arg(optionString).arg(devNode).arg(mountpoint); - } + if (mountOptions.contains("filesystem") && !mountOptions["filesystem"].isEmpty()) { + fileSystemType = mountOptions["filesystem"]; } -#endif // WITH_UDEVIL - -#ifdef WITH_UDISKS2 - if(command.isEmpty()) { - // Try to use UDISKS v2 via DBUS, if available - TQString errorString; - TQString fileSystemType; - if (mountOptions.contains("filesystem") && !mountOptions["filesystem"].isEmpty()) { - fileSystemType = mountOptions["filesystem"]; - } - - int uDisks2Ret = mountDriveUDisks2(devNode, fileSystemType, optionString, &errorString); - if (uDisks2Ret == 0) { - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); - - ret = mountPath(); - return ret; + int uDisks2Ret = mountDriveUDisks2(devNode, fileSystemType, optionString, &errorString); + if (uDisks2Ret == 0) { + // Update internal mount data + TDEGlobal::hardwareDevices()->processModifiedMounts(); + return mountPath(); + } + else if (uDisks2Ret == -1) { + if (errRet) { + *errRet = errorString; } - else if (uDisks2Ret == -1) { - if (errRet) { - *errRet = errorString; - } - - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); + // Update internal mount data + TDEGlobal::hardwareDevices()->processModifiedMounts(); + return mountPath(); + } - ret = mountPath(); - return ret; - } - else { - // The UDISKS v2 DBUS service was either not available or was unusable; try another method... - command = TQString::null; + // The UDISKS v2 DBUS service was either not available or was unusable + // Try to use UDISKS v1 via DBUS, if available + int uDisksRet = mountDriveUDisks(devNode, fileSystemType, udisksOptions, &errorString); + if (uDisksRet == 0) { + // Update internal mount data + TDEGlobal::hardwareDevices()->processModifiedMounts(); + return mountPath(); + } + else if (uDisksRet == -1) { + if (errRet) { + *errRet = errorString; } + // Update internal mount data + TDEGlobal::hardwareDevices()->processModifiedMounts(); + return mountPath(); } -#endif // WITH_UDISKS2 - -#ifdef WITH_UDISKS - if(command.isEmpty()) { - // Try to use UDISKS v1 via DBUS, if available - TQString errorString; - TQString fileSystemType; + // The UDISKS v1 DBUS service was either not available or was unusable + // Use 'udevil' command, if available + TQString command = TQString::null; + TQString udevilProg = TDEGlobal::dirs()->findExe("udevil"); + if (!udevilProg.isEmpty()) { if (mountOptions.contains("filesystem") && !mountOptions["filesystem"].isEmpty()) { - fileSystemType = mountOptions["filesystem"]; + fileSystemType = TQString("-t %1").arg(mountOptions["filesystem"]); } - - int uDisksRet = mountDriveUDisks(devNode, fileSystemType, udisksOptions, &errorString); - if (uDisksRet == 0) { - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); - - ret = mountPath(); - return ret; - } - else if (uDisksRet == -1) { - if (errRet) { - *errRet = errorString; - } - - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); - - ret = mountPath(); - return ret; + TQString mountpoint; + if (mountOptions.contains("mountpoint") && !mountOptions["mountpoint"].isEmpty() && + (mountOptions["mountpoint"] != "/media/")) { + mountpoint = mountOptions["mountpoint"]; + mountpoint.replace("'", "'\\''"); } else { - // The UDISKS v1 DBUS service was either not available or was unusable; try another method... - command = TQString::null; + mountpoint = TQString("/media/%1").arg(mediaName); } + command = TQString("udevil mount %1 -o '%2' '%3' '%4' 2>&1") + .arg(fileSystemType).arg(optionString).arg(devNode).arg(mountpoint); } -#endif // WITH_UDISKS + // If 'udevil' was not found, use 'pmount' command if available if(command.isEmpty()) { - // Use 'pmount' command, if available TQString pmountProg = TDEGlobal::dirs()->findExe("pmount"); if (!pmountProg.isEmpty()) { // Create dummy password file @@ -1203,9 +866,8 @@ TQString TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageMountOption } TQString mountpoint; - if (mountOptions.contains("mountpoint") - && !mountOptions["mountpoint"].isEmpty() - && (mountOptions["mountpoint"] != "/media/")) { + if (mountOptions.contains("mountpoint") && !mountOptions["mountpoint"].isEmpty() && + (mountOptions["mountpoint"] != "/media/")) { mountpoint = mountOptions["mountpoint"]; mountpoint.replace("'", "'\\''"); } @@ -1216,7 +878,8 @@ TQString TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageMountOption TQString passFileName = passwordFile.name(); passFileName.replace("'", "'\\''"); - command = TQString("pmount -p '%1' %2 '%3' '%4' 2>&1").arg(passFileName).arg(optionString).arg(devNode).arg(mountpoint); + command = TQString("pmount -p '%1' %2 '%3' '%4' 2>&1") + .arg(passFileName).arg(optionString).arg(devNode).arg(mountpoint); } } @@ -1224,7 +887,7 @@ TQString TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageMountOption if (errRet) { *errRet = i18n("No supported mounting methods were detected on your system"); } - return ret; + return mountPath(); } FILE *exepipe = popen(command.local8Bit(), "r"); @@ -1241,10 +904,7 @@ TQString TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageMountOption // Update internal mount data TDEGlobal::hardwareDevices()->processModifiedMounts(); - - ret = mountPath(); - - return ret; + return mountPath(); } TQString TDEStorageDevice::mountEncryptedDevice(TQString passphrase, TQString mediaName, TDEStorageMountOptions mountOptions, TQString* errRet, int* retcode) { @@ -1274,15 +934,15 @@ TQString TDEStorageDevice::mountEncryptedDevice(TQString passphrase, TQString me if (mountOptions["ro"] == "true") { optionString.append(" -r"); } - + if (mountOptions["atime"] != "true") { optionString.append(" -A"); } - + if (mountOptions["utf8"] == "true") { optionString.append(" -c utf8"); } - + if (mountOptions["sync"] == "true") { optionString.append(" -s"); } @@ -1323,6 +983,10 @@ TQString TDEStorageDevice::mountEncryptedDevice(TQString passphrase, TQString me } bool TDEStorageDevice::unmountDevice(TQString* errRet, int* retcode) { + if (mountPath().isNull()) { + return true; + } + int internal_retcode; if (!retcode) { retcode = &internal_retcode; @@ -1331,77 +995,50 @@ bool TDEStorageDevice::unmountDevice(TQString* errRet, int* retcode) { TQString mountpoint = mountPath(); TQString devNode = deviceNode(); - if (mountpoint.isNull()) { - return true; - } - mountpoint.replace("'", "'\\''"); - TQString command; - -#ifdef WITH_UDEVIL - if(command.isEmpty() && - !(TDEGlobal::dirs()->findExe("udevil").isEmpty())) { - command = TQString("udevil umount '%1' 2>&1").arg(mountpoint); + // Try to use UDISKS v2 via DBUS, if available + TQString errorString; + int unMountUDisks2Ret = unMountDriveUDisks2(devNode, TQString::null, &errorString); + if (unMountUDisks2Ret == 0) { + // Update internal mount data + TDEGlobal::hardwareDevices()->processModifiedMounts(); + return true; } -#endif // WITH_UDEVIL - -#ifdef WITH_UDISKS2 - if(command.isEmpty()) { - // Try to use UDISKS v2 via DBUS, if available - TQString errorString; - int unMountUDisks2Ret = unMountDriveUDisks2(devNode, TQString::null, &errorString); - if (unMountUDisks2Ret == 0) { - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); - - return true; - } - else if (unMountUDisks2Ret == -1) { - if (errRet) { - *errRet = errorString; - } - - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); - - return false; - } - else { - // The UDISKS v2 DBUS service was either not available or was unusable; try another method... - command = TQString::null; + else if (unMountUDisks2Ret == -1) { + if (errRet) { + *errRet = errorString; } + // Update internal mount data + TDEGlobal::hardwareDevices()->processModifiedMounts(); + return false; } -#endif // WITH_UDISKS2 - -#ifdef WITH_UDISKS - if(command.isEmpty()) { - // Try to use UDISKS v1 via DBUS, if available - TQString errorString; - int unMountUDisksRet = unMountDriveUDisks(devNode, TQStringList(), &errorString); - if (unMountUDisksRet == 0) { - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); - return true; + // The UDISKS v2 DBUS service was either not available or was unusable + // Try to use UDISKS v1 via DBUS, if available + int unMountUDisksRet = unMountDriveUDisks(devNode, TQStringList(), &errorString); + if (unMountUDisksRet == 0) { + // Update internal mount data + TDEGlobal::hardwareDevices()->processModifiedMounts(); + return true; + } + else if (unMountUDisksRet == -1) { + if (errRet) { + *errRet = errorString; } - else if (unMountUDisksRet == -1) { - if (errRet) { - *errRet = errorString; - } - - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); + // Update internal mount data + TDEGlobal::hardwareDevices()->processModifiedMounts(); + return false; + } - return false; - } - else { - // The UDISKS v1 DBUS service was either not available or was unusable; try another method... - command = TQString::null; - } + // The UDISKS v1 DBUS service was either not available or was unusable + // Try to use udevil, if available + TQString command; + if(!(TDEGlobal::dirs()->findExe("udevil").isEmpty())) { + command = TQString("udevil umount '%1' 2>&1").arg(mountpoint); } -#endif // WITH_UDISKS + // If 'udevil' was not found, use 'pmount' command if available if(command.isEmpty() && !(TDEGlobal::dirs()->findExe("pumount").isEmpty())) { command = TQString("pumount '%1' 2>&1").arg(mountpoint); diff --git a/tdeioslave/file/file.cc b/tdeioslave/file/file.cc index ad1cc5574..45c482620 100644 --- a/tdeioslave/file/file.cc +++ b/tdeioslave/file/file.cc @@ -1668,18 +1668,13 @@ bool FileProtocol::pmount(const TQString &dev) TQString mountProg; TQCString buffer; -#ifdef WITH_UDISKS2 // Use 'udisksctl' (UDISKS2) if available - if (mountProg.isEmpty()) { - mountProg = TDEGlobal::dirs()->findExe("udisksctl"); - if (!mountProg.isEmpty()) { - buffer.sprintf( "%s mount -b %s", TQFile::encodeName(mountProg).data(), - TQFile::encodeName(TDEProcess::quote(dev)).data() ); - } - } -#endif // WITH_UDISKS2 + mountProg = TDEGlobal::dirs()->findExe("udisksctl"); + if (!mountProg.isEmpty()) { + buffer.sprintf( "%s mount -b %s", TQFile::encodeName(mountProg).data(), + TQFile::encodeName(TDEProcess::quote(dev)).data() ); + } -#ifdef WITH_UDISKS // Use 'udisks' (UDISKS1) if available if (mountProg.isEmpty()) { mountProg = TDEGlobal::dirs()->findExe("udisks"); @@ -1688,7 +1683,6 @@ bool FileProtocol::pmount(const TQString &dev) TQFile::encodeName(TDEProcess::quote(dev)).data() ); } } -#endif // WITH_UDISKS // Use 'pmount', if available if (mountProg.isEmpty()) { @@ -1735,18 +1729,13 @@ bool FileProtocol::pumount(const TQString &point) TQString umountProg; TQCString buffer; -#ifdef WITH_UDISKS2 // Use 'udisksctl' (UDISKS2), if available - if (umountProg.isEmpty()) { - umountProg = TDEGlobal::dirs()->findExe("udisksctl"); - if (!umountProg.isEmpty()) { - buffer.sprintf( "%s unmount -b %s", TQFile::encodeName(umountProg).data(), - TQFile::encodeName(TDEProcess::quote(dev)).data() ); - } - } -#endif // WITH_UDISKS2 + umountProg = TDEGlobal::dirs()->findExe("udisksctl"); + if (!umountProg.isEmpty()) { + buffer.sprintf( "%s unmount -b %s", TQFile::encodeName(umountProg).data(), + TQFile::encodeName(TDEProcess::quote(dev)).data() ); + } -#ifdef WITH_UDISKS // Use 'udisks' (UDISKS1), if available if (umountProg.isEmpty()) { umountProg = TDEGlobal::dirs()->findExe("udisks"); @@ -1755,7 +1744,6 @@ bool FileProtocol::pumount(const TQString &point) TQFile::encodeName(TDEProcess::quote(dev)).data() ); } } -#endif // WITH_UDISKS // Use 'pumount', if available if (umountProg.isEmpty()) {