summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2011-03-04 22:24:09 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2011-03-04 22:24:09 +0100
commitef38181605be2f7131bed9865d965300339389b5 (patch)
tree0ba041e882900e6ce104f28334521d3cbb728f21
parentb7bc31eb0bd71e2a3466df334a52a2c37c444d40 (diff)
apt-pkg/contrib/cdromutl.{cc,h}: add FindMountPointForDevice helper; apt-pkg/cdrom.cc: deal with missing FSTAB_DIR
-rw-r--r--apt-pkg/cdrom.cc7
-rw-r--r--apt-pkg/contrib/cdromutl.cc31
-rw-r--r--apt-pkg/contrib/cdromutl.h1
3 files changed, 39 insertions, 0 deletions
diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc
index 3dc7e9924..86fe45fbe 100644
--- a/apt-pkg/cdrom.cc
+++ b/apt-pkg/cdrom.cc
@@ -882,6 +882,8 @@ pkgUdevCdromDevices::Scan() /*{{{*/
udev_ctx = udev_new();
enumerate = udev_enumerate_new (udev_ctx);
udev_enumerate_add_match_property(enumerate, "ID_CDROM", "1");
+ //FIXME: just use removalble here to include usb etc
+ //udev_enumerate_add_match_sysattr(enumerate, "removable", "1");
udev_enumerate_scan_devices (enumerate);
devices = udev_enumerate_get_list_entry (enumerate);
@@ -894,6 +896,11 @@ pkgUdevCdromDevices::Scan() /*{{{*/
continue;
const char* devnode = udev_device_get_devnode(udevice);
const char* mountpath = udev_device_get_property_value(udevice, "FSTAB_DIR");
+ if (mountpath == NULL)
+ mountpath = FindMountPointForDevice(devnode);
+
+ if (_config->FindB("Debug::Acquire::cdrom", false))
+ cerr << "found " << devnode << " mounted on " << mountpath << endl;
// fill in the struct
cdrom.DeviceName = string(devnode);
diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc
index 68b980407..cf1c0c29b 100644
--- a/apt-pkg/contrib/cdromutl.cc
+++ b/apt-pkg/contrib/cdromutl.cc
@@ -15,6 +15,7 @@
#include <apt-pkg/md5.h>
#include <apt-pkg/fileutl.h>
#include <apt-pkg/configuration.h>
+#include <apt-pkg/strutl.h>
#include <apti18n.h>
@@ -234,3 +235,33 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version)
return true;
}
/*}}}*/
+
+// FindMountPointForDevice - Find mountpoint for the given device /*{{{*/
+char* FindMountPointForDevice(const char *devnode)
+{
+ char buf[255];
+ char *out[10];
+ int i=0;
+
+ // this is the order that mount uses as well
+ const char *mount[] = { "/etc/mtab",
+ "/proc/mount",
+ NULL };
+
+ for (i=0; mount[i] != NULL; i++) {
+ if (FileExists(mount[i])) {
+ FILE *f=fopen(mount[i], "r");
+ while ( fgets(buf, sizeof(buf), f) != NULL) {
+ if (strncmp(buf, devnode, strlen(devnode)) == 0) {
+ if(TokSplitString(' ', buf, out, 10))
+ return strdup(out[1]);
+ }
+ }
+ fclose(f);
+ }
+ }
+
+ return NULL;
+}
+
+
diff --git a/apt-pkg/contrib/cdromutl.h b/apt-pkg/contrib/cdromutl.h
index 9d14249c5..4f0f90347 100644
--- a/apt-pkg/contrib/cdromutl.h
+++ b/apt-pkg/contrib/cdromutl.h
@@ -19,5 +19,6 @@ bool MountCdrom(string Path, string DeviceName="");
bool UnmountCdrom(string Path);
bool IdentCdrom(string CD,string &Res,unsigned int Version = 2);
bool IsMounted(string &Path);
+char *FindMountPointForDevice(const char *device);
#endif