diff --git a/inst_util.cc b/inst_util.cc
index b83e6a9..1e5218a 100644
--- a/inst_util.cc
+++ b/inst_util.cc
@@ -11,6 +11,7 @@
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <sys/wait.h>
@@ -301,7 +302,9 @@
   return false;
 }
 
-const std::string mmcblk_dev = "/dev/mmcblk";
+// This is an array of device names that are allowed in end in a digit, and
+// which use the 'p' notation to denote partitions.
+const char *numbered_devices[] = {"/dev/mmcblk", "/dev/loop"};
 
 string GetBlockDevFromPartitionDev(const string& partition_dev) {
   size_t i = partition_dev.length();
@@ -309,14 +312,21 @@
   while (i > 0 && isdigit(partition_dev[i-1]))
     i--;
 
-  // mmcblk devices are of the form "/dev/mmcblk12p34"
-  if (partition_dev.compare(0, mmcblk_dev.size(), mmcblk_dev) == 0) {
-    // If it ends with a p, strip off the p. If it doesn't there was
-    // no partition at the end (/dev/mmcblk12) return unmodified.
-    if (partition_dev[i-1] == 'p')
-      i--;
-    else
-      return partition_dev;
+  for (const char **nd = begin(numbered_devices);
+       nd != end(numbered_devices); nd++) {
+
+    size_t nd_len = strlen(*nd);
+    // numbered_devices are of the form "/dev/mmcblk12p34"
+    if (partition_dev.compare(0, nd_len, *nd) == 0) {
+      if ((i == nd_len) || (partition_dev[i-1] != 'p')) {
+        // If there was no partition at the end (/dev/mmcblk12) return
+        // unmodified.
+        return partition_dev;
+      } else {
+        // If it ends with a p, strip off the p.
+        i--;
+      }
+    }
   }
 
   return partition_dev.substr(0, i);
@@ -328,11 +338,15 @@
   while (i > 0 && isdigit(partition_dev[i-1]))
     i--;
 
-  // mmcblk devices are of the form "/dev/mmcblk12p34"
-  // If there is no ending p, There was no partition at the end (/dev/mmcblk12)
-  if ((partition_dev.compare(0, mmcblk_dev.size(), mmcblk_dev) == 0) &&
-      (partition_dev[i-1] != 'p')) {
-    return 0;
+  for (const char **nd = begin(numbered_devices);
+       nd != end(numbered_devices); nd++) {
+    size_t nd_len = strlen(*nd);
+    // numbered_devices are of the form "/dev/mmcblk12p34"
+    // If there is no ending p, there is no partition at the end (/dev/mmcblk12)
+    if ((partition_dev.compare(0, nd_len, *nd) == 0) &&
+        ((i == nd_len) || (partition_dev[i-1] != 'p'))) {
+      return 0;
+    }
   }
 
   string partition_str = partition_dev.substr(i, i+1);
@@ -346,8 +360,13 @@
 }
 
 string MakePartitionDev(const string& block_dev, int partition) {
-  if (block_dev.compare(0, mmcblk_dev.size(), mmcblk_dev) == 0)
-    return StringPrintf("%sp%d", block_dev.c_str(), partition);
+
+  for (const char **nd = begin(numbered_devices);
+       nd != end(numbered_devices); nd++) {
+    size_t nd_len = strlen(*nd);
+    if (block_dev.compare(0, nd_len, *nd) == 0)
+      return StringPrintf("%sp%d", block_dev.c_str(), partition);
+  }
 
   return StringPrintf("%s%d", block_dev.c_str(), partition);
 }
diff --git a/inst_util.h b/inst_util.h
index 876958b..18f689e 100644
--- a/inst_util.h
+++ b/inst_util.h
@@ -13,6 +13,18 @@
     if (RunCommand(_x) != 0) return false;                      \
   } while (0)
 
+// Find a pointer to the first element of a statically sized array.
+template<typename T, size_t N>
+T * begin(T (&ra)[N]) {
+    return ra + 0;
+}
+
+// Find a pointer to the element after the end of a statically sized array.
+template<typename T, size_t N>
+T * end(T (&ra)[N]) {
+    return ra + N;
+}
+
 // Start a timer (there can only be one active).
 void LoggingTimerStart();
 
diff --git a/inst_util_unittest.cc b/inst_util_unittest.cc
index a2b82fd..ea82a07 100644
--- a/inst_util_unittest.cc
+++ b/inst_util_unittest.cc
@@ -234,7 +234,8 @@
   EXPECT_EQ(GetBlockDevFromPartitionDev("/dev/mmcblk0p3"), "/dev/mmcblk0");
   EXPECT_EQ(GetBlockDevFromPartitionDev("/dev/mmcblk12p321"), "/dev/mmcblk12");
   EXPECT_EQ(GetBlockDevFromPartitionDev("/dev/mmcblk0"), "/dev/mmcblk0");
-  EXPECT_EQ(GetBlockDevFromPartitionDev(""), "");
+  EXPECT_EQ(GetBlockDevFromPartitionDev("/dev/loop0"), "/dev/loop0");
+  EXPECT_EQ(GetBlockDevFromPartitionDev("/dev/loop32p12"), "/dev/loop32");
 }
 
 TEST(UtilTest, GetPartitionDevTest) {
@@ -245,7 +246,8 @@
   EXPECT_EQ(GetPartitionFromPartitionDev("/dev/mmcblk12p321"), 321);
   EXPECT_EQ(GetPartitionFromPartitionDev("/dev/mmcblk1"), 0);
   EXPECT_EQ(GetPartitionFromPartitionDev("3"), 3);
-  EXPECT_EQ(GetPartitionFromPartitionDev(""), 0);
+  EXPECT_EQ(GetPartitionFromPartitionDev("/dev/loop1"), 0);
+  EXPECT_EQ(GetPartitionFromPartitionDev("/dev/loop1p12"), 12);
 }
 
 TEST(UtilTest, MakePartitionDevTest) {
@@ -253,6 +255,7 @@
   EXPECT_EQ(MakePartitionDev("/dev/sda", 321), "/dev/sda321");
   EXPECT_EQ(MakePartitionDev("/dev/mmcblk0", 3), "/dev/mmcblk0p3");
   EXPECT_EQ(MakePartitionDev("/dev/mmcblk12", 321), "/dev/mmcblk12p321");
+  EXPECT_EQ(MakePartitionDev("/dev/loop16", 321), "/dev/loop16p321");
   EXPECT_EQ(MakePartitionDev("", 0), "0");
 }
 
