summaryrefslogtreecommitdiffstats
path: root/libusbmuxd
diff options
context:
space:
mode:
Diffstat (limited to 'libusbmuxd')
-rw-r--r--libusbmuxd/CMakeLists.txt3
-rw-r--r--libusbmuxd/libusbmuxd.c24
2 files changed, 26 insertions, 1 deletions
diff --git a/libusbmuxd/CMakeLists.txt b/libusbmuxd/CMakeLists.txt
index a3d5fbe..737eb02 100644
--- a/libusbmuxd/CMakeLists.txt
+++ b/libusbmuxd/CMakeLists.txt
@@ -33,6 +33,9 @@ set_target_properties(libusbmuxd PROPERTIES SOVERSION ${LIBUSBMUXD_SOVERSION})
if(APPLE)
set_target_properties(libusbmuxd PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
endif()
+if(WIN32)
+ set_target_properties(libusbmuxd PROPERTIES PREFIX "lib" IMPORT_PREFIX "lib")
+endif()
install(TARGETS libusbmuxd
RUNTIME DESTINATION bin
diff --git a/libusbmuxd/libusbmuxd.c b/libusbmuxd/libusbmuxd.c
index 304e8da..e06ee61 100644
--- a/libusbmuxd/libusbmuxd.c
+++ b/libusbmuxd/libusbmuxd.c
@@ -30,9 +30,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include <windows.h>
#include <winsock2.h>
#define sleep(x) Sleep(x*1000)
+#define EPROTO 71
+#define EBADMSG 77
#else
#include <sys/socket.h>
#include <arpa/inet.h>
+#include <pthread.h>
#endif
#ifdef HAVE_INOTIFY
@@ -45,7 +48,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include <unistd.h>
#include <signal.h>
-#include <pthread.h>
#ifdef HAVE_PLIST
#include <plist/plist.h>
@@ -65,7 +67,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
static struct collection devices;
static usbmuxd_event_cb_t event_cb = NULL;
+#ifdef WIN32
+HANDLE devmon = NULL;
+#else
pthread_t devmon;
+#endif
static int listenfd = -1;
static int use_tag = 0;
@@ -605,7 +611,15 @@ int usbmuxd_subscribe(usbmuxd_event_cb_t callback, void *user_data)
}
event_cb = callback;
+#ifdef WIN32
+ res = 0;
+ devmon = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)device_monitor, user_data, 0, NULL);
+ if (devmon == NULL) {
+ res = GetLastError();
+ }
+#else
res = pthread_create(&devmon, NULL, device_monitor, user_data);
+#endif
if (res != 0) {
fprintf(stderr, "%s: ERROR: Could not start device watcher thread!\n", __func__);
return res;
@@ -617,12 +631,20 @@ int usbmuxd_unsubscribe()
{
event_cb = NULL;
+#ifdef WIN32
+ if (devmon != NULL) {
+ close_socket(listenfd);
+ listenfd = -1;
+ WaitForSingleObject(devmon, INFINITE);
+ }
+#else
if (pthread_kill(devmon, 0) == 0) {
close_socket(listenfd);
listenfd = -1;
pthread_kill(devmon, SIGINT);
pthread_join(devmon, NULL);
}
+#endif
return 0;
}