Date: Fri, 22 Sep 1995 22:09:41 +0400 (MSD) From: "Serge V.Vakulenko" <vak@crox.net.kiae.su> To: current@freebsd.org Subject: [patch] wcd.c version 1.6 Message-ID: <Pine.BSF.3.91.950922220641.274A-100000@crox.net.kiae.su>
next in thread | raw e-mail | index | archive | help
Some ATAPI CD-ROM drives don't support READ_CAPACITY and READ_TOC commands. Fortunately, these commands are not necessary for data i/o. This patch makes such drives happy. Serge --- wcd15.c Fri Sep 22 00:06:44 1995 +++ wcd.c Fri Sep 22 21:40:28 1995 @@ -12,7 +12,7 @@ * or modify this software as long as this message is kept with the software, * all derivative works or modified versions. * - * Version 1.5, Thu Sep 21 23:08:11 MSD 1995 + * Version 1.6, Fri Sep 22 21:40:12 MSD 1995 */ #include "wd.h" @@ -403,18 +403,19 @@ /* Read table of contents. */ if (wcd_read_toc (t) != 0) - return (EIO); + bzero (&t->toc, sizeof (t->toc)); /* Read disc capacity. */ if (wcd_request_wait (t, ATAPI_READ_CAPACITY, 0, 0, 0, 0, 0, 0, 0, sizeof(t->info), 0, (char*)&t->info, sizeof(t->info)) != 0) - return (EIO); + bzero (&t->info, sizeof (t->info)); t->info.volsize = ntohl (t->info.volsize); t->info.blksize = ntohl (t->info.blksize); /* Print the disc description string on every disc change. * It would help to track the history of disc changes. */ - if (t->flags & (F_MEDIA_CHANGED | F_DEBUG)) { + if (t->info.volsize && t->toc.hdr.ending_track && + (t->flags & (F_MEDIA_CHANGED | F_DEBUG))) { printf ("wcd%d: ", t->lun); if (t->toc.tab[0].control & 4) printf ("%ldMB ", t->info.volsize / 512); @@ -692,6 +693,8 @@ 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0); case CDIOREADTOCHEADER: + if (! t->toc.hdr.ending_track) + return (ENODEV); bcopy (&t->toc.hdr, addr, sizeof t->toc.hdr); break; @@ -702,6 +705,8 @@ struct toc buf; u_long len; + if (! t->toc.hdr.ending_track) + return (ENODEV); if (te->starting_track < toc->hdr.starting_track || te->starting_track > toc->hdr.ending_track) return (EINVAL); @@ -792,6 +797,9 @@ struct ioc_play_track *args = (struct ioc_play_track*) addr; u_long start, len; int t1, t2; + + if (! t->toc.hdr.ending_track) + return (ENODEV); /* Ignore index fields, * play from start_track to end_track inclusive. */ --- Serge Vakulenko <vak@cronyx.msk.su> Cronyx Ltd., Moscow Unix consulting and custom programming phone: +7 (095) 939-23-23 FreeBSD support fax: +7 (095) 939-03-00 Relcom network development
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.91.950922220641.274A-100000>