return true;
}
-
-
-pkgUdevCdromDevices::pkgUdevCdromDevices()
+ /*}}}*/
++pkgUdevCdromDevices::pkgUdevCdromDevices() /*{{{*/
+ : libudev_handle(NULL)
+ {
+
+ }
++ /*}}}*/
+
+ bool
-pkgUdevCdromDevices::Dlopen()
++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_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;
+ }
-
++ /*}}}*/
+ vector<CdromDevice>
-pkgUdevCdromDevices::Scan()
++pkgUdevCdromDevices::Scan() /*{{{*/
+ {
+ vector<CdromDevice> cdrom_devices;
+ 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);
+ udev_enumerate_add_match_property(enumerate, "ID_CDROM", "1");
+
+ udev_enumerate_scan_devices (enumerate);
+ devices = udev_enumerate_get_list_entry (enumerate);
+ for (l = devices; l != NULL; l = udev_list_entry_get_next (l))
+ {
+ CdromDevice cdrom;
+ struct udev_device *udevice;
+ udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerate), udev_list_entry_get_name (l));
+ if (udevice == NULL)
+ continue;
+ const char* devnode = udev_device_get_devnode(udevice);
+ const char* mountpath = udev_device_get_property_value(udevice, "FSTAB_DIR");
+
+ // fill in the struct
+ cdrom.DeviceName = string(devnode);
+ if (mountpath) {
+ cdrom.MountPath = mountpath;
+ string s = string(mountpath);
+ cdrom.Mounted = IsMounted(s);
+ } else {
+ cdrom.Mounted = false;
+ cdrom.MountPath = "";
+ }
+ cdrom_devices.push_back(cdrom);
+ }
+ return cdrom_devices;
+ }
++ /*}}}*/
+
-
-pkgUdevCdromDevices::~pkgUdevCdromDevices()
++pkgUdevCdromDevices::~pkgUdevCdromDevices() /*{{{*/
+ {
+ dlclose(libudev_handle);
+ }
++ /*}}}*/
bool Ident(string &ident, pkgCdromStatus *log);
bool Add(pkgCdromStatus *log);
};
+ /*}}}*/
-struct CdromDevice
+
+ // class that uses libudev to find cdrom devices dynamically
-
-class pkgUdevCdromDevices
++struct CdromDevice /*{{{*/
+ {
+ string DeviceName;
+ bool Mounted;
+ string MountPath;
+ };
-
-
++ /*}}}*/
++class pkgUdevCdromDevices /*{{{*/
+ {
+ protected:
+ // libudev dlopen stucture
+ 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);
+ // end libudev dlopen
+
+ public:
+ pkgUdevCdromDevices();
+ virtual ~pkgUdevCdromDevices();
+
+ // try to open
+ bool Dlopen();
+ vector<CdromDevice> Scan();
+ };
++ /*}}}*/
+
#endif
# methods/makefile - FIXME
LIBRARY=apt-pkg
LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER)
-MAJOR=4.7
+MAJOR=4.8
MINOR=0
- SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil
+ SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil -ldl
APT_DOMAIN:=libapt-pkg$(MAJOR)
# Source code for the contributed non-core things
* build fixes for g++-4.4
* cmdline/apt-mark:
- add "showauto" option to show automatically installed packages
+ * document --install-recommends and --no-install-recommends
+ (thanks to Dereck Wonnacott, LP: #126180)
+ * doc/apt.conf.5.xml:
+ - merged patch from Aurélien Couderc to improve the text
+ (thanks!)
++ * [ABI] merged the libudev-dlopen branch, this allows to pass
++ "apt-udev-auto" to Acquire::Cdrom::mount and the cdrom method will
++ dynamically find/mount the cdrom device (if libhal is available)
+
+ [ Julian Andres Klode ]
+ * apt-pkg/contrib/configuration.cc: Fix a small memory leak in
+ ReadConfigFile.
+ * Introduce support for the Enhances field. (Closes: #137583)
+ * Support /etc/apt/preferences.d, by adding ReadPinDir() (Closes: #535512)
+ * configure-index: document Dir::Etc::SourceParts and some other options
+ (Closes: #459605)
+ * Remove Eugene V. Lyubimkin from uploaders as requested.
+ * apt-pkg/contrib/hashes.cc, apt-pkg/contrib/md5.cc:
+ - Support reading until EOF if Size=0 to match behaviour of
+ SHA1Summation and SHA256Summation
+
+ [ Osamu Aoki ]
+ * Updated cron script to support backups by hardlinks and
+ verbose levels. All features turned off by default.
+ * Added more error handlings. Closes: #438803, #462734, #454989,
+ * Documented all cron script related configuration items in
+ configure-index.
[ Dereck Wonnacott ]
* apt-ftparchive might write corrupt Release files (LP: #46439)