#include "DBusMainLoopContext.h"
#include "DBusConnection.h"
+#ifdef WIN32
+#include <CommonAPI/pollStructures.h>
+#else
#include <poll.h>
+#endif
#include <chrono>
lockedContext->deregisterWatch(this);
}
-const pollfd& DBusWatch::getAssociatedFileDescriptor() {
+const COMMONAPI_POLLFD& DBusWatch::getAssociatedFileDescriptor() {
return pollFileDescriptor_;
}
#include <list>
#include <memory>
-#include <poll.h>
+#include <CommonAPI/MainLoopContext.h>
#include <dbus/dbus.h>
-#include <CommonAPI/MainLoopContext.h>
namespace CommonAPI {
void dispatch(unsigned int eventFlags);
- const pollfd& getAssociatedFileDescriptor();
+ const COMMONAPI_POLLFD& getAssociatedFileDescriptor();
const std::vector<DispatchSource*>& getDependentDispatchSources();
void addDependentDispatchSource(DispatchSource* dispatchSource);
bool isReady();
::DBusWatch* libdbusWatch_;
- pollfd pollFileDescriptor_;
+ COMMONAPI_POLLFD pollFileDescriptor_;
std::vector<DispatchSource*> dependentDispatchSources_;
std::weak_ptr<MainLoopContext> mainLoopContext_;
const MiddlewareInfo DBusRuntime::middlewareInfo_("DBus", &DBusRuntime::getInstance);
-__attribute__((constructor)) void registerDBusMiddleware(void) {
- Runtime::registerRuntimeLoader("DBus", &DBusRuntime::getInstance);
+#ifdef WIN32
+#pragma section(".CRT$XCU",read)
+void __cdecl registerDBusMiddleware(void);
+__declspec(allocate(".CRT$XCU")) void(__cdecl*registerDBusMiddleware_)(void) = registerDBusMiddleware;
+void __cdecl
+#else
+__attribute__((constructor)) void
+#endif
+ registerDBusMiddleware(void) {
+ Runtime::registerRuntimeLoader("DBus", &DBusRuntime::getInstance);
}
std::shared_ptr<Runtime> DBusRuntime::getInstance() {
return factory;
}
+} // namespace DBus
+} // namespace CommonAPI
extern "C" {
-CommonAPI::MiddlewareInfo middlewareInfo = CommonAPI::DBus::DBusRuntime::middlewareInfo_;
-
-}
+ CommonAPI::MiddlewareInfo middlewareInfo = CommonAPI::DBus::DBusRuntime::middlewareInfo_;
-} // namespace DBus
-} // namespace CommonAPI
+}
\ No newline at end of file
#include <string>
#include <sstream>
#include <vector>
-#include <unistd.h>
#include <future>
+#ifdef WIN32
+#define WIN32_LEAN_AND_MEAN // this prevents windows.h from including winsock.h, which causes duplicate definitions with winsock2.h
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
+
namespace CommonAPI {
namespace DBus {
inline std::string getCurrentBinaryFileFQN() {
- char fqnOfBinary[FILENAME_MAX];
- char pathToProcessImage[FILENAME_MAX];
+#ifdef WIN32
+ TCHAR result[MAX_PATH];
+ std::basic_string<TCHAR> resultString(result, GetModuleFileName(NULL, result, MAX_PATH));
+ return std::string(resultString.begin(), resultString.end());
+#else
+ char fqnOfBinary[FILENAME_MAX];
+ char pathToProcessImage[FILENAME_MAX];
- sprintf(pathToProcessImage, "/proc/%d/exe", getpid());
- const ssize_t lengthOfFqn = readlink(pathToProcessImage, fqnOfBinary, sizeof(fqnOfBinary) - 1);
+ sprintf(pathToProcessImage, "/proc/%d/exe", getpid());
+ const ssize_t lengthOfFqn = readlink(pathToProcessImage, fqnOfBinary, sizeof(fqnOfBinary)-1);
- if (lengthOfFqn != -1) {
- fqnOfBinary[lengthOfFqn] = '\0';
- return std::string(std::move(fqnOfBinary));
- } else {
- //TODO fail of readlink, i.e. it returns -1, sets errno. See http://linux.die.net/man/3/readlink
- return std::string("");
- }
+ if (lengthOfFqn != -1) {
+ fqnOfBinary[lengthOfFqn] = '\0';
+ return std::string(std::move(fqnOfBinary));
+ }
+ else {
+ return std::string("");
+ }
+#endif
}
template<typename _FutureWaitType>