+static char loop_device[STRING_SIZE];
+
+static int setup_loop_device(const char* source, const char* device) {
+ int file_fd = open(source, O_RDWR);
+ if (file_fd < 0)
+ goto ERROR;
+
+ int device_fd = -1;
+ if ((device_fd = open(device, O_RDWR)) < 0)
+ goto ERROR;
+
+ if (ioctl(device_fd, LOOP_SET_FD, file_fd) < 0)
+ goto ERROR;
+
+ close(file_fd);
+ close(device_fd);
+
+ return 0;
+
+ERROR:
+ if (file_fd >= 0)
+ close(file_fd);
+
+ if (device_fd >= 0) {
+ ioctl(device_fd, LOOP_CLR_FD, 0);
+ close(device_fd);
+ }
+
+ return -1;
+}
+