diff options
author | Zhilong Liu <zlliu@suse.com> | 2017-05-05 11:09:41 +0800 |
---|---|---|
committer | Jes Sorensen <jsorensen@fb.com> | 2017-05-05 11:05:32 -0400 |
commit | 9e04ac1c43e63eccb68eb196174069e5c23d0270 (patch) | |
tree | 956239ee16ae6d6ad3e8a44703a4bb6b7cd57226 /util.c | |
parent | 0a6bff09d41650f27136d56a0604c9af46b6f583 (diff) | |
download | mdadm-9e04ac1c43e63eccb68eb196174069e5c23d0270.tar.gz |
mdadm/util: unify stat checking blkdev into function
declare function stat_is_blkdev() to integrate repeated stat
checking blkdev operations, it returns 'true/1' when it is a
block device, and returns 'false/0' when it isn't.
The devname is necessary parameter, *rdev is optional, parse
the pointer of dev_t *rdev, if valid, assigned device number
to dev_t *rdev, if NULL, ignores.
Signed-off-by: Zhilong Liu <zlliu@suse.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -747,6 +747,23 @@ int fstat_is_blkdev(int fd, char *devname, dev_t *rdev) return 1; } +int stat_is_blkdev(char *devname, dev_t *rdev) +{ + struct stat stb; + + if (stat(devname, &stb) != 0) { + pr_err("stat failed for %s: %s\n", devname, strerror(errno)); + return 0; + } + if ((S_IFMT & stb.st_mode) != S_IFBLK) { + pr_err("%s is not a block device.\n", devname); + return 0; + } + if (rdev) + *rdev = stb.st_rdev; + return 1; +} + int ask(char *mesg) { char *add = ""; |