summaryrefslogtreecommitdiffstats
path: root/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'util.c')
-rw-r--r--util.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/util.c b/util.c
index 5ae208c..dedb9db 100644
--- a/util.c
+++ b/util.c
@@ -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];