diff options
author | ache <ache@FreeBSD.org> | 1996-01-30 16:38:30 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1996-01-30 16:38:30 +0000 |
commit | a6fe55033b1d136f5456f3ab300427af351a4ea4 (patch) | |
tree | a0c7d739c5cc87a5bc134460f46292b9d6695e32 /sys/scsi/cd.c | |
parent | 62cdcaa268e9ad16b906a817690d3036e0f12eee (diff) | |
download | FreeBSD-src-a6fe55033b1d136f5456f3ab300427af351a4ea4.zip FreeBSD-src-a6fe55033b1d136f5456f3ab300427af351a4ea4.tar.gz |
OOPS, forget to adjust starting track to not physically read
leadout entry
Diffstat (limited to 'sys/scsi/cd.c')
-rw-r--r-- | sys/scsi/cd.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/scsi/cd.c b/sys/scsi/cd.c index 4e37fbb..d057e15 100644 --- a/sys/scsi/cd.c +++ b/sys/scsi/cd.c @@ -14,7 +14,7 @@ * * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 * - * $Id: cd.c,v 1.58 1996/01/30 14:30:43 ache Exp $ + * $Id: cd.c,v 1.59 1996/01/30 16:12:18 ache Exp $ */ #include "opt_bounce.h" @@ -770,7 +770,7 @@ cd_ioctl(dev_t dev, int cmd, caddr_t addr, int flag, struct proc *p, (struct ioc_read_toc_entry *) addr; struct ioc_toc_header *th; u_int32 len, readlen, idx, num; - u_int32 starting_track = te->starting_track; + u_int32 starting_track = te->starting_track, readtrack; if ( te->data_len < sizeof(struct cd_toc_entry) || (te->data_len % sizeof(struct cd_toc_entry)) != 0 @@ -808,16 +808,17 @@ cd_ioctl(dev_t dev, int cmd, caddr_t addr, int flag, struct proc *p, } num = len / sizeof(struct cd_toc_entry); - /* calculate reading length without leadout entry */ - readlen = ((int)th->ending_track - starting_track) + 1; - if (readlen < 1) /* read at least one entry */ - readlen = 1; - readlen *= sizeof(struct cd_toc_entry); + /* calculate reading track/length without leadout entry */ + readtrack = starting_track; + if (readtrack == th->ending_track + 1) + readtrack--; + readlen = (th->ending_track - readtrack + 1) * + sizeof(struct cd_toc_entry); if (readlen > len) readlen = len; error = cd_read_toc(unit, te->address_format, - starting_track, + readtrack, data.entries, readlen); if (error) |