int gp_port_library_list (GPPortInfoList *list) { DIR *dir; struct dirent *dirent; int ret; GPPortInfo info; unsigned short vendor_id, product_id; dir = opendir ("/sys/class/scsi_generic"); if (dir == NULL) return GP_OK; while ((dirent = readdir (dir))) { char path[4096]; if (gp_port_usbscsi_get_usb_id (dirent->d_name, &vendor_id, &product_id) != GP_OK) continue; /* Not a usb device */ gp_port_info_new (&info); gp_port_info_set_type (info, GP_PORT_USB_SCSI); snprintf (path, sizeof (path), "usbscsi:/dev/%s", dirent->d_name); gp_port_info_set_path (info, path); gp_port_info_set_name (info, _("USB Mass Storage raw SCSI")); ret = gp_port_info_list_append (list, info); if (ret < GP_OK) /* can only be out of memory */ break; } closedir (dir); return GP_OK; }
int gp_port_library_list (GPPortInfoList *list) { DIR *dir; struct dirent *dirent; GPPortInfo info; unsigned short vendor_id, product_id; dir = opendir ("/sys/class/scsi_generic"); if (dir == NULL) return GP_OK; while ((dirent = readdir (dir))) { if (gp_port_usbscsi_get_usb_id (dirent->d_name, &vendor_id, &product_id) != GP_OK) continue; /* Not a usb device */ info.type = GP_PORT_USB_SCSI; snprintf (info.path, sizeof (info.path), "usbscsi:/dev/%s", dirent->d_name); snprintf (info.name, sizeof (info.name), _("USB Mass Storage raw SCSI")); CHECK (gp_port_info_list_append (list, info)) } closedir (dir); return GP_OK; }
static int gp_port_usbscsi_find_device(GPPort *port, int idvendor, int idproduct) { unsigned short vendor_id, product_id; const char *sg; C_PARAMS (port); sg = strrchr (port->settings.usbscsi.path, '/'); C_PARAMS (sg); sg++; CHECK (gp_port_usbscsi_get_usb_id (sg, &vendor_id, &product_id)) if (vendor_id != idvendor || product_id != idproduct) return GP_ERROR_IO_USB_FIND; return GP_OK; }