summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorZhilong Liu <zlliu@suse.com>2017-05-05 11:09:41 +0800
committerJes Sorensen <jsorensen@fb.com>2017-05-05 11:05:32 -0400
commit9e04ac1c43e63eccb68eb196174069e5c23d0270 (patch)
tree956239ee16ae6d6ad3e8a44703a4bb6b7cd57226 /util.c
parent0a6bff09d41650f27136d56a0604c9af46b6f583 (diff)
downloadmdadm-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.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/util.c b/util.c
index a92faf8..11ff2cc 100644
--- a/util.c
+++ b/util.c
@@ -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 = "";