diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2019-10-20 03:34:46 -0500 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2019-10-20 03:35:03 -0500 |
commit | 1c9dc18c3512499cee97c9e2f5c60fb8cba540a4 (patch) | |
tree | 271dfa3ba5b52fca647ca4ad24b132a0dd612942 /hscript | |
parent | 76ee6ed55a653356f861c0a7c757938eed0578cc (diff) | |
download | horizon-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')
-rw-r--r-- | hscript/disk.cc | 14 |
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), |