summaryrefslogtreecommitdiff
path: root/hscript/disk.cc
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2019-10-20 03:34:46 -0500
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2019-10-20 03:35:03 -0500
commit1c9dc18c3512499cee97c9e2f5c60fb8cba540a4 (patch)
tree271dfa3ba5b52fca647ca4ad24b132a0dd612942 /hscript/disk.cc
parent76ee6ed55a653356f861c0a7c757938eed0578cc (diff)
downloadhorizon-1c9dc18c3512499cee97c9e2f5c60fb8cba540a4.tar.gz
horizon-1c9dc18c3512499cee97c9e2f5c60fb8cba540a4.tar.bz2
horizon-1c9dc18c3512499cee97c9e2f5c60fb8cba540a4.tar.xz
horizon-1c9dc18c3512499cee97c9e2f5c60fb8cba540a4.zip
hscript: DiskId: use devnum instead of syspath (thx @sroracle)
Diffstat (limited to 'hscript/disk.cc')
-rw-r--r--hscript/disk.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/hscript/disk.cc b/hscript/disk.cc
index 890ff34..137d3cf 100644
--- a/hscript/disk.cc
+++ b/hscript/disk.cc
@@ -15,6 +15,7 @@
#include <fstream>
#include <string>
#ifdef HAS_INSTALL_ENV
+# include <assert.h> /* assert */
# include <blkid/blkid.h> /* blkid_get_tag_value */
# include <libudev.h> /* udev_* */
# include <sys/mount.h> /* mount */
@@ -76,8 +77,15 @@ bool DiskId::execute(ScriptOptions options) const {
struct udev *udev;
struct udev_device *device;
const char *serial;
- /* XXX this is *horrible* */
- const char *syspath = ("/sys/block/" + _block.substr(5)).c_str();
+ struct stat blk_stat;
+ const char *block_c = _block.c_str();
+ if(stat(block_c, &blk_stat) != 0) {
+ output_error("installfile:" + std::to_string(line),
+ "diskid: error opening device " + _block,
+ strerror(errno));
+ return false;
+ }
+ assert(S_ISBLK(blk_stat.st_mode));
udev = udev_new();
if(!udev) {
@@ -86,7 +94,7 @@ bool DiskId::execute(ScriptOptions options) const {
"cannot read disk information");
return false;
}
- device = udev_device_new_from_syspath(udev, syspath);
+ device = udev_device_new_from_devnum(udev, 'b', blk_stat.st_rdev);
if(!device) {
udev_unref(udev);
output_error("installfile:" + std::to_string(line),