From: Lennart Poettering Date: Mon, 21 Jun 2021 08:55:36 +0000 (+0200) Subject: blockdev-util: add fd-based flavour of get_block_device() X-Git-Tag: v250-rc1~980^2~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0bfef8b46fbd5a79af3f94a61d688a01663d6983;p=thirdparty%2Fsystemd.git blockdev-util: add fd-based flavour of get_block_device() --- diff --git a/src/shared/blockdev-util.c b/src/shared/blockdev-util.c index 4d545dfa581..fa2d6d6add8 100644 --- a/src/shared/blockdev-util.c +++ b/src/shared/blockdev-util.c @@ -57,21 +57,16 @@ int block_get_whole_disk(dev_t d, dev_t *ret) { return 1; } -int get_block_device(const char *path, dev_t *ret) { - _cleanup_close_ int fd = -1; +int get_block_device_fd(int fd, dev_t *ret) { struct stat st; int r; - assert(path); + assert(fd >= 0); assert(ret); /* Gets the block device directly backing a file system. If the block device is encrypted, returns * the device mapper block device. */ - fd = open(path, O_RDONLY|O_NOFOLLOW|O_CLOEXEC); - if (fd < 0) - return -errno; - if (fstat(fd, &st)) return -errno; @@ -90,6 +85,19 @@ int get_block_device(const char *path, dev_t *ret) { return 0; } +int get_block_device(const char *path, dev_t *ret) { + _cleanup_close_ int fd = -1; + + assert(path); + assert(ret); + + fd = open(path, O_RDONLY|O_NOFOLLOW|O_CLOEXEC); + if (fd < 0) + return -errno; + + return get_block_device_fd(fd, ret); +} + int block_get_originating(dev_t dt, dev_t *ret) { _cleanup_closedir_ DIR *d = NULL; _cleanup_free_ char *t = NULL; diff --git a/src/shared/blockdev-util.h b/src/shared/blockdev-util.h index 56c50cecba1..90d9f136732 100644 --- a/src/shared/blockdev-util.h +++ b/src/shared/blockdev-util.h @@ -15,6 +15,7 @@ int block_get_whole_disk(dev_t d, dev_t *ret); int block_get_originating(dev_t d, dev_t *ret); +int get_block_device_fd(int fd, dev_t *ret); int get_block_device(const char *path, dev_t *dev); int get_block_device_harder(const char *path, dev_t *dev);