version 1.76, 2019/04/01 03:57:07 |
version 1.77, 2019/06/28 13:35:00 |
|
|
return (0); |
return (0); |
|
|
rc = ioctl(fd, CDIOCRESET); |
rc = ioctl(fd, CDIOCRESET); |
if (rc < 0) |
if (rc == -1) |
return rc; |
return rc; |
close(fd); |
close(fd); |
fd = -1; |
fd = -1; |
|
|
|
|
(void) ioctl(fd, CDIOCALLOW); |
(void) ioctl(fd, CDIOCALLOW); |
rc = ioctl(fd, CDIOCEJECT); |
rc = ioctl(fd, CDIOCEJECT); |
if (rc < 0) |
if (rc == -1) |
return (rc); |
return (rc); |
#if defined(__OpenBSD__) |
#if defined(__OpenBSD__) |
close(fd); |
close(fd); |
|
|
|
|
(void) ioctl(fd, CDIOCALLOW); |
(void) ioctl(fd, CDIOCALLOW); |
rc = ioctl(fd, CDIOCCLOSE); |
rc = ioctl(fd, CDIOCCLOSE); |
if (rc < 0) |
if (rc == -1) |
return (rc); |
return (rc); |
close(fd); |
close(fd); |
fd = -1; |
fd = -1; |
|
|
|
|
rc = ioctl(fd, CDIOREADTOCHEADER, &h); |
rc = ioctl(fd, CDIOREADTOCHEADER, &h); |
|
|
if (rc < 0) |
if (rc == -1) |
return (rc); |
return (rc); |
|
|
if (h.starting_track > h.ending_track) { |
if (h.starting_track > h.ending_track) { |
|
|
trk--; |
trk--; |
|
|
rc = ioctl(fd, CDIOREADTOCHEADER, &h); |
rc = ioctl(fd, CDIOREADTOCHEADER, &h); |
if (rc < 0) { |
if (rc == -1) { |
warn("getting toc header"); |
warn("getting toc header"); |
return (rc); |
return (rc); |
} |
} |
|
|
|
|
if (status (&trk, &min, &sec, &frm) >= 0) { |
if (status (&trk, &min, &sec, &frm) >= 0) { |
rc = ioctl(fd, CDIOREADTOCHEADER, &h); |
rc = ioctl(fd, CDIOREADTOCHEADER, &h); |
if (rc < 0) { |
if (rc == -1) { |
warn("getting toc header"); |
warn("getting toc header"); |
return (rc); |
return (rc); |
} |
} |
|
|
if (status(&trk, &min, &sec, &frm) >= 0) { |
if (status(&trk, &min, &sec, &frm) >= 0) { |
trk++; |
trk++; |
rc = ioctl(fd, CDIOREADTOCHEADER, &h); |
rc = ioctl(fd, CDIOREADTOCHEADER, &h); |
if (rc < 0) { |
if (rc == -1) { |
warn("getting toc header"); |
warn("getting toc header"); |
return (rc); |
return (rc); |
} |
} |
|
|
s.address_format = msf ? CD_MSF_FORMAT : CD_LBA_FORMAT; |
s.address_format = msf ? CD_MSF_FORMAT : CD_LBA_FORMAT; |
s.data_format = CD_CURRENT_POSITION; |
s.data_format = CD_CURRENT_POSITION; |
|
|
if (ioctl(fd, CDIOCREADSUBCHANNEL, (char *) &s) < 0) |
if (ioctl(fd, CDIOCREADSUBCHANNEL, (char *) &s) == -1) |
return -1; |
return -1; |
|
|
*trk = s.data->what.position.track_number; |
*trk = s.data->what.position.track_number; |
|
|
fd = opendev(dev, O_RDWR, OPENDEV_PART, &realdev); |
fd = opendev(dev, O_RDWR, OPENDEV_PART, &realdev); |
else |
else |
fd = opendev(dev, O_RDONLY, OPENDEV_PART, &realdev); |
fd = opendev(dev, O_RDONLY, OPENDEV_PART, &realdev); |
if (fd < 0) { |
if (fd == -1) { |
if (errno == ENXIO) { |
if (errno == ENXIO) { |
/* ENXIO has an overloaded meaning here. |
/* ENXIO has an overloaded meaning here. |
* The original "Device not configured" should |
* The original "Device not configured" should |
|
|
} |
} |
sleep(1); |
sleep(1); |
} |
} |
if (fd < 0) { |
if (fd == -1) { |
warn("Can't open %s", realdev); |
warn("Can't open %s", realdev); |
return (0); |
return (0); |
} |
} |