diff options
Diffstat (limited to 'apt-pkg')
-rw-r--r-- | apt-pkg/CMakeLists.txt | 2 | ||||
-rw-r--r-- | apt-pkg/cdrom.cc | 47 | ||||
-rw-r--r-- | apt-pkg/cdrom.h | 31 |
3 files changed, 28 insertions, 52 deletions
diff --git a/apt-pkg/CMakeLists.txt b/apt-pkg/CMakeLists.txt index e3e078b81..651e55c79 100644 --- a/apt-pkg/CMakeLists.txt +++ b/apt-pkg/CMakeLists.txt @@ -44,6 +44,7 @@ target_include_directories(apt-pkg ${BZIP2_INCLUDE_DIR} ${LZMA_INCLUDE_DIRS} ${LZ4_INCLUDE_DIRS} + ${UDEV_INCLUDE_DIRS} ${ICONV_INCLUDE_DIRS} ) @@ -54,6 +55,7 @@ target_link_libraries(apt-pkg ${BZIP2_LIBRARIES} ${LZMA_LIBRARIES} ${LZ4_LIBRARIES} + ${UDEV_LIBRARIES} ${ICONV_LIBRARIES} ) set_target_properties(apt-pkg PROPERTIES VERSION ${MAJOR}.${MINOR}) diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 2dccc6d12..4f57153f9 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -27,6 +27,10 @@ #include <apti18n.h> +#ifdef HAVE_UDEV +#include <libudev.h> +#endif + using namespace std; // FindPackages - Find the package files on the CDROM /*{{{*/ @@ -913,43 +917,15 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ return true; } /*}}}*/ -pkgUdevCdromDevices::pkgUdevCdromDevices() /*{{{*/ -: d(NULL), libudev_handle(NULL), udev_new(NULL), udev_enumerate_add_match_property(NULL), - udev_enumerate_scan_devices(NULL), udev_enumerate_get_list_entry(NULL), - udev_device_new_from_syspath(NULL), udev_enumerate_get_udev(NULL), - udev_list_entry_get_name(NULL), udev_device_get_devnode(NULL), - udev_enumerate_new(NULL), udev_list_entry_get_next(NULL), - udev_device_get_property_value(NULL), udev_enumerate_add_match_sysattr(NULL) + +pkgUdevCdromDevices::pkgUdevCdromDevices() /*{{{*/ + : d(NULL) { } /*}}}*/ bool pkgUdevCdromDevices::Dlopen() /*{{{*/ { - // alread open - if(libudev_handle != NULL) - return true; - - // see if we can get libudev - void *h = ::dlopen("libudev.so.0", RTLD_LAZY); - if(h == NULL) - return false; - - // get the pointers to the udev structs - libudev_handle = h; - udev_new = (udev* (*)(void)) dlsym(h, "udev_new"); - udev_enumerate_add_match_property = (int (*)(udev_enumerate*, const char*, const char*))dlsym(h, "udev_enumerate_add_match_property"); - udev_enumerate_add_match_sysattr = (int (*)(udev_enumerate*, const char*, const char*))dlsym(h, "udev_enumerate_add_match_sysattr"); - udev_enumerate_scan_devices = (int (*)(udev_enumerate*))dlsym(h, "udev_enumerate_scan_devices"); - udev_enumerate_get_list_entry = (udev_list_entry* (*)(udev_enumerate*))dlsym(h, "udev_enumerate_get_list_entry"); - udev_device_new_from_syspath = (udev_device* (*)(udev*, const char*))dlsym(h, "udev_device_new_from_syspath"); - udev_enumerate_get_udev = (udev* (*)(udev_enumerate*))dlsym(h, "udev_enumerate_get_udev"); - udev_list_entry_get_name = (const char* (*)(udev_list_entry*))dlsym(h, "udev_list_entry_get_name"); - udev_device_get_devnode = (const char* (*)(udev_device*))dlsym(h, "udev_device_get_devnode"); - udev_enumerate_new = (udev_enumerate* (*)(udev*))dlsym(h, "udev_enumerate_new"); - udev_list_entry_get_next = (udev_list_entry* (*)(udev_list_entry*))dlsym(h, "udev_list_entry_get_next"); - udev_device_get_property_value = (const char* (*)(udev_device *, const char *))dlsym(h, "udev_device_get_property_value"); - return true; } /*}}}*/ @@ -963,13 +939,11 @@ vector<CdromDevice> pkgUdevCdromDevices::Scan() vector<CdromDevice> pkgUdevCdromDevices::ScanForRemovable(bool CdromOnly)/*{{{*/ { vector<CdromDevice> cdrom_devices; +#ifdef HAVE_UDEV struct udev_enumerate *enumerate; struct udev_list_entry *l, *devices; struct udev *udev_ctx; - if(libudev_handle == NULL) - return cdrom_devices; - udev_ctx = udev_new(); enumerate = udev_enumerate_new (udev_ctx); if (CdromOnly) @@ -1008,15 +982,14 @@ vector<CdromDevice> pkgUdevCdromDevices::ScanForRemovable(bool CdromOnly)/*{{{*/ cdrom.MountPath = ""; } cdrom_devices.push_back(cdrom); - } + } +#endif return cdrom_devices; } /*}}}*/ pkgUdevCdromDevices::~pkgUdevCdromDevices() /*{{{*/ { - if (libudev_handle != NULL) - dlclose(libudev_handle); } /*}}}*/ diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index 7425c09c1..6bc2b34f9 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -99,22 +99,23 @@ struct CdromDevice /*{{{*/ class pkgUdevCdromDevices /*{{{*/ { void * const d; + protected: - // libudev dlopen structure - void *libudev_handle; - struct udev* (*udev_new)(void); - int (*udev_enumerate_add_match_property)(struct udev_enumerate *udev_enumerate, const char *property, const char *value); - int (*udev_enumerate_scan_devices)(struct udev_enumerate *udev_enumerate); - struct udev_list_entry* (*udev_enumerate_get_list_entry)(struct udev_enumerate *udev_enumerate); - struct udev_device* (*udev_device_new_from_syspath)(struct udev *udev, const char *syspath); - struct udev* (*udev_enumerate_get_udev)(struct udev_enumerate *udev_enumerate); - const char* (*udev_list_entry_get_name)(struct udev_list_entry *list_entry); - const char* (*udev_device_get_devnode)(struct udev_device *udev_device); - struct udev_enumerate *(*udev_enumerate_new) (struct udev *udev); - struct udev_list_entry *(*udev_list_entry_get_next)(struct udev_list_entry *list_entry); - const char* (*udev_device_get_property_value)(struct udev_device *udev_device, const char *key); - int (*udev_enumerate_add_match_sysattr)(struct udev_enumerate *udev_enumerate, const char *property, const char *value); - // end libudev dlopen + // old libudev dlopen structure, not used anymore, but can't break ABI + void *_padding; + struct _padding *(*_padding__new)(void); + int (*_padding__enumerate_add_match_property)(struct _padding_enumerate *_padding_enumerate, const char *property, const char *value); + int (*_padding__enumerate_scan_devices)(struct _padding_enumerate *_padding_enumerate); + struct _padding_list_entry *(*_padding__enumerate_get_list_entry)(struct _padding_enumerate *_padding_enumerate); + struct _padding_device *(*_padding__device_new_from_syspath)(struct _padding *_padding, const char *syspath); + struct _padding *(*_padding__enumerate_get__padding)(struct _padding_enumerate *_padding_enumerate); + const char *(*_padding__list_entry_get_name)(struct _padding_list_entry *list_entry); + const char *(*_padding__device_get_devnode)(struct _padding_device *_padding_device); + struct _padding_enumerate *(*_padding__enumerate_new)(struct _padding *_padding); + struct _padding_list_entry *(*_padding__list_entry_get_next)(struct _padding_list_entry *list_entry); + const char *(*_padding__device_get_property_value)(struct _padding_device *_padding_device, const char *key); + int (*_padding__enumerate_add_match_sysattr)(struct _padding_enumerate *_padding_enumerate, const char *property, const char *value); + // end lib_padding dlopen public: pkgUdevCdromDevices(); |