| 1407 | } |
| 1408 | |
| 1409 | static int scsi_read_cd_data (int unitnum, uae_u8 *scsi_data, uae_u32 offset, uae_u32 len, struct device_info *di, int *scsi_len, struct cd_toc *t) |
| 1410 | { |
| 1411 | struct blkdevstate *st = &state[unitnum]; |
| 1412 | int end = t[1].paddress; |
| 1413 | |
| 1414 | if (len == 0) { |
| 1415 | if (offset >= end) |
| 1416 | return -1; |
| 1417 | *scsi_len = 0; |
| 1418 | return 0; |
| 1419 | } else { |
| 1420 | if (offset >= end) |
| 1421 | return -1; |
| 1422 | int v = cmd_readx (unitnum, scsi_data, offset, len) * di->bytespersector; |
| 1423 | if (v > 0) { |
| 1424 | st->current_pos = offset + len; |
| 1425 | *scsi_len = v; |
| 1426 | return 0; |
| 1427 | } |
| 1428 | return -2; |
| 1429 | } |
| 1430 | } |
| 1431 | |
| 1432 | int scsi_cd_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, |
| 1433 | uae_u8 *scsi_data, int *data_len, uae_u8 *r, int *reply_len, uae_u8 *s, int *sense_len, bool atapi) |
no test coverage detected