diff --git a/channels/drdynvc/client/CMakeLists.txt b/channels/drdynvc/client/CMakeLists.txt index 69a86139b..42f8bf1d2 100644 --- a/channels/drdynvc/client/CMakeLists.txt +++ b/channels/drdynvc/client/CMakeLists.txt @@ -29,9 +29,9 @@ add_library(drdynvc ${DRDYNVC_SRCS}) set_target_properties(drdynvc PROPERTIES PREFIX "") if(WITH_MONOLITHIC_BUILD) - target_link_libraries(drdynvc freerdp) + target_link_libraries(drdynvc freerdp winpr) else() - target_link_libraries(drdynvc freerdp-utils) + target_link_libraries(drdynvc freerdp-utils winpr-synch) endif() install(TARGETS drdynvc DESTINATION ${FREERDP_PLUGIN_PATH}) diff --git a/channels/drdynvc/client/drdynvc_types.h b/channels/drdynvc/client/drdynvc_types.h index 1591f4766..5c9ce5947 100644 --- a/channels/drdynvc/client/drdynvc_types.h +++ b/channels/drdynvc/client/drdynvc_types.h @@ -27,7 +27,6 @@ #include #include #include -#include #ifdef WITH_DEBUG_DVC #define DEBUG_DVC(fmt, ...) DEBUG_CLASS(DVC, fmt, ## __VA_ARGS__) @@ -36,4 +35,3 @@ #endif #endif - diff --git a/channels/drdynvc/client/dvcman.c b/channels/drdynvc/client/dvcman.c index b23a50e70..1e55c028f 100644 --- a/channels/drdynvc/client/dvcman.c +++ b/channels/drdynvc/client/dvcman.c @@ -25,6 +25,8 @@ #include #include +#include + #include #include #include @@ -84,7 +86,7 @@ struct _DVCMAN_CHANNEL STREAM* dvc_data; - pthread_mutex_t dvc_chan_mutex; + HANDLE dvc_chan_mutex; }; static int dvcman_get_configuration(IWTSListener* pListener, void** ppPropertyBag) @@ -112,7 +114,9 @@ static int dvcman_create_listener(IWTSVirtualChannelManager* pChannelMgr, if (ppListener) *ppListener = (IWTSListener*)listener; + dvcman->listeners[dvcman->num_listeners++] = (IWTSListener*)listener; + return 0; } else @@ -124,12 +128,12 @@ static int dvcman_create_listener(IWTSVirtualChannelManager* pChannelMgr, static int dvcman_push_event(IWTSVirtualChannelManager* pChannelMgr, RDP_EVENT* pEvent) { - int error; + int status; DVCMAN* dvcman = (DVCMAN*) pChannelMgr; - error = drdynvc_push_event(dvcman->drdynvc, pEvent); + status = drdynvc_push_event(dvcman->drdynvc, pEvent); - if (error == 0) + if (status == 0) { DEBUG_DVC("event_type %d pushed.", pEvent->event_type); } @@ -138,7 +142,7 @@ static int dvcman_push_event(IWTSVirtualChannelManager* pChannelMgr, RDP_EVENT* DEBUG_WARN("event_type %d push failed.", pEvent->event_type); } - return error; + return status; } static int dvcman_register_plugin(IDRDYNVC_ENTRY_POINTS* pEntryPoints, const char* name, IWTSPlugin* pPlugin) @@ -202,7 +206,6 @@ IWTSVirtualChannel* dvcman_find_channel_by_id(IWTSVirtualChannelManager* pChanne return NULL; } - IWTSVirtualChannelManager* dvcman_new(drdynvcPlugin* plugin) { DVCMAN* dvcman; @@ -301,14 +304,14 @@ int dvcman_init(IWTSVirtualChannelManager* pChannelMgr) static int dvcman_write_channel(IWTSVirtualChannel* pChannel, uint32 cbSize, uint8* pBuffer, void* pReserved) { + int status; DVCMAN_CHANNEL* channel = (DVCMAN_CHANNEL*) pChannel; - int error; - pthread_mutex_lock(&channel->dvc_chan_mutex); - error = drdynvc_write_data(channel->dvcman->drdynvc, channel->channel_id, pBuffer, cbSize); - pthread_mutex_unlock(&channel->dvc_chan_mutex); + WaitForSingleObject(channel->dvc_chan_mutex, INFINITE); + status = drdynvc_write_data(channel->dvcman->drdynvc, channel->channel_id, pBuffer, cbSize); + ReleaseMutex(channel->dvc_chan_mutex); - return error; + return status; } static int dvcman_close_channel_iface(IWTSVirtualChannel* pChannel) @@ -346,7 +349,7 @@ int dvcman_create_channel(IWTSVirtualChannelManager* pChannelMgr, uint32 Channel channel->iface.Close = dvcman_close_channel_iface; channel->dvcman = dvcman; channel->channel_id = ChannelId; - pthread_mutex_init(&channel->dvc_chan_mutex, NULL); + channel->dvc_chan_mutex = CreateMutex(NULL, FALSE, NULL); bAccept = 1; pCallback = NULL; @@ -379,7 +382,7 @@ int dvcman_close_channel(IWTSVirtualChannelManager* pChannelMgr, uint32 ChannelI DVCMAN_CHANNEL* channel; IWTSVirtualChannel* ichannel; - channel = (DVCMAN_CHANNEL*)dvcman_find_channel_by_id(pChannelMgr, ChannelId); + channel = (DVCMAN_CHANNEL*) dvcman_find_channel_by_id(pChannelMgr, ChannelId); if (channel == NULL) { @@ -394,7 +397,7 @@ int dvcman_close_channel(IWTSVirtualChannelManager* pChannelMgr, uint32 ChannelI } DEBUG_DVC("dvcman_close_channel: channel %d closed", ChannelId); - ichannel = (IWTSVirtualChannel*)channel; + ichannel = (IWTSVirtualChannel*) channel; ichannel->Close(ichannel); return 0; @@ -404,7 +407,7 @@ int dvcman_receive_channel_data_first(IWTSVirtualChannelManager* pChannelMgr, ui { DVCMAN_CHANNEL* channel; - channel = (DVCMAN_CHANNEL*)dvcman_find_channel_by_id(pChannelMgr, ChannelId); + channel = (DVCMAN_CHANNEL*) dvcman_find_channel_by_id(pChannelMgr, ChannelId); if (channel == NULL) { @@ -425,7 +428,7 @@ int dvcman_receive_channel_data(IWTSVirtualChannelManager* pChannelMgr, uint32 C int error = 0; DVCMAN_CHANNEL* channel; - channel = (DVCMAN_CHANNEL*)dvcman_find_channel_by_id(pChannelMgr, ChannelId); + channel = (DVCMAN_CHANNEL*) dvcman_find_channel_by_id(pChannelMgr, ChannelId); if (channel == NULL) { diff --git a/include/freerdp/utils/msusb.h b/include/freerdp/utils/msusb.h index f2ef6beaa..7948d4ece 100644 --- a/include/freerdp/utils/msusb.h +++ b/include/freerdp/utils/msusb.h @@ -93,7 +93,6 @@ struct _MSUSB_PIPE_DESCRIPTOR int InitCompleted; } __attribute__((packed)); - struct _MSUSB_INTERFACE_DESCRIPTOR { uint16 Length; @@ -120,29 +119,19 @@ struct _MSUSB_CONFIG_DESCRIPTOR int MsOutSize; } __attribute__((packed)); - /* MSUSB_PIPE exported functions */ -void -msusb_mspipes_replace(MSUSB_INTERFACE_DESCRIPTOR * MsInterface, MSUSB_PIPE_DESCRIPTOR ** NewMsPipes, uint32 NewNumberOfPipes); +void msusb_mspipes_replace(MSUSB_INTERFACE_DESCRIPTOR* MsInterface, MSUSB_PIPE_DESCRIPTOR** NewMsPipes, uint32 NewNumberOfPipes); /* MSUSB_INTERFACE exported functions */ -void -msusb_msinterface_replace(MSUSB_CONFIG_DESCRIPTOR * MsConfig, uint8 InterfaceNumber, MSUSB_INTERFACE_DESCRIPTOR * NewMsInterface); -MSUSB_INTERFACE_DESCRIPTOR * -msusb_msinterface_read(uint8 * data, uint32 data_size, int * offset); -int -msusb_msinterface_write(MSUSB_INTERFACE_DESCRIPTOR * MsInterface, uint8 * data, int * offset); +void msusb_msinterface_replace(MSUSB_CONFIG_DESCRIPTOR* MsConfig, uint8 InterfaceNumber, MSUSB_INTERFACE_DESCRIPTOR* NewMsInterface); +MSUSB_INTERFACE_DESCRIPTOR* msusb_msinterface_read(uint8* data, uint32 data_size, int* offset); +int msusb_msinterface_write(MSUSB_INTERFACE_DESCRIPTOR* MsInterface, uint8* data, int* offset); /* MSUSB_CONFIG exported functions */ -MSUSB_CONFIG_DESCRIPTOR * -msusb_msconfig_new(); -void -msusb_msconfig_free(MSUSB_CONFIG_DESCRIPTOR * MsConfig); -MSUSB_CONFIG_DESCRIPTOR * -msusb_msconfig_read(uint8 * data, uint32 data_size, uint32 NumInterfaces); -int -msusb_msconfig_write(MSUSB_CONFIG_DESCRIPTOR * MsConfg, uint8 * data, int * offset); -void -msusb_msconfig_dump(MSUSB_CONFIG_DESCRIPTOR * MsConfg); +MSUSB_CONFIG_DESCRIPTOR* msusb_msconfig_new(); +void msusb_msconfig_free(MSUSB_CONFIG_DESCRIPTOR* MsConfig); +MSUSB_CONFIG_DESCRIPTOR* msusb_msconfig_read(uint8* data, uint32 data_size, uint32 NumInterfaces); +int msusb_msconfig_write(MSUSB_CONFIG_DESCRIPTOR* MsConfg, uint8* data, int * offset); +void msusb_msconfig_dump(MSUSB_CONFIG_DESCRIPTOR* MsConfg); #endif diff --git a/libfreerdp/utils/CMakeLists.txt b/libfreerdp/utils/CMakeLists.txt index 70ed640c0..f6138f099 100644 --- a/libfreerdp/utils/CMakeLists.txt +++ b/libfreerdp/utils/CMakeLists.txt @@ -29,7 +29,6 @@ set(${MODULE_PREFIX}_SRCS hexdump.c list.c file.c - msusb.c load_plugin.c memory.c passphrase.c @@ -49,6 +48,10 @@ set(${MODULE_PREFIX}_SRCS unicode.c wait_obj.c) +if(NOT WIN32) + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} msusb.c) +endif() + if(WITH_MONOLITHIC_BUILD) add_library(${MODULE_NAME} OBJECT ${${MODULE_PREFIX}_SRCS}) else() diff --git a/winpr/include/winpr/spec.h b/winpr/include/winpr/spec.h index 25355e5bc..6eb15491f 100644 --- a/winpr/include/winpr/spec.h +++ b/winpr/include/winpr/spec.h @@ -20,6 +20,12 @@ #ifndef WINPR_SPEC_H #define WINPR_SPEC_H +#ifdef _WIN32 + +#include + +#else + #if defined(__x86_64) && \ !(defined(_X86_) || defined(__i386__) || defined(_IA64_)) #if !defined(_AMD64_) @@ -49,5 +55,7 @@ #define DUMMYSTRUCTNAME s +#endif + #endif /* WINPR_SPEC_H */ diff --git a/winpr/include/winpr/synch.h b/winpr/include/winpr/synch.h index 3f1a0da30..5665c52c1 100644 --- a/winpr/include/winpr/synch.h +++ b/winpr/include/winpr/synch.h @@ -244,7 +244,5 @@ WINPR_API BOOL CancelWaitableTimer(HANDLE hTimer); #endif -WINPR_API void winpr_synch_dummy(); - #endif /* WINPR_SYNCH_H */ diff --git a/winpr/libwinpr/crt/CMakeLists.txt b/winpr/libwinpr/crt/CMakeLists.txt index 20074470b..a92a69137 100644 --- a/winpr/libwinpr/crt/CMakeLists.txt +++ b/winpr/libwinpr/crt/CMakeLists.txt @@ -23,6 +23,10 @@ set(${MODULE_PREFIX}_SRCS memory.c string.c) +if(MSVC) + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} module.def) +endif() + if(WITH_MONOLITHIC_BUILD) add_library(${MODULE_NAME} OBJECT ${${MODULE_PREFIX}_SRCS}) else() diff --git a/winpr/libwinpr/crt/module.def b/winpr/libwinpr/crt/module.def new file mode 100644 index 000000000..3c3c4ffb4 --- /dev/null +++ b/winpr/libwinpr/crt/module.def @@ -0,0 +1,2 @@ +LIBRARY "libwinpr-crt" +EXPORTS diff --git a/winpr/libwinpr/heap/CMakeLists.txt b/winpr/libwinpr/heap/CMakeLists.txt index a1790a12e..ce34c92b3 100644 --- a/winpr/libwinpr/heap/CMakeLists.txt +++ b/winpr/libwinpr/heap/CMakeLists.txt @@ -21,6 +21,10 @@ set(MODULE_PREFIX "WINPR_HEAP") set(${MODULE_PREFIX}_SRCS heap.c) +if(MSVC) + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} module.def) +endif() + if(WITH_MONOLITHIC_BUILD) add_library(${MODULE_NAME} OBJECT ${${MODULE_PREFIX}_SRCS}) else() diff --git a/winpr/libwinpr/heap/module.def b/winpr/libwinpr/heap/module.def new file mode 100644 index 000000000..7b6e836dd --- /dev/null +++ b/winpr/libwinpr/heap/module.def @@ -0,0 +1,2 @@ +LIBRARY "libwinpr-heap" +EXPORTS diff --git a/winpr/libwinpr/interlocked/CMakeLists.txt b/winpr/libwinpr/interlocked/CMakeLists.txt index 7aea061f1..b52b16432 100644 --- a/winpr/libwinpr/interlocked/CMakeLists.txt +++ b/winpr/libwinpr/interlocked/CMakeLists.txt @@ -21,6 +21,10 @@ set(MODULE_PREFIX "WINPR_INTERLOCKED") set(${MODULE_PREFIX}_SRCS interlocked.c) +if(MSVC) + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} module.def) +endif() + if(WITH_MONOLITHIC_BUILD) add_library(${MODULE_NAME} OBJECT ${${MODULE_PREFIX}_SRCS}) else() diff --git a/winpr/libwinpr/interlocked/module.def b/winpr/libwinpr/interlocked/module.def new file mode 100644 index 000000000..a73d92a6b --- /dev/null +++ b/winpr/libwinpr/interlocked/module.def @@ -0,0 +1,2 @@ +LIBRARY "libwinpr-interlocked" +EXPORTS diff --git a/winpr/libwinpr/synch/CMakeLists.txt b/winpr/libwinpr/synch/CMakeLists.txt index 5db40b18e..9ab399b3f 100644 --- a/winpr/libwinpr/synch/CMakeLists.txt +++ b/winpr/libwinpr/synch/CMakeLists.txt @@ -37,6 +37,10 @@ set(${MODULE_PREFIX}_SRCS timer.c wait.c) +if(MSVC) + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} module.def) +endif() + if(WITH_MONOLITHIC_BUILD) add_library(${MODULE_NAME} OBJECT ${${MODULE_PREFIX}_SRCS}) else() diff --git a/winpr/libwinpr/synch/module.def b/winpr/libwinpr/synch/module.def new file mode 100644 index 000000000..3fe907702 --- /dev/null +++ b/winpr/libwinpr/synch/module.def @@ -0,0 +1,2 @@ +LIBRARY "libwinpr-synch" +EXPORTS diff --git a/winpr/libwinpr/synch/synch.c b/winpr/libwinpr/synch/synch.c index d78c71f92..d27a73f85 100644 --- a/winpr/libwinpr/synch/synch.c +++ b/winpr/libwinpr/synch/synch.c @@ -23,7 +23,3 @@ #include -void winpr_synch_dummy() -{ - -}