#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/disklabel.h>
#include <sys/sysctl.h>
#include <unistd.h>

static void diocturtest(const char *name);

int
main(void)
{
       static const char mib_name[] = "hw.disknames";
       size_t len;
       char *disknames;
       char *last;
       char *name;

       if (sysctlbyname(mib_name, NULL, &len, NULL, 0) == -1)
               err(1, "sysctlbyname");
       if ((disknames = malloc(len + 2)) == 0)
               err(1, "malloc");

       (void)sysctlbyname(mib_name, disknames, &len, NULL, 0);
       for ((name = strtok_r(disknames, " ", &last)); name;
           (name = strtok_r(NULL, " ", &last))) {
                   diocturtest(name);
           }
       free(disknames);
       return 1;
}

static void
diocturtest(const char *name)
{
       char dname[16];
       int fd;
       int error;
       int ready;

       sprintf(dname, "/dev/r%s%c", name, 'a'+RAW_PART);
       printf("%s:", dname);
       fd = open(dname, O_RDONLY, 0);
       if (fd == -1) {
               puts(" open failed");
               return;
       }
       error = ioctl(fd, DIOCTUR, &ready);
       printf(" ready %d error:%d\n", ready, error);
       close(fd);
       return;
}