chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Export ID_WWN_VENDOR_EXTENSION and ID_WWN_WITH_EXTENSION
[elogind.git]
/
extras
/
ata_id
/
ata_id.c
diff --git
a/extras/ata_id/ata_id.c
b/extras/ata_id/ata_id.c
index 66b9f42332858d717e30fd3c1baead3f792231d5..25c771012710faa3fe0a5262b8013b8e55d3d1ba 100644
(file)
--- a/
extras/ata_id/ata_id.c
+++ b/
extras/ata_id/ata_id.c
@@
-1,4
+1,5
@@
-/*
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
* ata_id - reads product/serial number from ATA drives
*
* Copyright (C) 2005-2008 Kay Sievers <kay.sievers@vrfy.org>
* ata_id - reads product/serial number from ATA drives
*
* Copyright (C) 2005-2008 Kay Sievers <kay.sievers@vrfy.org>
@@
-38,6
+39,7
@@
#include <linux/types.h>
#include <linux/hdreg.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/hdreg.h>
#include <linux/fs.h>
+#include <linux/cdrom.h>
#include <arpa/inet.h>
#include "libudev.h"
#include <arpa/inet.h>
#include "libudev.h"
@@
-210,6
+212,16
@@
static int disk_identify (struct udev *udev,
goto fail;
}
goto fail;
}
+ /*
+ * do not confuse optical drive firmware with ATA commands
+ * some drives are reported to blank CD-RWs
+ */
+ if (ioctl(fd, CDROM_GET_CAPABILITY, NULL) >= 0) {
+ errno = EIO;
+ ret = -1;
+ goto fail;
+ }
+
/* So, it's a block device. Let's make sure the ioctls work */
if ((ret = ioctl(fd, BLKGETSIZE64, &size)) < 0)
goto fail;
/* So, it's a block device. Let's make sure the ioctls work */
if ((ret = ioctl(fd, BLKGETSIZE64, &size)) < 0)
goto fail;
@@
-509,6
+521,8
@@
int main(int argc, char *argv[])
wwwn <<= 16;
wwwn |= *((uint16_t *) identify + 111);
printf("ID_WWN=0x%llx\n", (unsigned long long int) wwwn);
wwwn <<= 16;
wwwn |= *((uint16_t *) identify + 111);
printf("ID_WWN=0x%llx\n", (unsigned long long int) wwwn);
+ /* ATA devices have no vendor extension */
+ printf("ID_WWN_WITH_EXTENSION=0x%llx\n", (unsigned long long int) wwwn);
}
} else {
if (serial[0] != '\0')
}
} else {
if (serial[0] != '\0')