Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
NetBSD/OpenBSD: Do not assume the first track number is 1.
  • Loading branch information
vext01 committed Dec 1, 2018
1 parent 4dab9d8 commit d04c48e
Showing 1 changed file with 23 additions and 12 deletions.
35 changes: 23 additions & 12 deletions lib/driver/netbsd.c
Expand Up @@ -565,27 +565,33 @@ static track_format_t
get_track_format_netbsd(void *user_data, track_t track_num)
{
_img_private_t *_obj = user_data;
int res;
int res, first_track = 0, track_idx = 0;

if (!_obj->toc_valid) {
res = _cdio_read_toc(_obj);
if (!res)
return TRACK_FORMAT_ERROR;
}

if (track_num > TOTAL_TRACKS || track_num == 0)
return TRACK_FORMAT_ERROR;
first_track = _obj->gen.i_first_track;

if (!_obj->gen.toc_init ||
track_num > (first_track + _obj->gen.i_tracks) ||
track_num < first_track)
return (CDIO_INVALID_TRACK);

track_idx = track_num - first_track;

if (_obj->tocent[track_num - 1].control & 0x04) {
if (_obj->tocent[track_idx].control & 0x04) {
if (!_obj->sessionformat_valid) {
res = _cdio_read_discinfo(_obj);
if (res)
return TRACK_FORMAT_ERROR;
}

if (_obj->sessionformat[track_num - 1] == 0x10)
if (_obj->sessionformat[track_idx] == 0x10)
return TRACK_FORMAT_CDI;
else if (_obj->sessionformat[track_num - 1] == 0x20)
else if (_obj->sessionformat[track_idx] == 0x20)
return TRACK_FORMAT_XA;
else
return TRACK_FORMAT_DATA;
Expand Down Expand Up @@ -622,7 +628,7 @@ static bool
get_track_msf_netbsd(void *user_data, track_t track_num, msf_t *msf)
{
_img_private_t *_obj = user_data;
int res;
int res, first_track = 0, track_idx = 0;

if (!msf)
return false;
Expand All @@ -636,12 +642,17 @@ get_track_msf_netbsd(void *user_data, track_t track_num, msf_t *msf)
if (track_num == CDIO_CDROM_LEADOUT_TRACK)
track_num = TOTAL_TRACKS + 1;

if (track_num > TOTAL_TRACKS + 1 || track_num == 0)
return false;
first_track = _obj->gen.i_first_track;

if (!_obj->gen.toc_init ||
track_num > (first_track + _obj->gen.i_tracks) ||
track_num < first_track)
return (CDIO_INVALID_TRACK);

msf->m = cdio_to_bcd8(_obj->tocent[track_num - 1].addr.msf.minute);
msf->s = cdio_to_bcd8(_obj->tocent[track_num - 1].addr.msf.second);
msf->f = cdio_to_bcd8(_obj->tocent[track_num - 1].addr.msf.frame);
track_idx = track_num - first_track;
msf->m = cdio_to_bcd8(_obj->tocent[track_idx].addr.msf.minute);
msf->s = cdio_to_bcd8(_obj->tocent[track_idx].addr.msf.second);
msf->f = cdio_to_bcd8(_obj->tocent[track_idx].addr.msf.frame);

return true;
}
Expand Down

0 comments on commit d04c48e

Please sign in to comment.