Add loop control stub for testing new loop device interface.
authorMilan Broz <gmazyland@gmail.com>
Mon, 1 Aug 2011 10:40:45 +0000 (10:40 +0000)
committerMilan Broz <gmazyland@gmail.com>
Mon, 1 Aug 2011 10:40:45 +0000 (10:40 +0000)
git-svn-id: https://cryptsetup.googlecode.com/svn/trunk@587 36d66b0a-2a48-0410-832c-cd162a569da5

lib/utils_loop.c

index 65656bb..a1ed960 100644 (file)
 
 #include "utils_loop.h"
 
+#ifndef LOOP_CTL_GET_FREE
+#define LOOP_CTL_GET_FREE      0x4C82
+#endif
+
 char *crypt_loop_get_device(void)
 {
        char dev[20];
@@ -56,6 +60,34 @@ char *crypt_loop_get_device(void)
        return NULL;
 }
 
+/* loop-control not yet upstream */
+#if 0
+char *crypt_loop_get_device(void)
+{
+       char dev[64];
+       int i, loop_fd;
+       struct stat st;
+
+       loop_fd = open("/dev/loop-control", O_RDONLY);
+       if (loop_fd < 0)
+               return NULL;
+
+       i = ioctl(loop_fd, LOOP_CTL_GET_FREE);
+       if (i < 0) {
+               close(loop_fd);
+               return NULL;
+       }
+       close(loop_fd);
+
+       snprintf(dev, "/dev/loop%d", i, sizeof(dev));
+
+       if (stat(dev, &st) || !S_ISBLK(st.st_mode))
+               return NULL;
+
+       return strdup(dev);
+}
+#endif
+
 int crypt_loop_attach(const char *loop, const char *file, int offset,
                      int autoclear, int *readonly)
 {