cdrom.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #ifndef PKGLIB_CDROM_H
  2. #define PKGLIB_CDROM_H
  3. #include <apt-pkg/macros.h>
  4. #include<string>
  5. #include<vector>
  6. #include <stddef.h>
  7. #ifndef APT_8_CLEANER_HEADERS
  8. #include <apt-pkg/init.h>
  9. using namespace std;
  10. #endif
  11. class Configuration;
  12. class OpProgress;
  13. class pkgCdromStatus /*{{{*/
  14. {
  15. protected:
  16. int totalSteps;
  17. public:
  18. pkgCdromStatus() : totalSteps(0) {};
  19. virtual ~pkgCdromStatus() {};
  20. // total steps
  21. virtual void SetTotal(int total) { totalSteps = total; };
  22. // update steps, will be called regularly as a "pulse"
  23. virtual void Update(std::string text="", int current=0) = 0;
  24. // ask for cdrom insert
  25. virtual bool ChangeCdrom() = 0;
  26. // ask for cdrom name
  27. virtual bool AskCdromName(std::string &Name) = 0;
  28. // Progress indicator for the Index rewriter
  29. virtual OpProgress* GetOpProgress() {return NULL; };
  30. };
  31. /*}}}*/
  32. class pkgCdrom /*{{{*/
  33. {
  34. protected:
  35. enum {
  36. STEP_PREPARE = 1,
  37. STEP_UNMOUNT,
  38. STEP_WAIT,
  39. STEP_MOUNT,
  40. STEP_IDENT,
  41. STEP_SCAN,
  42. STEP_COPY,
  43. STEP_WRITE,
  44. STEP_UNMOUNT3,
  45. STEP_LAST
  46. };
  47. bool FindPackages(std::string CD,
  48. std::vector<std::string> &List,
  49. std::vector<std::string> &SList,
  50. std::vector<std::string> &SigList,
  51. std::vector<std::string> &TransList,
  52. std::string &InfoDir, pkgCdromStatus *log,
  53. unsigned int Depth = 0);
  54. bool DropBinaryArch(std::vector<std::string> &List);
  55. bool DropRepeats(std::vector<std::string> &List,const char *Name);
  56. bool DropTranslation(std::vector<std::string> &List);
  57. void ReduceSourcelist(std::string CD,std::vector<std::string> &List);
  58. bool WriteDatabase(Configuration &Cnf);
  59. bool WriteSourceList(std::string Name,std::vector<std::string> &List,bool Source);
  60. int Score(std::string Path);
  61. public:
  62. bool Ident(std::string &ident, pkgCdromStatus *log);
  63. bool Add(pkgCdromStatus *log);
  64. private:
  65. APT_HIDDEN bool MountAndIdentCDROM(Configuration &Database, std::string &CDROM,
  66. std::string &ident, pkgCdromStatus * const log, bool const interactive);
  67. };
  68. /*}}}*/
  69. // class that uses libudev to find cdrom/removable devices dynamically
  70. struct CdromDevice /*{{{*/
  71. {
  72. std::string DeviceName;
  73. bool Mounted;
  74. std::string MountPath;
  75. };
  76. /*}}}*/
  77. class pkgUdevCdromDevices /*{{{*/
  78. {
  79. protected:
  80. // libudev dlopen structure
  81. void *libudev_handle;
  82. struct udev* (*udev_new)(void);
  83. int (*udev_enumerate_add_match_property)(struct udev_enumerate *udev_enumerate, const char *property, const char *value);
  84. int (*udev_enumerate_scan_devices)(struct udev_enumerate *udev_enumerate);
  85. struct udev_list_entry* (*udev_enumerate_get_list_entry)(struct udev_enumerate *udev_enumerate);
  86. struct udev_device* (*udev_device_new_from_syspath)(struct udev *udev, const char *syspath);
  87. struct udev* (*udev_enumerate_get_udev)(struct udev_enumerate *udev_enumerate);
  88. const char* (*udev_list_entry_get_name)(struct udev_list_entry *list_entry);
  89. const char* (*udev_device_get_devnode)(struct udev_device *udev_device);
  90. struct udev_enumerate *(*udev_enumerate_new) (struct udev *udev);
  91. struct udev_list_entry *(*udev_list_entry_get_next)(struct udev_list_entry *list_entry);
  92. const char* (*udev_device_get_property_value)(struct udev_device *udev_device, const char *key);
  93. int (*udev_enumerate_add_match_sysattr)(struct udev_enumerate *udev_enumerate, const char *property, const char *value);
  94. // end libudev dlopen
  95. public:
  96. pkgUdevCdromDevices();
  97. virtual ~pkgUdevCdromDevices();
  98. // try to open
  99. bool Dlopen();
  100. // convenience interface, this will just call ScanForRemovable
  101. // with "APT::cdrom::CdromOnly"
  102. std::vector<CdromDevice> Scan();
  103. std::vector<CdromDevice> ScanForRemovable(bool CdromOnly);
  104. };
  105. /*}}}*/
  106. #endif