diff --git a/System/USB/Internal.hs b/System/USB/Internal.hs
--- a/System/USB/Internal.hs
+++ b/System/USB/Internal.hs
@@ -231,11 +231,11 @@
 getDevices ∷ Ctx → IO [Device]
 getDevices ctx =
     alloca $ \devPtrArrayPtr → mask $ \restore → do
-      numDevs ← withCtxPtr ctx $ flip c'libusb_get_device_list devPtrArrayPtr
-      when (numDevs ≡ c'LIBUSB_ERROR_NO_MEM) $ throwIO NoMemException
+      numDevs ← checkUSBException $ withCtxPtr ctx $
+                  flip c'libusb_get_device_list devPtrArrayPtr
       devPtrArray ← peek devPtrArrayPtr
       let freeDevPtrArray = c'libusb_free_device_list devPtrArray 0
-      devs ← restore (mapPeekArray mkDev (fromIntegral numDevs) devPtrArray)
+      devs ← restore (mapPeekArray mkDev numDevs devPtrArray)
                `onException` freeDevPtrArray
       freeDevPtrArray
       return devs
@@ -1563,9 +1563,8 @@
 convertUSBException ∷ CInt → USBException
 convertUSBException err = fromMaybe unknownLibUsbError $
                             lookup err libusb_error_to_USBException
-
-unknownLibUsbError ∷ error
-unknownLibUsbError = error "Unknown Libusb error"
+    where
+      unknownLibUsbError = error $ "Unknown Libusb error code: " ++ show err ++ "!"
 
 -- | Association list mapping 'C'libusb_error's to 'USBException's.
 libusb_error_to_USBException ∷ [(CInt, USBException)]
diff --git a/usb.cabal b/usb.cabal
--- a/usb.cabal
+++ b/usb.cabal
@@ -1,5 +1,5 @@
 name:          usb
-version:       0.6.0.6
+version:       0.6.0.7
 cabal-version: >=1.6
 build-type:    Custom
 license:       BSD3
