summaryrefslogtreecommitdiffstats
path: root/sys/scsi/cd.c
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1996-01-30 16:38:30 +0000
committerache <ache@FreeBSD.org>1996-01-30 16:38:30 +0000
commita6fe55033b1d136f5456f3ab300427af351a4ea4 (patch)
treea0c7d739c5cc87a5bc134460f46292b9d6695e32 /sys/scsi/cd.c
parent62cdcaa268e9ad16b906a817690d3036e0f12eee (diff)
downloadFreeBSD-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.c17
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)
OpenPOWER on IntegriCloud