]> git.proxmox.com Git - mirror_lxc.git/blobdiff - src/lxc/utils.c
Handle alternative loop device location on Android
[mirror_lxc.git] / src / lxc / utils.c
index 2f864e3a7c66b4a79b5837dda0ff85ae7edc8c18..22adf15a91c5a6d553a630f1f153ff16c790bbd3 100644 (file)
@@ -1485,8 +1485,16 @@ static int lxc_get_unused_loop_dev(char *name_loop)
                goto on_error;
 
        fd_tmp = open(name_loop, O_RDWR | O_CLOEXEC);
-       if (fd_tmp < 0)
-               SYSERROR("Failed to open loop \"%s\"", name_loop);
+       if (fd_tmp < 0) {
+               /* on Android loop devices are moved under /dev/block, give it a shot */
+               ret = snprintf(name_loop, LO_NAME_SIZE, "/dev/block/loop%d", loop_nr);
+                if (ret < 0 || ret >= LO_NAME_SIZE)
+                        goto on_error;
+
+               fd_tmp = open(name_loop, O_RDWR | O_CLOEXEC);
+               if (fd_tmp < 0)
+                       SYSERROR("Failed to open loop \"%s\"", name_loop);
+       }
 
 on_error:
        close(fd_ctl);
@@ -1807,7 +1815,6 @@ int lxc_setup_keyring(void)
                        break;
                default:
                        SYSERROR("Failed to create kernel keyring");
-                       ret = -1;
                        break;
                }
        }