#define _GNU_SOURCE #include #include #include int main (int argc, char *argv[]) { device_t master_device_port; device_t device; int i; int err = 0; int errors = 0; if (argc < 2) { printf ("usage: %s device\n", argv[0]); return 1; } err = get_privileged_ports (NULL, &master_device_port); if (err) { printf ("(%d) ", err); perror ("getting master device port"); return 1; } for (i = 1; i < argc; i ++) { err = device_open (master_device_port, D_READ, argv[i], &device); if (err) { switch (err) { case D_INVALID_OPERATION: printf ("master_port is not master port\n"); break; case D_ALREADY_OPEN: printf ("%s: device already open\n", argv[i]); break; case D_NO_SUCH_DEVICE: printf ("%s: device unknown\n", argv[i]); break; case D_DEVICE_DOWN: printf ("%s: device has been shut down\n", argv[i]); break; default: printf ("%s: unknown error opening device (%d)\n", argv[i], err); } errors ++; continue; } { size_t sizes[DEV_GET_SIZE_COUNT]; size_t sizes_len = DEV_GET_SIZE_COUNT; err = device_get_status (device, DEV_GET_SIZE, sizes, &sizes_len); if (err) { printf ("(%d) error getting device size\n", err); errors ++; goto out; } else err = 0; printf ("%s:\n record size: %d bytes\n device size: %u megabytes\n", argv[i], sizes[DEV_GET_SIZE_RECORD_SIZE], sizes[DEV_GET_SIZE_DEVICE_SIZE] >> 20); } out: device_close (device); } return errors; }