int scsi_enumerate_drives(void) { burn_drive_enumerator_t idx; int ret; char buf[64]; struct periph_match_result* result; ret = sg_init_enumerator(&idx); if (ret <= 0) return 0; while(1) { ret = sg_give_next_adr(&idx, buf, sizeof(buf), 0); if (ret <= 0) break; if (burn_drive_is_banned(buf)) continue; result = &idx->ccb.cdm.matches[idx->i].result.periph_result; enumerate_common(buf, result->path_id, result->path_id, 0, result->target_id, result->target_lun); } sg_destroy_enumerator(&idx); return 1; }
/** Brings all available, not-whitelist-banned, and accessible drives into libburn's list of drives. */ int scsi_enumerate_drives(void) { burn_drive_enumerator_t idx; int initialize = 1, ret; char buf[64]; while(1) { ret = sg_give_next_adr(&idx, buf, sizeof(buf), initialize); initialize = 0; if (ret <= 0) break; if (burn_drive_is_banned(buf)) continue; enumerate_common(buf, idx.result->path_id, idx.result->path_id, 0, idx.result->target_id, idx.result->target_lun); } sg_give_next_adr(&idx, buf, sizeof(buf), -1); return 1; }