Fix compilation on MSVC
diff --git a/common/userpref.c b/common/userpref.c
index 9c2c563..08ab7e2 100644
--- a/common/userpref.c
+++ b/common/userpref.c
@@ -29,13 +29,18 @@
 #include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
+#include <errno.h>
+
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
+#include <dirent.h>
 #ifndef _WIN32
 #include <pwd.h>
-#endif
 #include <unistd.h>
+#include <libgen.h>
+#include <sys/stat.h>
+#endif
 #include <usbmuxd.h>
 #if defined(HAVE_OPENSSL)
 #include <openssl/bn.h>
@@ -64,11 +69,6 @@
 #error No supported TLS/SSL library enabled
 #endif
 
-#include <dirent.h>
-#include <libgen.h>
-#include <sys/stat.h>
-#include <errno.h>
-
 #ifdef _WIN32
 #include <shlobj.h>
 #endif
diff --git a/include/libimobiledevice/libimobiledevice.h b/include/libimobiledevice/libimobiledevice.h
index a9d270b..897aa37 100644
--- a/include/libimobiledevice/libimobiledevice.h
+++ b/include/libimobiledevice/libimobiledevice.h
@@ -31,10 +31,13 @@
 #endif
 
 #include <stdint.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 #include <plist/plist.h>
 
+#if defined(_MSC_VER)
+#include <basetsd.h>
+typedef SSIZE_T ssize_t;
+#endif
+
 #ifndef LIBIMOBILEDEVICE_API
   #ifdef LIBIMOBILEDEVICE_STATIC
     #define LIBIMOBILEDEVICE_API
diff --git a/src/afc.c b/src/afc.c
index d9b35b7..c0314bc 100644
--- a/src/afc.c
+++ b/src/afc.c
@@ -26,9 +26,12 @@
 #endif
 #include <stdio.h>
 #include <stdlib.h>
-#include <unistd.h>
 #include <string.h>
 
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+
 #include "idevice.h"
 #include "afc.h"
 #include "common/debug.h"
@@ -115,7 +118,7 @@
 
 afc_error_t afc_client_start_service(idevice_t device, afc_client_t * client, const char* label)
 {
-	afc_error_t err = AFC_E_UNKNOWN_ERROR;
+	int32_t err = AFC_E_UNKNOWN_ERROR;
 	service_client_factory_start_service(device, AFC_SERVICE_NAME, (void**)client, label, SERVICE_CONSTRUCTOR(afc_client_new), &err);
 	return err;
 }
diff --git a/src/house_arrest.c b/src/house_arrest.c
index caad731..06068c6 100644
--- a/src/house_arrest.c
+++ b/src/house_arrest.c
@@ -24,7 +24,11 @@
 #endif
 #include <string.h>
 #include <stdlib.h>
+
+#ifndef _MSC_VER
 #include <unistd.h>
+#endif
+
 #include <plist/plist.h>
 
 #include "house_arrest.h"
diff --git a/src/installation_proxy.c b/src/installation_proxy.c
index ec19da0..bb6ef01 100644
--- a/src/installation_proxy.c
+++ b/src/installation_proxy.c
@@ -26,7 +26,11 @@
 #include <string.h>
 #include <stdlib.h>
 #include <inttypes.h>
+
+#ifndef _MSC_VER
 #include <unistd.h>
+#endif
+
 #include <plist/plist.h>
 
 #include "installation_proxy.h"
@@ -251,7 +255,7 @@
 
 instproxy_error_t instproxy_client_start_service(idevice_t device, instproxy_client_t * client, const char* label)
 {
-	instproxy_error_t err = INSTPROXY_E_UNKNOWN_ERROR;
+	int32_t err = INSTPROXY_E_UNKNOWN_ERROR;
 	service_client_factory_start_service(device, INSTPROXY_SERVICE_NAME, (void**)client, label, SERVICE_CONSTRUCTOR(instproxy_client_new), &err);
 	return err;
 }
diff --git a/src/lockdown-cu.c b/src/lockdown-cu.c
index e0af5e2..9fbd2c8 100644
--- a/src/lockdown-cu.c
+++ b/src/lockdown-cu.c
@@ -29,7 +29,11 @@
 #define __USE_GNU 1
 #include <stdio.h>
 #include <ctype.h>
+
+#ifndef _MSC_VER
 #include <unistd.h>
+#endif
+
 #include <plist/plist.h>
 
 #include "idevice.h"
diff --git a/src/lockdown.c b/src/lockdown.c
index be55934..3679fee 100644
--- a/src/lockdown.c
+++ b/src/lockdown.c
@@ -32,7 +32,11 @@
 #define __USE_GNU 1
 #include <stdio.h>
 #include <ctype.h>
+
+#ifndef _MSC_VER
 #include <unistd.h>
+#endif
+
 #include <plist/plist.h>
 #include <libimobiledevice-glue/utils.h>
 
diff --git a/src/misagent.c b/src/misagent.c
index e3da997..3fdca4d 100644
--- a/src/misagent.c
+++ b/src/misagent.c
@@ -24,10 +24,14 @@
 #endif
 #include <string.h>
 #include <stdlib.h>
-#include <unistd.h>
-#include <plist/plist.h>
 #include <stdio.h>
 
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+
+#include <plist/plist.h>
+
 #include "misagent.h"
 #include "property_list_service.h"
 #include "common/debug.h"
diff --git a/src/mobile_image_mounter.c b/src/mobile_image_mounter.c
index 6df50c4..6677882 100644
--- a/src/mobile_image_mounter.c
+++ b/src/mobile_image_mounter.c
@@ -24,7 +24,11 @@
 #endif
 #include <string.h>
 #include <stdlib.h>
+
+#ifndef _MSC_VER
 #include <unistd.h>
+#endif
+
 #include <plist/plist.h>
 
 #include "mobile_image_mounter.h"
diff --git a/src/notification_proxy.c b/src/notification_proxy.c
index 9d983ba..c7e4660 100644
--- a/src/notification_proxy.c
+++ b/src/notification_proxy.c
@@ -24,7 +24,11 @@
 #endif
 #include <string.h>
 #include <stdlib.h>
+
+#ifndef _MSC_VER
 #include <unistd.h>
+#endif
+
 #include <plist/plist.h>
 
 #include "notification_proxy.h"
@@ -110,7 +114,7 @@
 
 np_error_t np_client_start_service(idevice_t device, np_client_t* client, const char* label)
 {
-	np_error_t err = NP_E_UNKNOWN_ERROR;
+	int32_t err = NP_E_UNKNOWN_ERROR;
 	service_client_factory_start_service(device, NP_SERVICE_NAME, (void**)client, label, SERVICE_CONSTRUCTOR(np_client_new), &err);
 	return err;
 }
diff --git a/src/sbservices.c b/src/sbservices.c
index 365e130..5df5122 100644
--- a/src/sbservices.c
+++ b/src/sbservices.c
@@ -24,7 +24,11 @@
 #endif
 #include <string.h>
 #include <stdlib.h>
+
+#ifndef _MSC_VER
 #include <unistd.h>
+#endif
+
 #include <plist/plist.h>
 
 #include "sbservices.h"