diff options
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -950,6 +950,31 @@ int dev_open(char *dev, int flags) return fd; } +int dev_open_check(char *devname, int flags) +{ + int dfd; + struct stat stb; + + dfd = dev_open(devname, flags); + if (dfd < 0) { + fprintf(stderr, Name ": cannot open %s: %s.\n", + devname, strerror(errno)); + return -1; + } + if (fstat(dfd, &stb) < 0) { + fprintf(stderr, Name ": fstat failed on %s: %s.\n", + devname, strerror(errno)); + close(dfd); + return -1; + } + if ((stb.st_mode & S_IFMT) != S_IFBLK) { + fprintf(stderr, Name ": %s is not a block device.\n", devname); + close(dfd); + return -1; + } + return dfd; +} + int open_dev(int devnum) { char buf[20]; |