X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/c5691ddf15797bead5d77021ee0524635798bebb..ea606ec43a364a8e471fd9502d79fe2dfeb6e4ba:/apt-pkg/cdrom.h diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index 085eb64e2..bd0902176 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -1,39 +1,44 @@ #ifndef PKGLIB_CDROM_H #define PKGLIB_CDROM_H -#include<apt-pkg/init.h> +#include <apt-pkg/macros.h> + #include<string> #include<vector> -#ifdef __GNUG__ -#pragma interface "apt-pkg/cdrom.h" -#endif +#include <stddef.h> +#ifndef APT_8_CLEANER_HEADERS +#include <apt-pkg/init.h> using namespace std; +#endif + +class Configuration; +class OpProgress; -class pkgCdromStatus +class pkgCdromStatus /*{{{*/ { protected: int totalSteps; public: - pkgCdromStatus() {}; + pkgCdromStatus() : totalSteps(0) {}; virtual ~pkgCdromStatus() {}; // total steps virtual void SetTotal(int total) { totalSteps = total; }; // update steps, will be called regularly as a "pulse" - virtual void Update(string text="", int current=0) = 0; + virtual void Update(std::string text="", int current=0) = 0; // ask for cdrom insert virtual bool ChangeCdrom() = 0; // ask for cdrom name - virtual bool AskCdromName(string &Name) = 0; + virtual bool AskCdromName(std::string &Name) = 0; // Progress indicator for the Index rewriter virtual OpProgress* GetOpProgress() {return NULL; }; }; - -class pkgCdrom + /*}}}*/ +class pkgCdrom /*{{{*/ { protected: enum { @@ -50,22 +55,73 @@ class pkgCdrom }; - bool FindPackages(string CD,vector<string> &List, - vector<string> &SList, vector<string> &SigList, - string &InfoDir, pkgCdromStatus *log, + bool FindPackages(std::string CD, + std::vector<std::string> &List, + std::vector<std::string> &SList, + std::vector<std::string> &SigList, + std::vector<std::string> &TransList, + std::string &InfoDir, pkgCdromStatus *log, unsigned int Depth = 0); - bool DropBinaryArch(vector<string> &List); - bool DropRepeats(vector<string> &List,const char *Name); - void ReduceSourcelist(string CD,vector<string> &List); + bool DropBinaryArch(std::vector<std::string> &List); + bool DropRepeats(std::vector<std::string> &List,const char *Name); + bool DropTranslation(std::vector<std::string> &List); + void ReduceSourcelist(std::string CD,std::vector<std::string> &List); bool WriteDatabase(Configuration &Cnf); - bool WriteSourceList(string Name,vector<string> &List,bool Source); - int Score(string Path); + bool WriteSourceList(std::string Name,std::vector<std::string> &List,bool Source); + int Score(std::string Path); public: - bool Ident(string &ident, pkgCdromStatus *log); + bool Ident(std::string &ident, pkgCdromStatus *log); bool Add(pkgCdromStatus *log); + + private: + APT_HIDDEN bool MountAndIdentCDROM(Configuration &Database, std::string &CDROM, + std::string &ident, pkgCdromStatus * const log, bool const interactive); + APT_HIDDEN bool UnmountCDROM(std::string const &CDROM, pkgCdromStatus * const log); +}; + /*}}}*/ + + +// class that uses libudev to find cdrom/removable devices dynamically +struct CdromDevice /*{{{*/ +{ + std::string DeviceName; + bool Mounted; + std::string MountPath; }; + /*}}}*/ +class pkgUdevCdromDevices /*{{{*/ +{ + 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 + + public: + pkgUdevCdromDevices(); + virtual ~pkgUdevCdromDevices(); + // try to open + bool Dlopen(); + // convenience interface, this will just call ScanForRemovable + // with "APT::cdrom::CdromOnly" + std::vector<CdromDevice> Scan(); + + std::vector<CdromDevice> ScanForRemovable(bool CdromOnly); +}; + /*}}}*/ #endif