]> git.saurik.com Git - apt.git/commitdiff
[ABI] merged the libudev-dlopen branch, this allows to pass
authorMichael Vogt <michael.vogt@ubuntu.com>
Thu, 23 Jul 2009 08:41:38 +0000 (10:41 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Thu, 23 Jul 2009 08:41:38 +0000 (10:41 +0200)
"apt-udev-auto" to Acquire::Cdrom::mount and the cdrom method will
dynamically find/mount the cdrom device (if libhal is available)

1  2 
apt-pkg/cdrom.cc
apt-pkg/cdrom.h
apt-pkg/makefile
debian/changelog
methods/makefile

index 8796805bbab301af77679a7c31aeaf5c7b021c04,8be26e2bcabddd2138e3762bbae2f6b707dbe1c7..72d8e4d4174af464d9c9c8ddc6f9361f20eb0441
@@@ -839,4 -844,87 +839,88 @@@ bool pkgCdrom::Add(pkgCdromStatus *log
  
     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);
+ }
++                                                                      /*}}}*/
diff --cc apt-pkg/cdrom.h
index 608cb0e2fa5fa993785f909691c1c9fdbb413ef9,13e7203f41c7016e67cebd3cc97e76b4635ff33f..14ca1d8104dc163136e02a68426fca9a0283fdc6
@@@ -65,6 -65,43 +65,43 @@@ class pkgCdrom                                                              /*{{{*
     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
index 059f8532bcca95fc38cf8689a5508556d4288f67,387151baf7aed74e8be883e2f95b917bd6979006..92ef58967a98f1183384b5b02746710530ee220f
@@@ -13,9 -13,9 +13,9 @@@ include ../buildlib/defaults.ma
  # 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
index ff1483dfc491b824c05c2ada045f44dd44c2dbcc,cce7fc0f779b39aabb829c454178af66d134f20b..30edf07577cdac9047e57607397389912299e7ba
@@@ -91,30 -82,6 +91,33 @@@ apt (0.7.22) UNRELEASED; urgency=lo
    * 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)
Simple merge