All pastes #627962 Raw Edit

Someone

public text v1 · immutable
·published 2007-07-20 16:53 UTC
rendered paste body
diff --git a/tools/hal-storage-shared.c b/tools/hal-storage-shared.c
index 005abd4..e4f22eb 100644
--- a/tools/hal-storage-shared.c
+++ b/tools/hal-storage-shared.c
@@ -658,6 +658,48 @@ #endif

        /* eject was succesful... */

+       /* Do not unbind CDROM, eject on thoses are "open the tray", not unbind */
+       if(libhal_drive_get_type(drive) != LIBHAL_DRIVE_TYPE_CDROM) {
+               char * usb_if;
+               char * usb_dev = NULL;
+               /* Get the usb Interface */
+               usb_if = libhal_device_get_property_string(hal_ctx,udi,"storage.originating_device",NULL);
+               if(usb_if) {
+                       /* Get usb device */
+                       usb_dev = libhal_device_get_property_string(hal_ctx,usb_if,"info.parent",NULL);
+                       if(usb_dev) {
+                               /* Make sure this is an usb device */
+                               char * device_path;
+                               char * driver;
+                               driver = libhal_device_get_property_string(hal_ctx,usb_dev,"info.linux.driver",NULL);
+                               if(!strcmp(driver,"usb")) {
+                               /* Get the sysfs path, top directory is the device string */
+                                       device_path = libhal_device_get_property_string(hal_ctx,usb_dev,"linux.sysfs_path",NULL);
+                                       if(device_path) {
+                                               char * dev_str;
+                                               dev_str = rindex(device_path,'/')+1;
+                                               if(dev_str) {
+                                                       int fd;
+                                                       fd = open("/sys/bus/usb/drivers/usb/unbind",O_WRONLY);
+                                                       if(fd != -1) {
+                                                               write(fd,dev_str,strlen(dev_str));
+                                                               close(fd);
+                                                       }
+                                               }
+                                       }
+                               }
+                               if(driver)
+                                       libhal_free_string(driver);
+                               if(device_path)
+                                       libhal_free_string(device_path);
+                       }
+               }
+               if(usb_if)
+                       libhal_free_string(usb_if);
+               if(usb_dev)
+                       libhal_free_string(usb_dev);
+       }
+
 #ifdef DEBUG
        printf ("done ejecting\n");
 #endif