cdrom.h 3.4 KB

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