]> err.no Git - util-linux/commitdiff
lib: wholedisk - extend API, add test program
authorKarel Zak <kzak@redhat.com>
Thu, 12 Mar 2009 13:31:50 +0000 (14:31 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 12 Mar 2009 13:31:50 +0000 (14:31 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/wholedisk.h
lib/.gitignore
lib/Makefile.am
lib/wholedisk.c

index f367e4010f8bf7c25a7c8104ffe9fd9bdcc3444f..251479e765b40fa72e13b04a72d04d09818933c8 100644 (file)
@@ -2,6 +2,7 @@
 #define WHOLEDISK_H
 
 extern int is_whole_disk(const char *name);
+extern int is_whole_disk_fd(int fd, const char *name);
 
 #endif /* WHOLEDISK_H */
 
index 0be0fd86c92e786323b282932b144f16e1c4fdd0..145f5d746748da06ee35db1663a4603cb4b8b1af 100644 (file)
@@ -1,3 +1 @@
-test_blkdev
-test_ismounted
-test_pttype
+test_*
index f813f685596fccb88a7a88cd208f4484ac55af57..0b64806994273dd15cd7041c4e805aa6d7bf8214 100644 (file)
@@ -1,16 +1,15 @@
 include $(top_srcdir)/config/include-Makefile.am
 
-noinst_PROGRAMS = test_blkdev test_ismounted test_pttype
+AM_CPPFLAGS += -DTEST_PROGRAM
+
+noinst_PROGRAMS = test_blkdev test_ismounted test_pttype test_wholedisk
 
 test_blkdev_SOURCES = blkdev.c
 test_ismounted_SOURCES = ismounted.c
 test_pttype_SOURCES = pttype.c
+test_wholedisk_SOURCES = wholedisk.c
 
 if LINUX
 test_blkdev_SOURCES += linux_version.c
 endif
 
-test_blkdev_CFLAGS = -DTEST_PROGRAM
-test_ismounted_CFLAGS = -DTEST_PROGRAM
-test_pttype_CFLAGS = -DTEST_PROGRAM
-
index eb6d432cee7ee9d6c4dcef937bf87bfd94708460..35f143d28570963c2249bb71b79543f9b9eb4f07 100644 (file)
@@ -1,22 +1,21 @@
 
+#include <stdio.h>
+#include <stdlib.h>
 #include <ctype.h>
 
 #include "blkdev.h"
 #include "wholedisk.h"
 
-int is_whole_disk(const char *name)
+int is_whole_disk_fd(int fd, const char *name)
 {
 #ifdef HDIO_GETGEO
        struct hd_geometry geometry;
-       int fd, i = 0;
+       int i = 0;
 
-       fd = open(name, O_RDONLY);
-       if (fd >= 0) {
+       if (fd != -1)
                i = ioctl(fd, HDIO_GETGEO, &geometry);
-               close(fd);
-       }
-       if (i==0)
-               return (fd >= 0 && geometry.start == 0);
+       if (i == 0)
+               return geometry.start == 0;
 #endif
        /*
         * The "silly heuristic" is still sexy for us, because
@@ -29,3 +28,31 @@ int is_whole_disk(const char *name)
                name++;
        return !isdigit(name[-1]);
 }
+
+int is_whole_disk(const char *name)
+{
+       int fd = -1, res = 0;
+#ifdef HDIO_GETGEO
+       fd = open(name, O_RDONLY);
+       if (fd != -1)
+#endif
+               res = is_whole_disk_fd(fd, name);
+
+       if (fd != -1)
+               close(fd);
+       return res;
+}
+
+#ifdef TEST_PROGRAM
+int main(int argc, char **argv)
+{
+       if (argc < 2) {
+               fprintf(stderr, "usage: %s <device>\n", argv[0]);
+               exit(EXIT_FAILURE);
+       }
+
+       printf("%s: is%s whole disk\n", argv[1],
+                       is_whole_disk(argv[1]) ? "" : " NOT");
+       exit(EXIT_SUCCESS);
+}
+#endif