On Mon, 26 Sep 2011, Craig Rodrigues wrote:

On Mon, Sep 26, 2011 at 6:58 PM, Doug Barton <do...@freebsd.org> wrote:

I have used burncd on many releases of FreeBSD, on many machines
without problem.  I can see the fact that burncd suddenly failing to
work on ATAPI hardware could annoy and confused end-users.

It doesn't fail to work on ATAPI hardware. It fails to work on cd0 which
is a SCSI device. The fact that it's emulated doesn't matter.

True, but the subtlety of that distinction will be lost on a lot of end-users
not familiar with the implementation of the FreeBSD storage implementation.
To them "burncd just doesn't work, when it used to".


Can we modify burncd to somehow detect if ATAPI-CAM is enabled, and print out
a more useful error message?

Sure, as soon as someone volunteers to create that patch. No one is
*trying* to annoy users, but things change around here because people
are interested in changing them.


I am not familiar enough with the ATA_CAM work.  Is there a a sysctl or ioctl
that can be queried from userspace to detect if ATA_CAM is configured
in the kernel?

I would suggest something like:

...

        Please fix it and move on.
Thanks,
-Garrett

$ usr.sbin/burncd/burncd -f /dev/cd0 blank
burncd: device provided not an acd(4) device: /dev/cd0.

Please verify that your kernel is built with acd(4) and the beforementioned 
device is supported by acd(4).
Index: usr.sbin/burncd/burncd.c
===================================================================
--- usr.sbin/burncd/burncd.c    (revision 225704)
+++ usr.sbin/burncd/burncd.c    (working copy)
@@ -159,8 +159,16 @@
        if ((fd = open(dev, O_RDWR, 0)) < 0)
                err(EX_NOINPUT, "open(%s)", dev);
 
-       if (ioctl(fd, CDRIOCGETBLOCKSIZE, &saved_block_size) < 0)
-               err(EX_IOERR, "ioctl(CDRIOCGETBLOCKSIZE)");
+       if (ioctl(fd, CDRIOCGETBLOCKSIZE, &saved_block_size) < 0) {
+               if (errno == ENOTTY)
+                       errx(EX_IOERR,
+                           "device provided not an acd(4) device: %s.\n\n"
+                           "Please verify that your kernel is built with "
+                           "acd(4) and the beforementioned device is "
+                           "supported by acd(4).", dev);
+               else
+                       err(EX_IOERR, "ioctl(CDRIOCGETBLOCKSIZE)");
+       }
 
        if (ioctl(fd, CDRIOCWRITESPEED, &speed) < 0)
                err(EX_IOERR, "ioctl(CDRIOCWRITESPEED)");
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to