1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/target/hal/HalContext.cc
11 * \brief Hardware abstaction layer library wrapper implementation.
13 #ifndef FAKE_HAL // disables zypp's HAL dependency
15 #include <zypp/target/hal/HalContext.h>
16 #include <zypp/thread/Mutex.h>
17 #include <zypp/thread/MutexLock.h>
18 #include <zypp/base/NonCopyable.h>
19 #include <zypp/base/Logger.h>
20 #include <zypp/base/String.h>
21 #include <zypp/base/Gettext.h>
23 #include <dbus/dbus-glib-lowlevel.h>
24 #include <dbus/dbus-glib.h>
25 #include <hal/libhal.h>
26 #include <hal/libhal-storage.h>
32 //////////////////////////////////////////////////////////////////////
34 { ////////////////////////////////////////////////////////////////////
35 ////////////////////////////////////////////////////////////////////
37 { //////////////////////////////////////////////////////////////////
38 //////////////////////////////////////////////////////////////////
40 { ////////////////////////////////////////////////////////////////
42 using zypp::thread::Mutex;
43 using zypp::thread::MutexLock;
45 ////////////////////////////////////////////////////////////////
46 namespace // anonymous
47 { //////////////////////////////////////////////////////////////
50 //////////////////////////////////////////////////////////////
53 ** hmm... currently a global one..
58 //////////////////////////////////////////////////////////////
60 * Internal hal (dbus ) error helper class.
67 HalError() { dbus_error_init(&error); }
68 ~HalError() { dbus_error_free(&error); }
70 inline bool isSet() const
72 return dbus_error_is_set(&error);
75 inline HalException halException(const std::string &msg = std::string()) const
77 if( isSet() && error.name != NULL && error.message != NULL) {
78 return HalException(error.name, error.message);
80 else if( !msg.empty()) {
81 return HalException(msg);
84 return HalException();
90 // -----------------------------------------------------------
92 VERIFY_CONTEXT(const zypp::RW_pointer<HalContext_Impl> &h)
96 ZYPP_THROW(HalException(_("HalContext not connected")));
100 // -----------------------------------------------------------
102 VERIFY_DRIVE(const zypp::RW_pointer<HalDrive_Impl> &d)
106 ZYPP_THROW(HalException(_("HalDrive not initialized")));
110 // -----------------------------------------------------------
112 VERIFY_VOLUME(const zypp::RW_pointer<HalVolume_Impl> &v)
116 ZYPP_THROW(HalException(_("HalVolume not initialized")));
120 //////////////////////////////////////////////////////////////
122 ////////////////////////////////////////////////////////////////
124 ////////////////////////////////////////////////////////////////
126 HalException::dumpOn( std::ostream & str ) const
128 if(!e_name.empty() && !e_msg.empty())
129 return str << msg() << ": " << e_msg << " (" << e_name << ")";
130 else if(!e_msg.empty())
131 return str << msg() << ": " << e_msg;
136 ////////////////////////////////////////////////////////////////
137 class HalContext_Impl
143 DBusConnection *conn;
145 bool pcon; // private connection
149 ////////////////////////////////////////////////////////////////
153 zypp::RW_pointer<HalContext_Impl> hal;
161 HalDrive_Impl(const zypp::RW_pointer<HalContext_Impl> &r,
170 libhal_drive_free(drv);
175 ////////////////////////////////////////////////////////////////
181 HalVolume_Impl(LibHalVolume *v=NULL)
189 libhal_volume_free(vol);
194 ////////////////////////////////////////////////////////////////
195 HalContext_Impl::HalContext_Impl()
198 , pcon(false) // we allways use shared connections at the moment
203 conn = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err.error);
205 conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err.error);
207 ZYPP_THROW(err.halException(
208 _("Unable to create dbus connection")
212 hctx = libhal_ctx_new();
216 dbus_connection_close(conn);
217 dbus_connection_unref(conn);
220 ZYPP_THROW(HalException(
221 _("libhal_ctx_new: Can't create libhal context")
225 if( !libhal_ctx_set_dbus_connection(hctx, conn))
227 libhal_ctx_free(hctx);
231 dbus_connection_close(conn);
232 dbus_connection_unref(conn);
235 ZYPP_THROW(HalException(
236 _("libhal_set_dbus_connection: Can't set dbus connection")
240 if( !libhal_ctx_init(hctx, &err.error))
242 libhal_ctx_free(hctx);
246 dbus_connection_close(conn);
247 dbus_connection_unref(conn);
250 ZYPP_THROW(err.halException(
251 _("Unable to initalize HAL context -- hald not running?")
256 // -------------------------------------------------------------
257 HalContext_Impl::~HalContext_Impl()
262 libhal_ctx_shutdown(hctx, &err.error);
263 libhal_ctx_free( hctx);
268 dbus_connection_close(conn);
269 dbus_connection_unref(conn);
274 ////////////////////////////////////////////////////////////////
275 HalContext::HalContext(bool autoconnect)
278 MutexLock lock(g_Mutex);
281 h_impl.reset( new HalContext_Impl());
284 // -------------------------------------------------------------
285 HalContext::HalContext(const HalContext &context)
288 MutexLock lock(g_Mutex);
290 zypp::RW_pointer<HalContext_Impl>(context.h_impl).swap(h_impl);
293 // -------------------------------------------------------------
294 HalContext::~HalContext()
296 MutexLock lock(g_Mutex);
301 // --------------------------------------------------------------
303 HalContext::operator=(const HalContext &context)
305 MutexLock lock(g_Mutex);
307 if( this == &context)
310 zypp::RW_pointer<HalContext_Impl>(context.h_impl).swap(h_impl);
314 // --------------------------------------------------------------
315 HalContext::operator HalContext::bool_type() const
317 MutexLock lock(g_Mutex);
322 // --------------------------------------------------------------
324 HalContext::connect()
326 MutexLock lock(g_Mutex);
329 h_impl.reset( new HalContext_Impl());
332 // --------------------------------------------------------------
333 std::vector<std::string>
334 HalContext::getAllDevices() const
336 MutexLock lock(g_Mutex);
337 VERIFY_CONTEXT(h_impl);
343 names = libhal_get_all_devices( h_impl->hctx, &count, &err.error);
346 ZYPP_THROW(err.halException());
349 std::vector<std::string> ret(names, names + count);
350 libhal_free_string_array(names);
354 // --------------------------------------------------------------
356 HalContext::getDriveFromUDI(const std::string &udi) const
358 MutexLock lock(g_Mutex);
359 VERIFY_CONTEXT(h_impl);
361 LibHalDrive *drv = libhal_drive_from_udi(h_impl->hctx, udi.c_str());
363 return HalDrive(new HalDrive_Impl( h_impl, drv));
368 // --------------------------------------------------------------
370 HalContext::getVolumeFromUDI(const std::string &udi) const
372 MutexLock lock(g_Mutex);
373 VERIFY_CONTEXT(h_impl);
375 LibHalVolume *vol = libhal_volume_from_udi(h_impl->hctx, udi.c_str());
377 return HalVolume( new HalVolume_Impl(vol));
382 // --------------------------------------------------------------
384 HalContext::getVolumeFromDeviceFile(const std::string &device_file) const
386 MutexLock lock(g_Mutex);
387 VERIFY_CONTEXT(h_impl);
389 LibHalVolume *vol = libhal_volume_from_device_file(h_impl->hctx,
390 device_file.c_str());
392 return HalVolume( new HalVolume_Impl(vol));
397 // --------------------------------------------------------------
398 std::vector<std::string>
399 HalContext::findDevicesByCapability(const std::string &capability) const
401 MutexLock lock(g_Mutex);
402 VERIFY_CONTEXT(h_impl);
408 names = libhal_find_device_by_capability(h_impl->hctx,
413 ZYPP_THROW(err.halException());
416 std::vector<std::string> ret(names, names + count);
417 libhal_free_string_array(names);
421 // --------------------------------------------------------------
423 HalContext::getDevicePropertyBool (const std::string &udi,
424 const std::string &key) const
426 MutexLock lock(g_Mutex);
427 VERIFY_CONTEXT(h_impl);
432 ret = libhal_device_get_property_bool (h_impl->hctx,
438 ZYPP_THROW(err.halException());
443 // --------------------------------------------------------------
445 HalContext::getDevicePropertyInt32 (const std::string &udi,
446 const std::string &key) const
448 MutexLock lock(g_Mutex);
449 VERIFY_CONTEXT(h_impl);
454 ret = libhal_device_get_property_int (h_impl->hctx,
460 ZYPP_THROW(err.halException());
465 // --------------------------------------------------------------
467 HalContext::getDevicePropertyUInt64(const std::string &udi,
468 const std::string &key) const
470 MutexLock lock(g_Mutex);
471 VERIFY_CONTEXT(h_impl);
476 ret = libhal_device_get_property_uint64(h_impl->hctx,
482 ZYPP_THROW(err.halException());
487 // --------------------------------------------------------------
489 HalContext::getDevicePropertyDouble(const std::string &udi,
490 const std::string &key) const
492 MutexLock lock(g_Mutex);
493 VERIFY_CONTEXT(h_impl);
498 ret = libhal_device_get_property_bool (h_impl->hctx,
504 ZYPP_THROW(err.halException());
510 // --------------------------------------------------------------
512 HalContext::getDevicePropertyString(const std::string &udi,
513 const std::string &key) const
515 MutexLock lock(g_Mutex);
516 VERIFY_CONTEXT(h_impl);
522 ptr = libhal_device_get_property_string(h_impl->hctx,
528 ZYPP_THROW(err.halException());
538 // --------------------------------------------------------------
540 HalContext::setDevicePropertyBool (const std::string &udi,
541 const std::string &key,
544 MutexLock lock(g_Mutex);
545 VERIFY_CONTEXT(h_impl);
550 ret = libhal_device_set_property_bool (h_impl->hctx,
557 ZYPP_THROW(err.halException());
561 // --------------------------------------------------------------
563 HalContext::setDevicePropertyInt32 (const std::string &udi,
564 const std::string &key,
567 MutexLock lock(g_Mutex);
568 VERIFY_CONTEXT(h_impl);
573 ret = libhal_device_set_property_int (h_impl->hctx,
580 ZYPP_THROW(err.halException());
584 // --------------------------------------------------------------
586 HalContext::setDevicePropertyUInt64(const std::string &udi,
587 const std::string &key,
590 MutexLock lock(g_Mutex);
591 VERIFY_CONTEXT(h_impl);
596 ret = libhal_device_set_property_uint64(h_impl->hctx,
603 ZYPP_THROW(err.halException());
607 // --------------------------------------------------------------
609 HalContext::setDevicePropertyDouble(const std::string &udi,
610 const std::string &key,
613 MutexLock lock(g_Mutex);
614 VERIFY_CONTEXT(h_impl);
619 ret = libhal_device_set_property_double(h_impl->hctx,
626 ZYPP_THROW(err.halException());
630 // --------------------------------------------------------------
632 HalContext::setDevicePropertyString(const std::string &udi,
633 const std::string &key,
634 const std::string &value)
636 MutexLock lock(g_Mutex);
637 VERIFY_CONTEXT(h_impl);
642 ret = libhal_device_set_property_string(h_impl->hctx,
649 ZYPP_THROW(err.halException());
653 // --------------------------------------------------------------
655 HalContext::removeDeviceProperty(const std::string &udi,
656 const std::string &key)
658 MutexLock lock(g_Mutex);
659 VERIFY_CONTEXT(h_impl);
664 ret = libhal_device_remove_property(h_impl->hctx,
670 ZYPP_THROW(err.halException());
674 ////////////////////////////////////////////////////////////////
680 // --------------------------------------------------------------
681 HalDrive::HalDrive(HalDrive_Impl *impl)
684 MutexLock lock(g_Mutex);
689 // --------------------------------------------------------------
690 HalDrive::HalDrive(const HalDrive &drive)
693 MutexLock lock(g_Mutex);
695 zypp::RW_pointer<HalDrive_Impl>(drive.d_impl).swap(d_impl);
698 // --------------------------------------------------------------
699 HalDrive::~HalDrive()
701 MutexLock lock(g_Mutex);
706 // --------------------------------------------------------------
708 HalDrive::operator=(const HalDrive &drive)
710 MutexLock lock(g_Mutex);
715 zypp::RW_pointer<HalDrive_Impl>(drive.d_impl).swap(d_impl);
719 // --------------------------------------------------------------
720 HalDrive::operator HalDrive::bool_type() const
722 MutexLock lock(g_Mutex);
727 // --------------------------------------------------------------
729 HalDrive::getUDI() const
731 MutexLock lock(g_Mutex);
732 VERIFY_DRIVE(d_impl);
734 const char *ptr = libhal_drive_get_udi(d_impl->drv);
735 return std::string(ptr ? ptr : "");
738 // --------------------------------------------------------------
740 HalDrive::getTypeName() const
742 MutexLock lock(g_Mutex);
743 VERIFY_DRIVE(d_impl);
745 const char *ptr = libhal_drive_get_type_textual(d_impl->drv);
746 return std::string(ptr ? ptr : "");
749 // --------------------------------------------------------------
751 HalDrive::getDeviceFile() const
753 MutexLock lock(g_Mutex);
754 VERIFY_DRIVE(d_impl);
756 return std::string(libhal_drive_get_device_file(d_impl->drv));
759 // --------------------------------------------------------------
761 HalDrive::getDeviceMajor() const
763 MutexLock lock(g_Mutex);
764 VERIFY_DRIVE(d_impl);
766 return libhal_drive_get_device_major(d_impl->drv);
769 // --------------------------------------------------------------
771 HalDrive::getDeviceMinor() const
773 MutexLock lock(g_Mutex);
774 VERIFY_DRIVE(d_impl);
776 return libhal_drive_get_device_minor(d_impl->drv);
779 // --------------------------------------------------------------
781 HalDrive::usesRemovableMedia() const
783 MutexLock lock(g_Mutex);
784 VERIFY_DRIVE(d_impl);
786 return libhal_drive_uses_removable_media(d_impl->drv);
789 // --------------------------------------------------------------
790 std::vector<std::string>
791 HalDrive::getCdromCapabilityNames() const
793 MutexLock lock(g_Mutex);
794 VERIFY_DRIVE(d_impl);
796 std::vector<std::string> ret;
797 LibHalDriveCdromCaps caps;
800 ** FIXME: there is no textual variant :-(
801 ** using property key names...
803 caps = libhal_drive_get_cdrom_caps(d_impl->drv);
805 if(caps & LIBHAL_DRIVE_CDROM_CAPS_CDROM)
806 ret.push_back("cdrom");
807 if(caps & LIBHAL_DRIVE_CDROM_CAPS_CDR)
808 ret.push_back("cdr");
809 if(caps & LIBHAL_DRIVE_CDROM_CAPS_CDRW)
810 ret.push_back("cdrw");
811 if(caps & LIBHAL_DRIVE_CDROM_CAPS_DVDRAM)
812 ret.push_back("dvdram");
813 if(caps & LIBHAL_DRIVE_CDROM_CAPS_DVDROM)
814 ret.push_back("dvd");
815 if(caps & LIBHAL_DRIVE_CDROM_CAPS_DVDR)
816 ret.push_back("dvdr");
817 if(caps & LIBHAL_DRIVE_CDROM_CAPS_DVDRW)
818 ret.push_back("dvdrw");
819 if(caps & LIBHAL_DRIVE_CDROM_CAPS_DVDPLUSR)
820 ret.push_back("dvdplusr");
821 if(caps & LIBHAL_DRIVE_CDROM_CAPS_DVDPLUSRW)
822 ret.push_back("dvdplusrw");
823 if(caps & LIBHAL_DRIVE_CDROM_CAPS_DVDPLUSRDL)
824 ret.push_back("dvdplusrdl");
829 if( libhal_drive_get_type(d_impl->drv) != LIBHAL_DRIVE_TYPE_CDROM)
830 ZYPP_THROW(HalException(_("Not a CDROM drive")));
833 ** FIXME: we use property keys matching
834 ** "storage.cdrom.cd*"
835 ** "storage.cdrom.dvd*"
836 ** but this may print other bool keys,
837 ** that are not CDROM caps.
839 LibHalPropertySet *props;
842 props = libhal_device_get_all_properties(d_impl->hal->hctx,
846 ZYPP_THROW(err.halException());
848 std::vector<std::string> ret(1, getTypeName());
850 std::string dvd("storage.cdrom.dvd");
851 std::string cd ("storage.cdrom.cd");
853 LibHalPropertySetIterator it;
854 for(libhal_psi_init(&it, props);
855 libhal_psi_has_more(&it);
856 libhal_psi_next(&it))
858 if( libhal_psi_get_type(&it) == LIBHAL_PROPERTY_TYPE_BOOLEAN &&
859 libhal_psi_get_bool(&it))
861 key = libhal_psi_get_key(&it);
862 if( key.compare(0, cd.size(), cd) == 0)
864 ret.push_back(key.substr(sizeof("storage.cdrom.")-1));
867 if( key.compare(0, dvd.size(), dvd) == 0)
869 ret.push_back(key.substr(sizeof("storage.cdrom.")-1));
873 libhal_free_property_set(props);
879 // --------------------------------------------------------------
880 std::vector<std::string>
881 HalDrive::findAllVolumes() const
883 MutexLock lock(g_Mutex);
884 VERIFY_DRIVE(d_impl);
889 names = libhal_drive_find_all_volumes(d_impl->hal->hctx,
893 std::vector<std::string> ret;
894 ret.assign(names, names + count);
895 libhal_free_string_array(names);
900 ////////////////////////////////////////////////////////////////
901 HalVolume::HalVolume()
905 HalVolume::HalVolume(HalVolume_Impl *impl)
908 MutexLock lock(g_Mutex);
913 // --------------------------------------------------------------
914 HalVolume::HalVolume(const HalVolume &volume)
917 MutexLock lock(g_Mutex);
919 zypp::RW_pointer<HalVolume_Impl>(volume.v_impl).swap(v_impl);
922 // --------------------------------------------------------------
923 HalVolume::~HalVolume()
925 MutexLock lock(g_Mutex);
930 // --------------------------------------------------------------
932 HalVolume::operator=(const HalVolume &volume)
934 MutexLock lock(g_Mutex);
939 zypp::RW_pointer<HalVolume_Impl>(volume.v_impl).swap(v_impl);
943 // --------------------------------------------------------------
944 HalVolume::operator HalVolume::bool_type() const
946 MutexLock lock(g_Mutex);
951 // --------------------------------------------------------------
953 HalVolume::getUDI() const
955 MutexLock lock(g_Mutex);
956 VERIFY_VOLUME(v_impl);
958 const char *ptr = libhal_volume_get_udi(v_impl->vol);
959 return std::string(ptr ? ptr : "");
962 // --------------------------------------------------------------
964 HalVolume::getDeviceFile() const
966 MutexLock lock(g_Mutex);
967 VERIFY_VOLUME(v_impl);
969 return std::string(libhal_volume_get_device_file(v_impl->vol));
972 // --------------------------------------------------------------
974 HalVolume::getDeviceMajor() const
976 MutexLock lock(g_Mutex);
977 VERIFY_VOLUME(v_impl);
979 return libhal_volume_get_device_major(v_impl->vol);
982 // --------------------------------------------------------------
984 HalVolume::getDeviceMinor() const
986 MutexLock lock(g_Mutex);
987 VERIFY_VOLUME(v_impl);
989 return libhal_volume_get_device_minor(v_impl->vol);
992 // --------------------------------------------------------------
994 HalVolume::isDisc() const
996 MutexLock lock(g_Mutex);
997 VERIFY_VOLUME(v_impl);
999 return libhal_volume_is_disc(v_impl->vol);
1002 // --------------------------------------------------------------
1004 HalVolume::isPartition() const
1006 MutexLock lock(g_Mutex);
1007 VERIFY_VOLUME(v_impl);
1009 return libhal_volume_is_partition(v_impl->vol);
1012 // --------------------------------------------------------------
1014 HalVolume::isMounted() const
1016 MutexLock lock(g_Mutex);
1017 VERIFY_VOLUME(v_impl);
1019 return libhal_volume_is_mounted(v_impl->vol);
1022 // --------------------------------------------------------------
1024 HalVolume::getFSType() const
1026 MutexLock lock(g_Mutex);
1027 VERIFY_VOLUME(v_impl);
1029 return std::string( libhal_volume_get_fstype(v_impl->vol));
1032 // --------------------------------------------------------------
1034 HalVolume::getFSUsage() const
1036 MutexLock lock(g_Mutex);
1037 VERIFY_VOLUME(v_impl);
1039 LibHalVolumeUsage usage( libhal_volume_get_fsusage(v_impl->vol));
1043 case LIBHAL_VOLUME_USAGE_MOUNTABLE_FILESYSTEM:
1046 case LIBHAL_VOLUME_USAGE_PARTITION_TABLE:
1047 ret = "partitiontable";
1049 case LIBHAL_VOLUME_USAGE_RAID_MEMBER:
1052 case LIBHAL_VOLUME_USAGE_CRYPTO:
1055 case LIBHAL_VOLUME_USAGE_UNKNOWN:
1062 // --------------------------------------------------------------
1064 HalVolume::getMountPoint() const
1066 VERIFY_VOLUME(v_impl);
1068 return std::string( libhal_volume_get_mount_point(v_impl->vol));
1072 ////////////////////////////////////////////////////////////////
1074 //////////////////////////////////////////////////////////////////
1075 //////////////////////////////////////////////////////////////////
1076 } // namespace target
1077 ////////////////////////////////////////////////////////////////////
1078 ////////////////////////////////////////////////////////////////////
1080 //////////////////////////////////////////////////////////////////////
1082 #include <zypp/target/hal/HalContext.h>
1083 #include <zypp/target/hal/HalException.h>
1085 { ////////////////////////////////////////////////////////////////////
1086 ////////////////////////////////////////////////////////////////////
1088 { //////////////////////////////////////////////////////////////////
1089 //////////////////////////////////////////////////////////////////
1091 { ////////////////////////////////////////////////////////////////
1094 HalException::dumpOn( std::ostream & str ) const
1097 // --------------------------------------------------------------
1098 class HalContext_Impl
1102 class HalVolume_Impl
1105 // --------------------------------------------------------------
1106 HalContext::HalContext(bool)
1108 HalContext::~HalContext()
1111 HalContext::operator=(const HalContext &)
1113 HalContext::operator HalContext::bool_type() const
1116 HalContext::connect()
1118 std::vector<std::string>
1119 HalContext::getAllDevices() const
1120 { return std::vector<std::string>(); }
1122 HalContext::getDriveFromUDI(const std::string &) const
1123 { return HalDrive(); }
1125 HalContext::getVolumeFromUDI(const std::string &) const
1126 { return HalVolume(); }
1128 HalContext::getVolumeFromDeviceFile(const std::string &) const
1129 { return HalVolume(); }
1130 std::vector<std::string>
1131 HalContext::findDevicesByCapability(const std::string &) const
1132 { return std::vector<std::string>(); }
1134 HalContext::getDevicePropertyBool(const std::string &, const std::string &) const
1137 HalContext::setDevicePropertyBool (const std::string &, const std::string &, bool value)
1140 HalContext::removeDeviceProperty(const std::string &, const std::string &)
1143 HalContext::getDevicePropertyString(const std::string &, const std::string &) const
1145 // --------------------------------------------------------------
1146 HalDrive::HalDrive()
1148 HalDrive::~HalDrive()
1151 HalDrive::operator=(const HalDrive &)
1153 HalDrive::operator HalDrive::bool_type() const
1156 HalDrive::getUDI() const
1157 { return std::string(); }
1159 HalDrive::getTypeName() const
1160 { return std::string(); }
1162 HalDrive::getDeviceFile() const
1163 { return std::string(); }
1165 HalDrive::getDeviceMinor() const
1168 HalDrive::getDeviceMajor() const
1171 HalDrive::usesRemovableMedia() const
1173 std::vector<std::string>
1174 HalDrive::getCdromCapabilityNames() const
1175 { return std::vector<std::string>(); }
1176 std::vector<std::string>
1177 HalDrive::findAllVolumes() const
1178 { return std::vector<std::string>(); }
1180 // --------------------------------------------------------------
1181 HalVolume::HalVolume()
1183 HalVolume::~HalVolume()
1186 HalVolume::operator=(const HalVolume &)
1188 HalVolume::operator HalVolume::bool_type() const
1191 HalVolume::getUDI() const
1192 { return std::string(); }
1194 HalVolume::getDeviceFile() const
1195 { return std::string(); }
1197 HalVolume::getDeviceMinor() const
1200 HalVolume::getDeviceMajor() const
1203 HalVolume::isDisc() const
1206 HalVolume::isPartition() const
1209 HalVolume::isMounted() const
1212 HalVolume::getFSType() const
1213 { return std::string(); }
1215 HalVolume::getFSUsage() const
1216 { return std::string(); }
1218 HalVolume::getMountPoint() const
1219 { return std::string(); }
1221 ////////////////////////////////////////////////////////////////
1223 //////////////////////////////////////////////////////////////////
1224 //////////////////////////////////////////////////////////////////
1225 } // namespace target
1226 ////////////////////////////////////////////////////////////////////
1227 ////////////////////////////////////////////////////////////////////
1229 //////////////////////////////////////////////////////////////////////
1233 ** vim: set ts=2 sts=2 sw=2 ai et: