libusb_get_device_list() can return negative error code
diff --git a/examples/lsusb.c b/examples/lsusb.c
index 193b23a..509e0bd 100644
--- a/examples/lsusb.c
+++ b/examples/lsusb.c
@@ -18,6 +18,7 @@
  */
 
 #include <stdio.h>
+#include <sys/types.h>
 
 #include <libusb/libusb.h>
 
@@ -39,7 +40,7 @@
 {
 	libusb_device **devs;
 	int r;
-	size_t cnt;
+	ssize_t cnt;
 
 	r = libusb_init();
 	if (r < 0)
diff --git a/libusb/core.c b/libusb/core.c
index d9340d6..f83305e 100644
--- a/libusb/core.c
+++ b/libusb/core.c
@@ -26,6 +26,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/types.h>
 
 #include "libusb.h"
 #include "libusbi.h"
@@ -429,13 +430,13 @@
  * \returns the number of devices in the outputted list, or LIBUSB_ERROR_NO_MEM
  * on memory allocation failure.
  */
-API_EXPORTED size_t libusb_get_device_list(libusb_device ***list)
+API_EXPORTED ssize_t libusb_get_device_list(libusb_device ***list)
 {
 	struct discovered_devs *discdevs = discovered_devs_alloc();
 	struct libusb_device **ret;
 	int r = 0;
 	size_t i;
-	size_t len;
+	ssize_t len;
 	usbi_dbg("");
 
 	if (!discdevs)
diff --git a/libusb/libusb.h b/libusb/libusb.h
index 3f04e91..07847bc 100644
--- a/libusb/libusb.h
+++ b/libusb/libusb.h
@@ -23,6 +23,7 @@
 
 #include <stdint.h>
 #include <sys/time.h>
+#include <sys/types.h>
 #include <time.h>
 
 #ifdef __cplusplus
@@ -659,7 +660,7 @@
 int libusb_init(void);
 void libusb_exit(void);
 
-size_t libusb_get_device_list(libusb_device ***list);
+ssize_t libusb_get_device_list(libusb_device ***list);
 void libusb_free_device_list(libusb_device **list, int unref_devices);
 const struct libusb_device_descriptor *libusb_get_device_descriptor(
 	libusb_device *dev);