chore: use nullptr where possible in place of NULL
This commit is contained in:
parent
60dc4c0cd8
commit
63d65bb47b
140 changed files with 1116 additions and 1101 deletions
|
|
@ -26,7 +26,7 @@ int main(int argc, char **argv)
|
||||||
ArchMiscWindows::guardRuntimeVersion();
|
ArchMiscWindows::guardRuntimeVersion();
|
||||||
|
|
||||||
// record window instance for tray icon, etc
|
// record window instance for tray icon, etc
|
||||||
ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL));
|
ArchMiscWindows::setInstanceWin32(GetModuleHandle(nullptr));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Arch arch;
|
Arch arch;
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ int main(int argc, char **argv)
|
||||||
QCoreApplication m(argc, argv);
|
QCoreApplication m(argc, argv);
|
||||||
m.deleteLater();
|
m.deleteLater();
|
||||||
|
|
||||||
ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL));
|
ArchMiscWindows::setInstanceWin32(GetModuleHandle(nullptr));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Arch arch;
|
Arch arch;
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ int main(int argc, char *argv[])
|
||||||
"Please drag %1 to the Applications folder, "
|
"Please drag %1 to the Applications folder, "
|
||||||
"and open it from there."
|
"and open it from there."
|
||||||
);
|
);
|
||||||
QMessageBox::information(NULL, kAppName, msgBody.arg(kAppName));
|
QMessageBox::information(nullptr, kAppName, msgBody.arg(kAppName));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -159,7 +159,7 @@ bool checkMacAssistiveDevices()
|
||||||
|
|
||||||
const void *keys[] = {kAXTrustedCheckOptionPrompt};
|
const void *keys[] = {kAXTrustedCheckOptionPrompt};
|
||||||
const void *trueValue[] = {kCFBooleanTrue};
|
const void *trueValue[] = {kCFBooleanTrue};
|
||||||
CFDictionaryRef options = CFDictionaryCreate(NULL, keys, trueValue, 1, NULL, NULL);
|
CFDictionaryRef options = CFDictionaryCreate(nullptr, keys, trueValue, 1, nullptr, nullptr);
|
||||||
|
|
||||||
bool result = AXIsProcessTrustedWithOptions(options);
|
bool result = AXIsProcessTrustedWithOptions(options);
|
||||||
CFRelease(options);
|
CFRelease(options);
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ int main(int argc, char **argv)
|
||||||
ArchMiscWindows::guardRuntimeVersion();
|
ArchMiscWindows::guardRuntimeVersion();
|
||||||
|
|
||||||
// record window instance for tray icon, etc
|
// record window instance for tray icon, etc
|
||||||
ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL));
|
ArchMiscWindows::setInstanceWin32(GetModuleHandle(nullptr));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Arch arch;
|
Arch arch;
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,11 @@
|
||||||
// Arch
|
// Arch
|
||||||
//
|
//
|
||||||
|
|
||||||
Arch *Arch::s_instance = NULL;
|
Arch *Arch::s_instance = nullptr;
|
||||||
|
|
||||||
Arch::Arch()
|
Arch::Arch()
|
||||||
{
|
{
|
||||||
assert(s_instance == NULL);
|
assert(s_instance == nullptr);
|
||||||
s_instance = this;
|
s_instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -42,6 +42,6 @@ void Arch::init()
|
||||||
|
|
||||||
Arch *Arch::getInstance()
|
Arch *Arch::getInstance()
|
||||||
{
|
{
|
||||||
assert(s_instance != NULL);
|
assert(s_instance != nullptr);
|
||||||
return s_instance;
|
return s_instance;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public:
|
||||||
\c commandLine should \b not include the name of program as the
|
\c commandLine should \b not include the name of program as the
|
||||||
first argument. If \c allUsers is true then the daemon will be
|
first argument. If \c allUsers is true then the daemon will be
|
||||||
installed to start at boot time, otherwise it will be installed to
|
installed to start at boot time, otherwise it will be installed to
|
||||||
start when the current user logs in. If \p dependencies is not NULL
|
start when the current user logs in. If \p dependencies is not nullptr
|
||||||
then it's a concatenation of NUL terminated other daemon names
|
then it's a concatenation of NUL terminated other daemon names
|
||||||
followed by a NUL; the daemon will be configured to startup after
|
followed by a NUL; the daemon will be configured to startup after
|
||||||
the listed daemons. Throws an \c XArchDaemon exception on failure.
|
the listed daemons. Throws an \c XArchDaemon exception on failure.
|
||||||
|
|
|
||||||
|
|
@ -247,7 +247,7 @@ public:
|
||||||
//! Set the interrupt handler
|
//! Set the interrupt handler
|
||||||
/*!
|
/*!
|
||||||
Sets the function to call on receipt of an external interrupt.
|
Sets the function to call on receipt of an external interrupt.
|
||||||
By default and when \p func is NULL, the main thread is cancelled.
|
By default and when \p func is nullptr, the main thread is cancelled.
|
||||||
*/
|
*/
|
||||||
virtual void setSignalHandler(ESignal, SignalFunc func, void *userData) = 0;
|
virtual void setSignalHandler(ESignal, SignalFunc func, void *userData) = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -149,10 +149,10 @@ public:
|
||||||
/*!
|
/*!
|
||||||
Accepts a connection on socket \c s, returning a new socket for the
|
Accepts a connection on socket \c s, returning a new socket for the
|
||||||
connection and filling in \c addr with the address of the remote
|
connection and filling in \c addr with the address of the remote
|
||||||
end. \c addr may be NULL if the remote address isn't required.
|
end. \c addr may be nullptr if the remote address isn't required.
|
||||||
The original socket \c s is unaffected and remains in the listening
|
The original socket \c s is unaffected and remains in the listening
|
||||||
state. The new socket shares most of the properties of \c s except
|
state. The new socket shares most of the properties of \c s except
|
||||||
it's not in the listening state and it's connected. Returns NULL
|
it's not in the listening state and it's connected. Returns nullptr
|
||||||
if there are no pending connection requests.
|
if there are no pending connection requests.
|
||||||
*/
|
*/
|
||||||
virtual ArchSocket acceptSocket(ArchSocket s, ArchNetAddress *addr) = 0;
|
virtual ArchSocket acceptSocket(ArchSocket s, ArchNetAddress *addr) = 0;
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
static ArchMutex s_mutex = NULL;
|
static ArchMutex s_mutex = nullptr;
|
||||||
|
|
||||||
//
|
//
|
||||||
// use C library non-reentrant multibyte conversion with mutex
|
// use C library non-reentrant multibyte conversion with mutex
|
||||||
|
|
@ -21,9 +21,9 @@ static ArchMutex s_mutex = NULL;
|
||||||
|
|
||||||
IArchString::~IArchString()
|
IArchString::~IArchString()
|
||||||
{
|
{
|
||||||
if (s_mutex != NULL) {
|
if (s_mutex != nullptr) {
|
||||||
ARCH->closeMutex(s_mutex);
|
ARCH->closeMutex(s_mutex);
|
||||||
s_mutex = NULL;
|
s_mutex = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -32,18 +32,18 @@ int IArchString::convStringWCToMB(char *dst, const wchar_t *src, uint32_t n, boo
|
||||||
ptrdiff_t len = 0;
|
ptrdiff_t len = 0;
|
||||||
|
|
||||||
bool dummyErrors;
|
bool dummyErrors;
|
||||||
if (errors == NULL) {
|
if (errors == nullptr) {
|
||||||
errors = &dummyErrors;
|
errors = &dummyErrors;
|
||||||
}
|
}
|
||||||
*errors = false;
|
*errors = false;
|
||||||
|
|
||||||
if (s_mutex == NULL) {
|
if (s_mutex == nullptr) {
|
||||||
s_mutex = ARCH->newMutex();
|
s_mutex = ARCH->newMutex();
|
||||||
}
|
}
|
||||||
|
|
||||||
ARCH->lockMutex(s_mutex);
|
ARCH->lockMutex(s_mutex);
|
||||||
|
|
||||||
if (dst == NULL) {
|
if (dst == nullptr) {
|
||||||
char dummy[MB_LEN_MAX];
|
char dummy[MB_LEN_MAX];
|
||||||
const wchar_t *scan = src;
|
const wchar_t *scan = src;
|
||||||
for (; n > 0; --n) {
|
for (; n > 0; --n) {
|
||||||
|
|
@ -90,18 +90,18 @@ int IArchString::convStringMBToWC(wchar_t *dst, const char *src, uint32_t n, boo
|
||||||
wchar_t dummy;
|
wchar_t dummy;
|
||||||
|
|
||||||
bool dummyErrors;
|
bool dummyErrors;
|
||||||
if (errors == NULL) {
|
if (errors == nullptr) {
|
||||||
errors = &dummyErrors;
|
errors = &dummyErrors;
|
||||||
}
|
}
|
||||||
*errors = false;
|
*errors = false;
|
||||||
|
|
||||||
if (s_mutex == NULL) {
|
if (s_mutex == nullptr) {
|
||||||
s_mutex = ARCH->newMutex();
|
s_mutex = ARCH->newMutex();
|
||||||
}
|
}
|
||||||
|
|
||||||
ARCH->lockMutex(s_mutex);
|
ARCH->lockMutex(s_mutex);
|
||||||
|
|
||||||
if (dst == NULL) {
|
if (dst == nullptr) {
|
||||||
const char *scan = src;
|
const char *scan = src;
|
||||||
while (n > 0) {
|
while (n > 0) {
|
||||||
ptrdiff_t mblen = mbtowc(&dummy, scan, n);
|
ptrdiff_t mblen = mbtowc(&dummy, scan, n);
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ int execSelfNonDaemonized()
|
||||||
|
|
||||||
bool alreadyDaemonized()
|
bool alreadyDaemonized()
|
||||||
{
|
{
|
||||||
return getenv("_DESKFLOW_DAEMONIZED") != NULL;
|
return getenv("_DESKFLOW_DAEMONIZED") != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -70,13 +70,13 @@ public:
|
||||||
ArchThreadImpl::ArchThreadImpl()
|
ArchThreadImpl::ArchThreadImpl()
|
||||||
: m_refCount(1),
|
: m_refCount(1),
|
||||||
m_id(0),
|
m_id(0),
|
||||||
m_func(NULL),
|
m_func(nullptr),
|
||||||
m_userData(NULL),
|
m_userData(nullptr),
|
||||||
m_cancel(false),
|
m_cancel(false),
|
||||||
m_cancelling(false),
|
m_cancelling(false),
|
||||||
m_exited(false),
|
m_exited(false),
|
||||||
m_result(NULL),
|
m_result(nullptr),
|
||||||
m_networkData(NULL)
|
m_networkData(nullptr)
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
@ -85,18 +85,18 @@ ArchThreadImpl::ArchThreadImpl()
|
||||||
// ArchMultithreadPosix
|
// ArchMultithreadPosix
|
||||||
//
|
//
|
||||||
|
|
||||||
ArchMultithreadPosix *ArchMultithreadPosix::s_instance = NULL;
|
ArchMultithreadPosix *ArchMultithreadPosix::s_instance = nullptr;
|
||||||
|
|
||||||
ArchMultithreadPosix::ArchMultithreadPosix() : m_newThreadCalled(false), m_nextID(0)
|
ArchMultithreadPosix::ArchMultithreadPosix() : m_newThreadCalled(false), m_nextID(0)
|
||||||
{
|
{
|
||||||
assert(s_instance == NULL);
|
assert(s_instance == nullptr);
|
||||||
|
|
||||||
s_instance = this;
|
s_instance = this;
|
||||||
|
|
||||||
// no signal handlers
|
// no signal handlers
|
||||||
for (size_t i = 0; i < kNUM_SIGNALS; ++i) {
|
for (size_t i = 0; i < kNUM_SIGNALS; ++i) {
|
||||||
m_signalFunc[i] = NULL;
|
m_signalFunc[i] = nullptr;
|
||||||
m_signalUserData[i] = NULL;
|
m_signalUserData[i] = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// create mutex for thread list
|
// create mutex for thread list
|
||||||
|
|
@ -121,25 +121,25 @@ ArchMultithreadPosix::ArchMultithreadPosix() : m_newThreadCalled(false), m_nextI
|
||||||
act.sa_flags = 0;
|
act.sa_flags = 0;
|
||||||
#endif
|
#endif
|
||||||
act.sa_handler = &threadCancel;
|
act.sa_handler = &threadCancel;
|
||||||
sigaction(SIGWAKEUP, &act, NULL);
|
sigaction(SIGWAKEUP, &act, nullptr);
|
||||||
|
|
||||||
// set desired signal dispositions. let SIGWAKEUP through but
|
// set desired signal dispositions. let SIGWAKEUP through but
|
||||||
// ignore SIGPIPE (we'll handle EPIPE).
|
// ignore SIGPIPE (we'll handle EPIPE).
|
||||||
sigset_t sigset;
|
sigset_t sigset;
|
||||||
sigemptyset(&sigset);
|
sigemptyset(&sigset);
|
||||||
sigaddset(&sigset, SIGWAKEUP);
|
sigaddset(&sigset, SIGWAKEUP);
|
||||||
pthread_sigmask(SIG_UNBLOCK, &sigset, NULL);
|
pthread_sigmask(SIG_UNBLOCK, &sigset, nullptr);
|
||||||
sigemptyset(&sigset);
|
sigemptyset(&sigset);
|
||||||
sigaddset(&sigset, SIGPIPE);
|
sigaddset(&sigset, SIGPIPE);
|
||||||
pthread_sigmask(SIG_BLOCK, &sigset, NULL);
|
pthread_sigmask(SIG_BLOCK, &sigset, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
ArchMultithreadPosix::~ArchMultithreadPosix()
|
ArchMultithreadPosix::~ArchMultithreadPosix()
|
||||||
{
|
{
|
||||||
assert(s_instance != NULL);
|
assert(s_instance != nullptr);
|
||||||
|
|
||||||
closeMutex(m_threadMutex);
|
closeMutex(m_threadMutex);
|
||||||
s_instance = NULL;
|
s_instance = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMultithreadPosix::setNetworkDataForCurrentThread(void *data)
|
void ArchMultithreadPosix::setNetworkDataForCurrentThread(void *data)
|
||||||
|
|
@ -166,7 +166,7 @@ ArchMultithreadPosix *ArchMultithreadPosix::getInstance()
|
||||||
ArchCond ArchMultithreadPosix::newCondVar()
|
ArchCond ArchMultithreadPosix::newCondVar()
|
||||||
{
|
{
|
||||||
ArchCondImpl *cond = new ArchCondImpl;
|
ArchCondImpl *cond = new ArchCondImpl;
|
||||||
int status = pthread_cond_init(&cond->m_cond, NULL);
|
int status = pthread_cond_init(&cond->m_cond, nullptr);
|
||||||
(void)status;
|
(void)status;
|
||||||
assert(status == 0);
|
assert(status == 0);
|
||||||
return cond;
|
return cond;
|
||||||
|
|
@ -214,7 +214,7 @@ bool ArchMultithreadPosix::waitCondVar(ArchCond cond, ArchMutex mutex, double ti
|
||||||
|
|
||||||
// get final time
|
// get final time
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
gettimeofday(&now, NULL);
|
gettimeofday(&now, nullptr);
|
||||||
struct timespec finalTime;
|
struct timespec finalTime;
|
||||||
finalTime.tv_sec = now.tv_sec;
|
finalTime.tv_sec = now.tv_sec;
|
||||||
finalTime.tv_nsec = now.tv_usec * 1000;
|
finalTime.tv_nsec = now.tv_usec * 1000;
|
||||||
|
|
@ -312,7 +312,7 @@ void ArchMultithreadPosix::unlockMutex(ArchMutex mutex)
|
||||||
|
|
||||||
ArchThread ArchMultithreadPosix::newThread(ThreadFunc func, void *data)
|
ArchThread ArchMultithreadPosix::newThread(ThreadFunc func, void *data)
|
||||||
{
|
{
|
||||||
assert(func != NULL);
|
assert(func != nullptr);
|
||||||
|
|
||||||
// initialize signal handler. we do this here instead of the
|
// initialize signal handler. we do this here instead of the
|
||||||
// constructor so we can avoid daemonizing (using fork())
|
// constructor so we can avoid daemonizing (using fork())
|
||||||
|
|
@ -336,7 +336,7 @@ ArchThread ArchMultithreadPosix::newThread(ThreadFunc func, void *data)
|
||||||
thread->m_userData = data;
|
thread->m_userData = data;
|
||||||
|
|
||||||
// create the thread. pthread_create() on RedHat 7.2 smp fails
|
// create the thread. pthread_create() on RedHat 7.2 smp fails
|
||||||
// if passed a NULL attr so use a default attr.
|
// if passed a nullptr attr so use a default attr.
|
||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
int status = pthread_attr_init(&attr);
|
int status = pthread_attr_init(&attr);
|
||||||
if (status == 0) {
|
if (status == 0) {
|
||||||
|
|
@ -348,7 +348,7 @@ ArchThread ArchMultithreadPosix::newThread(ThreadFunc func, void *data)
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
// failed to start thread so clean up
|
// failed to start thread so clean up
|
||||||
delete thread;
|
delete thread;
|
||||||
thread = NULL;
|
thread = nullptr;
|
||||||
} else {
|
} else {
|
||||||
// add thread to list
|
// add thread to list
|
||||||
insert(thread);
|
insert(thread);
|
||||||
|
|
@ -368,18 +368,18 @@ ArchThread ArchMultithreadPosix::newCurrentThread()
|
||||||
lockMutex(m_threadMutex);
|
lockMutex(m_threadMutex);
|
||||||
ArchThreadImpl *thread = find(pthread_self());
|
ArchThreadImpl *thread = find(pthread_self());
|
||||||
unlockMutex(m_threadMutex);
|
unlockMutex(m_threadMutex);
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
return thread;
|
return thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMultithreadPosix::closeThread(ArchThread thread)
|
void ArchMultithreadPosix::closeThread(ArchThread thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
// decrement ref count and clean up thread if no more references
|
// decrement ref count and clean up thread if no more references
|
||||||
if (--thread->m_refCount == 0) {
|
if (--thread->m_refCount == 0) {
|
||||||
// detach from thread (unless it's the main thread)
|
// detach from thread (unless it's the main thread)
|
||||||
if (thread->m_func != NULL) {
|
if (thread->m_func != nullptr) {
|
||||||
pthread_detach(thread->m_thread);
|
pthread_detach(thread->m_thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -402,7 +402,7 @@ ArchThread ArchMultithreadPosix::copyThread(ArchThread thread)
|
||||||
|
|
||||||
void ArchMultithreadPosix::cancelThread(ArchThread thread)
|
void ArchMultithreadPosix::cancelThread(ArchThread thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
// set cancel and wakeup flags if thread can be cancelled
|
// set cancel and wakeup flags if thread can be cancelled
|
||||||
bool wakeup = false;
|
bool wakeup = false;
|
||||||
|
|
@ -421,7 +421,7 @@ void ArchMultithreadPosix::cancelThread(ArchThread thread)
|
||||||
|
|
||||||
void ArchMultithreadPosix::setPriorityOfThread(ArchThread thread, int /*n*/)
|
void ArchMultithreadPosix::setPriorityOfThread(ArchThread thread, int /*n*/)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
// FIXME
|
// FIXME
|
||||||
}
|
}
|
||||||
|
|
@ -439,7 +439,7 @@ void ArchMultithreadPosix::testCancelThread()
|
||||||
|
|
||||||
bool ArchMultithreadPosix::wait(ArchThread target, double timeout)
|
bool ArchMultithreadPosix::wait(ArchThread target, double timeout)
|
||||||
{
|
{
|
||||||
assert(target != NULL);
|
assert(target != nullptr);
|
||||||
|
|
||||||
lockMutex(m_threadMutex);
|
lockMutex(m_threadMutex);
|
||||||
|
|
||||||
|
|
@ -528,7 +528,7 @@ void ArchMultithreadPosix::setSignalHandler(ESignal signal, SignalFunc func, voi
|
||||||
void ArchMultithreadPosix::raiseSignal(ESignal signal)
|
void ArchMultithreadPosix::raiseSignal(ESignal signal)
|
||||||
{
|
{
|
||||||
lockMutex(m_threadMutex);
|
lockMutex(m_threadMutex);
|
||||||
if (m_signalFunc[signal] != NULL) {
|
if (m_signalFunc[signal] != nullptr) {
|
||||||
m_signalFunc[signal](signal, m_signalUserData[signal]);
|
m_signalFunc[signal](signal, m_signalUserData[signal]);
|
||||||
pthread_kill(m_mainThread->m_thread, SIGWAKEUP);
|
pthread_kill(m_mainThread->m_thread, SIGWAKEUP);
|
||||||
} else if (signal == kINTERRUPT || signal == kTERMINATE) {
|
} else if (signal == kINTERRUPT || signal == kTERMINATE) {
|
||||||
|
|
@ -552,20 +552,20 @@ void ArchMultithreadPosix::startSignalHandler()
|
||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
int status = pthread_attr_init(&attr);
|
int status = pthread_attr_init(&attr);
|
||||||
if (status == 0) {
|
if (status == 0) {
|
||||||
status = pthread_create(&m_signalThread, &attr, &ArchMultithreadPosix::threadSignalHandler, NULL);
|
status = pthread_create(&m_signalThread, &attr, &ArchMultithreadPosix::threadSignalHandler, nullptr);
|
||||||
pthread_attr_destroy(&attr);
|
pthread_attr_destroy(&attr);
|
||||||
}
|
}
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
// can't create thread to wait for signal so don't block
|
// can't create thread to wait for signal so don't block
|
||||||
// the signals.
|
// the signals.
|
||||||
pthread_sigmask(SIG_UNBLOCK, &oldsigset, NULL);
|
pthread_sigmask(SIG_UNBLOCK, &oldsigset, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ArchThreadImpl *ArchMultithreadPosix::find(pthread_t thread)
|
ArchThreadImpl *ArchMultithreadPosix::find(pthread_t thread)
|
||||||
{
|
{
|
||||||
ArchThreadImpl *impl = findNoRef(thread);
|
ArchThreadImpl *impl = findNoRef(thread);
|
||||||
if (impl != NULL) {
|
if (impl != nullptr) {
|
||||||
refThread(impl);
|
refThread(impl);
|
||||||
}
|
}
|
||||||
return impl;
|
return impl;
|
||||||
|
|
@ -579,15 +579,15 @@ ArchThreadImpl *ArchMultithreadPosix::findNoRef(pthread_t thread)
|
||||||
return *index;
|
return *index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMultithreadPosix::insert(ArchThreadImpl *thread)
|
void ArchMultithreadPosix::insert(ArchThreadImpl *thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
// thread shouldn't already be on the list
|
// thread shouldn't already be on the list
|
||||||
assert(findNoRef(thread->m_thread) == NULL);
|
assert(findNoRef(thread->m_thread) == nullptr);
|
||||||
|
|
||||||
// set thread id. note that we don't worry about m_nextID
|
// set thread id. note that we don't worry about m_nextID
|
||||||
// wrapping back to 0 and duplicating thread ID's since the
|
// wrapping back to 0 and duplicating thread ID's since the
|
||||||
|
|
@ -611,14 +611,14 @@ void ArchMultithreadPosix::erase(ArchThreadImpl *thread)
|
||||||
|
|
||||||
void ArchMultithreadPosix::refThread(ArchThreadImpl *thread)
|
void ArchMultithreadPosix::refThread(ArchThreadImpl *thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
assert(findNoRef(thread->m_thread) != NULL);
|
assert(findNoRef(thread->m_thread) != nullptr);
|
||||||
++thread->m_refCount;
|
++thread->m_refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMultithreadPosix::testCancelThreadImpl(ArchThreadImpl *thread)
|
void ArchMultithreadPosix::testCancelThreadImpl(ArchThreadImpl *thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
// update cancel state
|
// update cancel state
|
||||||
lockMutex(m_threadMutex);
|
lockMutex(m_threadMutex);
|
||||||
|
|
@ -642,14 +642,14 @@ void *ArchMultithreadPosix::threadFunc(void *vrep)
|
||||||
ArchThreadImpl *thread = static_cast<ArchThreadImpl *>(vrep);
|
ArchThreadImpl *thread = static_cast<ArchThreadImpl *>(vrep);
|
||||||
|
|
||||||
// setup pthreads
|
// setup pthreads
|
||||||
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, nullptr);
|
||||||
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
|
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, nullptr);
|
||||||
|
|
||||||
// run thread
|
// run thread
|
||||||
s_instance->doThreadFunc(thread);
|
s_instance->doThreadFunc(thread);
|
||||||
|
|
||||||
// terminate the thread
|
// terminate the thread
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMultithreadPosix::doThreadFunc(ArchThread thread)
|
void ArchMultithreadPosix::doThreadFunc(ArchThread thread)
|
||||||
|
|
@ -748,5 +748,5 @@ void *ArchMultithreadPosix::threadSignalHandler(void *)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@ ArchSocket ArchNetworkBSD::newSocket(EAddressFamily family, ESocketType type)
|
||||||
|
|
||||||
ArchSocket ArchNetworkBSD::copySocket(ArchSocket s)
|
ArchSocket ArchNetworkBSD::copySocket(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// ref the socket and return it
|
// ref the socket and return it
|
||||||
ARCH->lockMutex(m_mutex);
|
ARCH->lockMutex(m_mutex);
|
||||||
|
|
@ -142,7 +142,7 @@ ArchSocket ArchNetworkBSD::copySocket(ArchSocket s)
|
||||||
|
|
||||||
void ArchNetworkBSD::closeSocket(ArchSocket s)
|
void ArchNetworkBSD::closeSocket(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// unref the socket and note if it should be released
|
// unref the socket and note if it should be released
|
||||||
ARCH->lockMutex(m_mutex);
|
ARCH->lockMutex(m_mutex);
|
||||||
|
|
@ -165,7 +165,7 @@ void ArchNetworkBSD::closeSocket(ArchSocket s)
|
||||||
|
|
||||||
void ArchNetworkBSD::closeSocketForRead(ArchSocket s)
|
void ArchNetworkBSD::closeSocketForRead(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
if (shutdown(s->m_fd, 0) == -1) {
|
if (shutdown(s->m_fd, 0) == -1) {
|
||||||
if (errno != ENOTCONN) {
|
if (errno != ENOTCONN) {
|
||||||
|
|
@ -176,7 +176,7 @@ void ArchNetworkBSD::closeSocketForRead(ArchSocket s)
|
||||||
|
|
||||||
void ArchNetworkBSD::closeSocketForWrite(ArchSocket s)
|
void ArchNetworkBSD::closeSocketForWrite(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
if (shutdown(s->m_fd, 1) == -1) {
|
if (shutdown(s->m_fd, 1) == -1) {
|
||||||
if (errno != ENOTCONN) {
|
if (errno != ENOTCONN) {
|
||||||
|
|
@ -187,8 +187,8 @@ void ArchNetworkBSD::closeSocketForWrite(ArchSocket s)
|
||||||
|
|
||||||
void ArchNetworkBSD::bindSocket(ArchSocket s, ArchNetAddress addr)
|
void ArchNetworkBSD::bindSocket(ArchSocket s, ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
if (bind(s->m_fd, TYPED_ADDR(struct sockaddr, addr), addr->m_len) == -1) {
|
if (bind(s->m_fd, TYPED_ADDR(struct sockaddr, addr), addr->m_len) == -1) {
|
||||||
throwError(errno);
|
throwError(errno);
|
||||||
|
|
@ -197,7 +197,7 @@ void ArchNetworkBSD::bindSocket(ArchSocket s, ArchNetAddress addr)
|
||||||
|
|
||||||
void ArchNetworkBSD::listenOnSocket(ArchSocket s)
|
void ArchNetworkBSD::listenOnSocket(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// hardcoding backlog
|
// hardcoding backlog
|
||||||
if (listen(s->m_fd, 3) == -1) {
|
if (listen(s->m_fd, 3) == -1) {
|
||||||
|
|
@ -207,9 +207,9 @@ void ArchNetworkBSD::listenOnSocket(ArchSocket s)
|
||||||
|
|
||||||
ArchSocket ArchNetworkBSD::acceptSocket(ArchSocket s, ArchNetAddress *addr)
|
ArchSocket ArchNetworkBSD::acceptSocket(ArchSocket s, ArchNetAddress *addr)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// if user passed NULL in addr then use scratch space
|
// if user passed nullptr in addr then use scratch space
|
||||||
ArchNetAddress dummy;
|
ArchNetAddress dummy;
|
||||||
if (addr == nullptr) {
|
if (addr == nullptr) {
|
||||||
addr = &dummy;
|
addr = &dummy;
|
||||||
|
|
@ -258,8 +258,8 @@ ArchSocket ArchNetworkBSD::acceptSocket(ArchSocket s, ArchNetAddress *addr)
|
||||||
|
|
||||||
bool ArchNetworkBSD::connectSocket(ArchSocket s, ArchNetAddress addr)
|
bool ArchNetworkBSD::connectSocket(ArchSocket s, ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
if (connect(s->m_fd, TYPED_ADDR(struct sockaddr, addr), addr->m_len) == -1) {
|
if (connect(s->m_fd, TYPED_ADDR(struct sockaddr, addr), addr->m_len) == -1) {
|
||||||
if (errno == EISCONN) {
|
if (errno == EISCONN) {
|
||||||
|
|
@ -372,7 +372,7 @@ void ArchNetworkBSD::unblockPollSocket(ArchThread thread)
|
||||||
|
|
||||||
size_t ArchNetworkBSD::readSocket(ArchSocket s, void *buf, size_t len)
|
size_t ArchNetworkBSD::readSocket(ArchSocket s, void *buf, size_t len)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
ssize_t n = read(s->m_fd, buf, len);
|
ssize_t n = read(s->m_fd, buf, len);
|
||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
|
|
@ -386,7 +386,7 @@ size_t ArchNetworkBSD::readSocket(ArchSocket s, void *buf, size_t len)
|
||||||
|
|
||||||
size_t ArchNetworkBSD::writeSocket(ArchSocket s, const void *buf, size_t len)
|
size_t ArchNetworkBSD::writeSocket(ArchSocket s, const void *buf, size_t len)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
ssize_t n = write(s->m_fd, buf, len);
|
ssize_t n = write(s->m_fd, buf, len);
|
||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
|
|
@ -400,7 +400,7 @@ size_t ArchNetworkBSD::writeSocket(ArchSocket s, const void *buf, size_t len)
|
||||||
|
|
||||||
void ArchNetworkBSD::throwErrorOnSocket(ArchSocket s)
|
void ArchNetworkBSD::throwErrorOnSocket(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// get the error from the socket layer
|
// get the error from the socket layer
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
@ -435,7 +435,7 @@ void ArchNetworkBSD::setBlockingOnSocket(int fd, bool blocking)
|
||||||
|
|
||||||
bool ArchNetworkBSD::setNoDelayOnSocket(ArchSocket s, bool noDelay)
|
bool ArchNetworkBSD::setNoDelayOnSocket(ArchSocket s, bool noDelay)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// get old state
|
// get old state
|
||||||
int oflag;
|
int oflag;
|
||||||
|
|
@ -455,7 +455,7 @@ bool ArchNetworkBSD::setNoDelayOnSocket(ArchSocket s, bool noDelay)
|
||||||
|
|
||||||
bool ArchNetworkBSD::setReuseAddrOnSocket(ArchSocket s, bool reuse)
|
bool ArchNetworkBSD::setReuseAddrOnSocket(ArchSocket s, bool reuse)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// get old state
|
// get old state
|
||||||
int oflag;
|
int oflag;
|
||||||
|
|
@ -518,7 +518,7 @@ ArchNetAddress ArchNetworkBSD::newAnyAddr(EAddressFamily family)
|
||||||
|
|
||||||
ArchNetAddress ArchNetworkBSD::copyAddr(ArchNetAddress addr)
|
ArchNetAddress ArchNetworkBSD::copyAddr(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
// allocate and copy address
|
// allocate and copy address
|
||||||
return new ArchNetAddressImpl(*addr);
|
return new ArchNetAddressImpl(*addr);
|
||||||
|
|
@ -572,14 +572,14 @@ std::vector<ArchNetAddress> ArchNetworkBSD::nameToAddr(const std::string &name)
|
||||||
|
|
||||||
void ArchNetworkBSD::closeAddr(ArchNetAddress addr)
|
void ArchNetworkBSD::closeAddr(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
delete addr;
|
delete addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ArchNetworkBSD::addrToName(ArchNetAddress addr)
|
std::string ArchNetworkBSD::addrToName(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
// mutexed name lookup (ugh)
|
// mutexed name lookup (ugh)
|
||||||
ARCH->lockMutex(m_mutex);
|
ARCH->lockMutex(m_mutex);
|
||||||
|
|
@ -603,7 +603,7 @@ std::string ArchNetworkBSD::addrToName(ArchNetAddress addr)
|
||||||
|
|
||||||
std::string ArchNetworkBSD::addrToString(ArchNetAddress addr)
|
std::string ArchNetworkBSD::addrToString(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case kINET: {
|
||||||
|
|
@ -631,7 +631,7 @@ std::string ArchNetworkBSD::addrToString(ArchNetAddress addr)
|
||||||
|
|
||||||
IArchNetwork::EAddressFamily ArchNetworkBSD::getAddrFamily(ArchNetAddress addr)
|
IArchNetwork::EAddressFamily ArchNetworkBSD::getAddrFamily(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (addr->m_addr.ss_family) {
|
switch (addr->m_addr.ss_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
|
|
@ -646,7 +646,7 @@ IArchNetwork::EAddressFamily ArchNetworkBSD::getAddrFamily(ArchNetAddress addr)
|
||||||
|
|
||||||
void ArchNetworkBSD::setAddrPort(ArchNetAddress addr, int port)
|
void ArchNetworkBSD::setAddrPort(ArchNetAddress addr, int port)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case kINET: {
|
||||||
|
|
@ -669,7 +669,7 @@ void ArchNetworkBSD::setAddrPort(ArchNetAddress addr, int port)
|
||||||
|
|
||||||
int ArchNetworkBSD::getAddrPort(ArchNetAddress addr)
|
int ArchNetworkBSD::getAddrPort(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case kINET: {
|
||||||
|
|
@ -690,7 +690,7 @@ int ArchNetworkBSD::getAddrPort(ArchNetAddress addr)
|
||||||
|
|
||||||
bool ArchNetworkBSD::isAnyAddr(ArchNetAddress addr)
|
bool ArchNetworkBSD::isAnyAddr(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case kINET: {
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ void ArchSleepUnix::sleep(double timeout)
|
||||||
timeout2.tv_sec = static_cast<int>(timeLeft);
|
timeout2.tv_sec = static_cast<int>(timeLeft);
|
||||||
timeout2.tv_usec = static_cast<int>(1.0e+6 * (timeLeft - timeout2.tv_sec));
|
timeout2.tv_usec = static_cast<int>(1.0e+6 * (timeLeft - timeout2.tv_sec));
|
||||||
select(
|
select(
|
||||||
(SELECT_TYPE_ARG1)0, SELECT_TYPE_ARG234 NULL, SELECT_TYPE_ARG234 NULL, SELECT_TYPE_ARG234 NULL,
|
(SELECT_TYPE_ARG1)0, SELECT_TYPE_ARG234 nullptr, SELECT_TYPE_ARG234 nullptr, SELECT_TYPE_ARG234 nullptr,
|
||||||
SELECT_TYPE_ARG5 & timeout2
|
SELECT_TYPE_ARG5 & timeout2
|
||||||
);
|
);
|
||||||
ARCH->testCancelThread();
|
ARCH->testCancelThread();
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,6 @@ ArchTimeUnix::~ArchTimeUnix()
|
||||||
double ArchTimeUnix::time()
|
double ArchTimeUnix::time()
|
||||||
{
|
{
|
||||||
struct timeval t;
|
struct timeval t;
|
||||||
gettimeofday(&t, NULL);
|
gettimeofday(&t, nullptr);
|
||||||
return (double)t.tv_sec + 1.0e-6 * (double)t.tv_usec;
|
return (double)t.tv_sec + 1.0e-6 * (double)t.tv_usec;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
// ArchDaemonWindows
|
// ArchDaemonWindows
|
||||||
//
|
//
|
||||||
|
|
||||||
ArchDaemonWindows *ArchDaemonWindows::s_daemon = NULL;
|
ArchDaemonWindows *ArchDaemonWindows::s_daemon = nullptr;
|
||||||
|
|
||||||
ArchDaemonWindows::ArchDaemonWindows() : m_daemonThreadID(0)
|
ArchDaemonWindows::ArchDaemonWindows() : m_daemonThreadID(0)
|
||||||
{
|
{
|
||||||
|
|
@ -30,20 +30,20 @@ ArchDaemonWindows::~ArchDaemonWindows()
|
||||||
|
|
||||||
int ArchDaemonWindows::runDaemon(RunFunc runFunc)
|
int ArchDaemonWindows::runDaemon(RunFunc runFunc)
|
||||||
{
|
{
|
||||||
assert(s_daemon != NULL);
|
assert(s_daemon != nullptr);
|
||||||
return s_daemon->doRunDaemon(runFunc);
|
return s_daemon->doRunDaemon(runFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchDaemonWindows::daemonRunning(bool running)
|
void ArchDaemonWindows::daemonRunning(bool running)
|
||||||
{
|
{
|
||||||
if (s_daemon != NULL) {
|
if (s_daemon != nullptr) {
|
||||||
s_daemon->doDaemonRunning(running);
|
s_daemon->doDaemonRunning(running);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT ArchDaemonWindows::getDaemonQuitMessage()
|
UINT ArchDaemonWindows::getDaemonQuitMessage()
|
||||||
{
|
{
|
||||||
if (s_daemon != NULL) {
|
if (s_daemon != nullptr) {
|
||||||
return s_daemon->doGetDaemonQuitMessage();
|
return s_daemon->doGetDaemonQuitMessage();
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -52,7 +52,7 @@ UINT ArchDaemonWindows::getDaemonQuitMessage()
|
||||||
|
|
||||||
void ArchDaemonWindows::daemonFailed(int result)
|
void ArchDaemonWindows::daemonFailed(int result)
|
||||||
{
|
{
|
||||||
assert(s_daemon != NULL);
|
assert(s_daemon != nullptr);
|
||||||
throw XArchDaemonRunFailed(result);
|
throw XArchDaemonRunFailed(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,8 +63,8 @@ void ArchDaemonWindows::installDaemon(
|
||||||
LOG_DEBUG("installing windows service: %s", name);
|
LOG_DEBUG("installing windows service: %s", name);
|
||||||
|
|
||||||
// open service manager
|
// open service manager
|
||||||
SC_HANDLE mgr = OpenSCManager(NULL, NULL, GENERIC_WRITE);
|
SC_HANDLE mgr = OpenSCManager(nullptr, nullptr, GENERIC_WRITE);
|
||||||
if (mgr == NULL) {
|
if (mgr == nullptr) {
|
||||||
// can't open service manager
|
// can't open service manager
|
||||||
throw XArchDaemonInstallFailed(new XArchEvalWindows);
|
throw XArchDaemonInstallFailed(new XArchEvalWindows);
|
||||||
}
|
}
|
||||||
|
|
@ -72,10 +72,10 @@ void ArchDaemonWindows::installDaemon(
|
||||||
// create the service
|
// create the service
|
||||||
SC_HANDLE service = CreateService(
|
SC_HANDLE service = CreateService(
|
||||||
mgr, name, name, 0, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START,
|
mgr, name, name, 0, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START,
|
||||||
SERVICE_ERROR_NORMAL, pathname, NULL, NULL, dependencies, NULL, NULL
|
SERVICE_ERROR_NORMAL, pathname, nullptr, nullptr, dependencies, nullptr, nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
if (service == NULL) {
|
if (service == nullptr) {
|
||||||
// can't create service
|
// can't create service
|
||||||
DWORD err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
if (err != ERROR_SERVICE_EXISTS) {
|
if (err != ERROR_SERVICE_EXISTS) {
|
||||||
|
|
@ -93,7 +93,7 @@ void ArchDaemonWindows::installDaemon(
|
||||||
// open the registry key for this service
|
// open the registry key for this service
|
||||||
HKEY key = openNTServicesKey();
|
HKEY key = openNTServicesKey();
|
||||||
key = ArchMiscWindows::addKey(key, name);
|
key = ArchMiscWindows::addKey(key, name);
|
||||||
if (key == NULL) {
|
if (key == nullptr) {
|
||||||
// can't open key
|
// can't open key
|
||||||
DWORD err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
try {
|
try {
|
||||||
|
|
@ -109,7 +109,7 @@ void ArchDaemonWindows::installDaemon(
|
||||||
|
|
||||||
// set command line
|
// set command line
|
||||||
key = ArchMiscWindows::addKey(key, _T("Parameters"));
|
key = ArchMiscWindows::addKey(key, _T("Parameters"));
|
||||||
if (key == NULL) {
|
if (key == nullptr) {
|
||||||
// can't open key
|
// can't open key
|
||||||
DWORD err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
ArchMiscWindows::closeKey(key);
|
ArchMiscWindows::closeKey(key);
|
||||||
|
|
@ -133,21 +133,21 @@ void ArchDaemonWindows::uninstallDaemon(const char *name)
|
||||||
// remove parameters for this service. ignore failures.
|
// remove parameters for this service. ignore failures.
|
||||||
HKEY key = openNTServicesKey();
|
HKEY key = openNTServicesKey();
|
||||||
key = ArchMiscWindows::openKey(key, name);
|
key = ArchMiscWindows::openKey(key, name);
|
||||||
if (key != NULL) {
|
if (key != nullptr) {
|
||||||
ArchMiscWindows::deleteKey(key, _T("Parameters"));
|
ArchMiscWindows::deleteKey(key, _T("Parameters"));
|
||||||
ArchMiscWindows::closeKey(key);
|
ArchMiscWindows::closeKey(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
// open service manager
|
// open service manager
|
||||||
SC_HANDLE mgr = OpenSCManager(NULL, NULL, GENERIC_WRITE);
|
SC_HANDLE mgr = OpenSCManager(nullptr, nullptr, GENERIC_WRITE);
|
||||||
if (mgr == NULL) {
|
if (mgr == nullptr) {
|
||||||
// can't open service manager
|
// can't open service manager
|
||||||
throw XArchDaemonUninstallFailed(new XArchEvalWindows);
|
throw XArchDaemonUninstallFailed(new XArchEvalWindows);
|
||||||
}
|
}
|
||||||
|
|
||||||
// open the service. oddly, you must open a service to delete it.
|
// open the service. oddly, you must open a service to delete it.
|
||||||
SC_HANDLE service = OpenService(mgr, name, DELETE | SERVICE_STOP);
|
SC_HANDLE service = OpenService(mgr, name, DELETE | SERVICE_STOP);
|
||||||
if (service == NULL) {
|
if (service == nullptr) {
|
||||||
DWORD err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
CloseServiceHandle(mgr);
|
CloseServiceHandle(mgr);
|
||||||
if (err != ERROR_SERVICE_DOES_NOT_EXIST) {
|
if (err != ERROR_SERVICE_DOES_NOT_EXIST) {
|
||||||
|
|
@ -194,8 +194,8 @@ void ArchDaemonWindows::uninstallDaemon(const char *name)
|
||||||
|
|
||||||
int ArchDaemonWindows::daemonize(const char *name, DaemonFunc func)
|
int ArchDaemonWindows::daemonize(const char *name, DaemonFunc func)
|
||||||
{
|
{
|
||||||
assert(name != NULL);
|
assert(name != nullptr);
|
||||||
assert(func != NULL);
|
assert(func != nullptr);
|
||||||
|
|
||||||
// save daemon function
|
// save daemon function
|
||||||
m_daemonFunc = func;
|
m_daemonFunc = func;
|
||||||
|
|
@ -204,27 +204,27 @@ int ArchDaemonWindows::daemonize(const char *name, DaemonFunc func)
|
||||||
SERVICE_TABLE_ENTRY entry[2];
|
SERVICE_TABLE_ENTRY entry[2];
|
||||||
entry[0].lpServiceName = const_cast<char *>(name);
|
entry[0].lpServiceName = const_cast<char *>(name);
|
||||||
entry[0].lpServiceProc = &ArchDaemonWindows::serviceMainEntry;
|
entry[0].lpServiceProc = &ArchDaemonWindows::serviceMainEntry;
|
||||||
entry[1].lpServiceName = NULL;
|
entry[1].lpServiceName = nullptr;
|
||||||
entry[1].lpServiceProc = NULL;
|
entry[1].lpServiceProc = nullptr;
|
||||||
|
|
||||||
// hook us up to the service control manager. this won't return
|
// hook us up to the service control manager. this won't return
|
||||||
// (if successful) until the processes have terminated.
|
// (if successful) until the processes have terminated.
|
||||||
s_daemon = this;
|
s_daemon = this;
|
||||||
if (StartServiceCtrlDispatcher(entry) == 0) {
|
if (StartServiceCtrlDispatcher(entry) == 0) {
|
||||||
// StartServiceCtrlDispatcher failed
|
// StartServiceCtrlDispatcher failed
|
||||||
s_daemon = NULL;
|
s_daemon = nullptr;
|
||||||
throw XArchDaemonFailed(new XArchEvalWindows);
|
throw XArchDaemonFailed(new XArchEvalWindows);
|
||||||
}
|
}
|
||||||
|
|
||||||
s_daemon = NULL;
|
s_daemon = nullptr;
|
||||||
return m_daemonResult;
|
return m_daemonResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ArchDaemonWindows::canInstallDaemon(const char * /*name*/)
|
bool ArchDaemonWindows::canInstallDaemon(const char * /*name*/)
|
||||||
{
|
{
|
||||||
// check if we can open service manager for write
|
// check if we can open service manager for write
|
||||||
SC_HANDLE mgr = OpenSCManager(NULL, NULL, GENERIC_WRITE);
|
SC_HANDLE mgr = OpenSCManager(nullptr, nullptr, GENERIC_WRITE);
|
||||||
if (mgr == NULL) {
|
if (mgr == nullptr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
CloseServiceHandle(mgr);
|
CloseServiceHandle(mgr);
|
||||||
|
|
@ -233,14 +233,14 @@ bool ArchDaemonWindows::canInstallDaemon(const char * /*name*/)
|
||||||
HKEY key = openNTServicesKey();
|
HKEY key = openNTServicesKey();
|
||||||
ArchMiscWindows::closeKey(key);
|
ArchMiscWindows::closeKey(key);
|
||||||
|
|
||||||
return (key != NULL);
|
return (key != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ArchDaemonWindows::isDaemonInstalled(const char *name)
|
bool ArchDaemonWindows::isDaemonInstalled(const char *name)
|
||||||
{
|
{
|
||||||
// open service manager
|
// open service manager
|
||||||
SC_HANDLE mgr = OpenSCManager(NULL, NULL, GENERIC_READ);
|
SC_HANDLE mgr = OpenSCManager(nullptr, nullptr, GENERIC_READ);
|
||||||
if (mgr == NULL) {
|
if (mgr == nullptr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -248,17 +248,17 @@ bool ArchDaemonWindows::isDaemonInstalled(const char *name)
|
||||||
SC_HANDLE service = OpenService(mgr, name, GENERIC_READ);
|
SC_HANDLE service = OpenService(mgr, name, GENERIC_READ);
|
||||||
|
|
||||||
// clean up
|
// clean up
|
||||||
if (service != NULL) {
|
if (service != nullptr) {
|
||||||
CloseServiceHandle(service);
|
CloseServiceHandle(service);
|
||||||
}
|
}
|
||||||
CloseServiceHandle(mgr);
|
CloseServiceHandle(mgr);
|
||||||
|
|
||||||
return (service != NULL);
|
return (service != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
HKEY ArchDaemonWindows::openNTServicesKey()
|
HKEY ArchDaemonWindows::openNTServicesKey()
|
||||||
{
|
{
|
||||||
static const char *s_keyNames[] = {_T("SYSTEM"), _T("CurrentControlSet"), _T("Services"), NULL};
|
static const char *s_keyNames[] = {_T("SYSTEM"), _T("CurrentControlSet"), _T("Services"), nullptr};
|
||||||
|
|
||||||
return ArchMiscWindows::addKey(HKEY_LOCAL_MACHINE, s_keyNames);
|
return ArchMiscWindows::addKey(HKEY_LOCAL_MACHINE, s_keyNames);
|
||||||
}
|
}
|
||||||
|
|
@ -279,12 +279,12 @@ bool ArchDaemonWindows::isRunState(DWORD state)
|
||||||
int ArchDaemonWindows::doRunDaemon(RunFunc run)
|
int ArchDaemonWindows::doRunDaemon(RunFunc run)
|
||||||
{
|
{
|
||||||
// should only be called from DaemonFunc
|
// should only be called from DaemonFunc
|
||||||
assert(m_serviceMutex != NULL);
|
assert(m_serviceMutex != nullptr);
|
||||||
assert(run != NULL);
|
assert(run != nullptr);
|
||||||
|
|
||||||
// create message queue for this thread
|
// create message queue for this thread
|
||||||
MSG dummy;
|
MSG dummy;
|
||||||
PeekMessage(&dummy, NULL, 0, 0, PM_NOREMOVE);
|
PeekMessage(&dummy, nullptr, 0, 0, PM_NOREMOVE);
|
||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
ARCH->lockMutex(m_serviceMutex);
|
ARCH->lockMutex(m_serviceMutex);
|
||||||
|
|
@ -348,7 +348,7 @@ void ArchDaemonWindows::setStatus(DWORD state)
|
||||||
|
|
||||||
void ArchDaemonWindows::setStatus(DWORD state, DWORD step, DWORD waitHint)
|
void ArchDaemonWindows::setStatus(DWORD state, DWORD step, DWORD waitHint)
|
||||||
{
|
{
|
||||||
assert(s_daemon != NULL);
|
assert(s_daemon != nullptr);
|
||||||
|
|
||||||
LOG_DEBUG("setting service status: state=%d, step=%d, waitHint=%d", state, step, waitHint);
|
LOG_DEBUG("setting service status: state=%d, step=%d, waitHint=%d", state, step, waitHint);
|
||||||
|
|
||||||
|
|
@ -365,7 +365,7 @@ void ArchDaemonWindows::setStatus(DWORD state, DWORD step, DWORD waitHint)
|
||||||
|
|
||||||
void ArchDaemonWindows::setStatusError(DWORD error)
|
void ArchDaemonWindows::setStatusError(DWORD error)
|
||||||
{
|
{
|
||||||
assert(s_daemon != NULL);
|
assert(s_daemon != nullptr);
|
||||||
|
|
||||||
SERVICE_STATUS status;
|
SERVICE_STATUS status;
|
||||||
status.dwServiceType = SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS;
|
status.dwServiceType = SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS;
|
||||||
|
|
@ -413,7 +413,7 @@ void ArchDaemonWindows::serviceMain(DWORD argc, LPTSTR *argvIn)
|
||||||
HKEY key = openNTServicesKey();
|
HKEY key = openNTServicesKey();
|
||||||
key = ArchMiscWindows::openKey(key, argvIn[0]);
|
key = ArchMiscWindows::openKey(key, argvIn[0]);
|
||||||
key = ArchMiscWindows::openKey(key, _T("Parameters"));
|
key = ArchMiscWindows::openKey(key, _T("Parameters"));
|
||||||
if (key != NULL) {
|
if (key != nullptr) {
|
||||||
commandLine = ArchMiscWindows::readValueString(key, _T("CommandLine"));
|
commandLine = ArchMiscWindows::readValueString(key, _T("CommandLine"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -498,14 +498,14 @@ void WINAPI ArchDaemonWindows::serviceMainEntry(DWORD argc, LPTSTR *argv)
|
||||||
|
|
||||||
void ArchDaemonWindows::serviceHandler(DWORD ctrl)
|
void ArchDaemonWindows::serviceHandler(DWORD ctrl)
|
||||||
{
|
{
|
||||||
assert(m_serviceMutex != NULL);
|
assert(m_serviceMutex != nullptr);
|
||||||
assert(m_serviceCondVar != NULL);
|
assert(m_serviceCondVar != nullptr);
|
||||||
|
|
||||||
ARCH->lockMutex(m_serviceMutex);
|
ARCH->lockMutex(m_serviceMutex);
|
||||||
|
|
||||||
// ignore request if service is already stopped
|
// ignore request if service is already stopped
|
||||||
if (s_daemon == NULL || m_serviceState == SERVICE_STOPPED) {
|
if (s_daemon == nullptr || m_serviceState == SERVICE_STOPPED) {
|
||||||
if (s_daemon != NULL) {
|
if (s_daemon != nullptr) {
|
||||||
setStatus(m_serviceState);
|
setStatus(m_serviceState);
|
||||||
}
|
}
|
||||||
ARCH->unlockMutex(m_serviceMutex);
|
ARCH->unlockMutex(m_serviceMutex);
|
||||||
|
|
@ -560,21 +560,21 @@ void WINAPI ArchDaemonWindows::serviceHandlerEntry(DWORD ctrl)
|
||||||
void ArchDaemonWindows::start(const char *name)
|
void ArchDaemonWindows::start(const char *name)
|
||||||
{
|
{
|
||||||
// open service manager
|
// open service manager
|
||||||
SC_HANDLE mgr = OpenSCManager(NULL, NULL, GENERIC_READ);
|
SC_HANDLE mgr = OpenSCManager(nullptr, nullptr, GENERIC_READ);
|
||||||
if (mgr == NULL) {
|
if (mgr == nullptr) {
|
||||||
throw XArchDaemonFailed(new XArchEvalWindows());
|
throw XArchDaemonFailed(new XArchEvalWindows());
|
||||||
}
|
}
|
||||||
|
|
||||||
// open the service
|
// open the service
|
||||||
SC_HANDLE service = OpenService(mgr, name, SERVICE_START);
|
SC_HANDLE service = OpenService(mgr, name, SERVICE_START);
|
||||||
|
|
||||||
if (service == NULL) {
|
if (service == nullptr) {
|
||||||
CloseServiceHandle(mgr);
|
CloseServiceHandle(mgr);
|
||||||
throw XArchDaemonFailed(new XArchEvalWindows());
|
throw XArchDaemonFailed(new XArchEvalWindows());
|
||||||
}
|
}
|
||||||
|
|
||||||
// start the service
|
// start the service
|
||||||
if (!StartService(service, 0, NULL)) {
|
if (!StartService(service, 0, nullptr)) {
|
||||||
throw XArchDaemonFailed(new XArchEvalWindows());
|
throw XArchDaemonFailed(new XArchEvalWindows());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -582,15 +582,15 @@ void ArchDaemonWindows::start(const char *name)
|
||||||
void ArchDaemonWindows::stop(const char *name)
|
void ArchDaemonWindows::stop(const char *name)
|
||||||
{
|
{
|
||||||
// open service manager
|
// open service manager
|
||||||
SC_HANDLE mgr = OpenSCManager(NULL, NULL, GENERIC_READ);
|
SC_HANDLE mgr = OpenSCManager(nullptr, nullptr, GENERIC_READ);
|
||||||
if (mgr == NULL) {
|
if (mgr == nullptr) {
|
||||||
throw XArchDaemonFailed(new XArchEvalWindows());
|
throw XArchDaemonFailed(new XArchEvalWindows());
|
||||||
}
|
}
|
||||||
|
|
||||||
// open the service
|
// open the service
|
||||||
SC_HANDLE service = OpenService(mgr, name, SERVICE_STOP | SERVICE_QUERY_STATUS);
|
SC_HANDLE service = OpenService(mgr, name, SERVICE_STOP | SERVICE_QUERY_STATUS);
|
||||||
|
|
||||||
if (service == NULL) {
|
if (service == nullptr) {
|
||||||
CloseServiceHandle(mgr);
|
CloseServiceHandle(mgr);
|
||||||
throw XArchDaemonFailed(new XArchEvalWindows());
|
throw XArchDaemonFailed(new XArchEvalWindows());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
// ArchLogWindows
|
// ArchLogWindows
|
||||||
//
|
//
|
||||||
|
|
||||||
ArchLogWindows::ArchLogWindows() : m_eventLog(NULL)
|
ArchLogWindows::ArchLogWindows() : m_eventLog(nullptr)
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
@ -26,16 +26,16 @@ ArchLogWindows::~ArchLogWindows()
|
||||||
|
|
||||||
void ArchLogWindows::openLog(const char *name)
|
void ArchLogWindows::openLog(const char *name)
|
||||||
{
|
{
|
||||||
if (m_eventLog == NULL) {
|
if (m_eventLog == nullptr) {
|
||||||
m_eventLog = RegisterEventSource(NULL, name);
|
m_eventLog = RegisterEventSource(nullptr, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchLogWindows::closeLog()
|
void ArchLogWindows::closeLog()
|
||||||
{
|
{
|
||||||
if (m_eventLog != NULL) {
|
if (m_eventLog != nullptr) {
|
||||||
DeregisterEventSource(m_eventLog);
|
DeregisterEventSource(m_eventLog);
|
||||||
m_eventLog = NULL;
|
m_eventLog = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -46,7 +46,7 @@ void ArchLogWindows::showLog(bool)
|
||||||
|
|
||||||
void ArchLogWindows::writeLog(ELevel level, const char *msg)
|
void ArchLogWindows::writeLog(ELevel level, const char *msg)
|
||||||
{
|
{
|
||||||
if (m_eventLog != NULL) {
|
if (m_eventLog != nullptr) {
|
||||||
// convert priority
|
// convert priority
|
||||||
WORD type;
|
WORD type;
|
||||||
switch (level) {
|
switch (level) {
|
||||||
|
|
@ -72,9 +72,9 @@ void ArchLogWindows::writeLog(ELevel level, const char *msg)
|
||||||
ReportEvent(
|
ReportEvent(
|
||||||
m_eventLog, type, static_cast<WORD>(level),
|
m_eventLog, type, static_cast<WORD>(level),
|
||||||
0, // event ID
|
0, // event ID
|
||||||
NULL, 0,
|
nullptr, 0,
|
||||||
(DWORD)strlen(msg) + 1, // raw data size
|
(DWORD)strlen(msg) + 1, // raw data size
|
||||||
NULL,
|
nullptr,
|
||||||
const_cast<char *>(msg)
|
const_cast<char *>(msg)
|
||||||
); // raw data
|
); // raw data
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ void errorMessageBox(const char *message, const char *title = "Fatal Error");
|
||||||
std::string getBinaryName()
|
std::string getBinaryName()
|
||||||
{
|
{
|
||||||
std::array<char, MAX_PATH> buffer;
|
std::array<char, MAX_PATH> buffer;
|
||||||
if (!GetModuleFileNameA(NULL, buffer.data(), MAX_PATH)) {
|
if (!GetModuleFileNameA(nullptr, buffer.data(), MAX_PATH)) {
|
||||||
errorMessageBox("Failed to get binary name.");
|
errorMessageBox("Failed to get binary name.");
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
@ -52,10 +52,10 @@ const std::string s_binaryName = getBinaryName();
|
||||||
//
|
//
|
||||||
|
|
||||||
DWORD ArchMiscWindows::s_busyState = 0;
|
DWORD ArchMiscWindows::s_busyState = 0;
|
||||||
ArchMiscWindows::STES_t ArchMiscWindows::s_stes = NULL;
|
ArchMiscWindows::STES_t ArchMiscWindows::s_stes = nullptr;
|
||||||
HICON ArchMiscWindows::s_largeIcon = NULL;
|
HICON ArchMiscWindows::s_largeIcon = nullptr;
|
||||||
HICON ArchMiscWindows::s_smallIcon = NULL;
|
HICON ArchMiscWindows::s_smallIcon = nullptr;
|
||||||
HINSTANCE ArchMiscWindows::s_instanceWin32 = NULL;
|
HINSTANCE ArchMiscWindows::s_instanceWin32 = nullptr;
|
||||||
|
|
||||||
void ArchMiscWindows::init()
|
void ArchMiscWindows::init()
|
||||||
{
|
{
|
||||||
|
|
@ -105,9 +105,9 @@ HKEY ArchMiscWindows::addKey(HKEY key, const TCHAR *const *keyNames)
|
||||||
|
|
||||||
HKEY ArchMiscWindows::openKey(HKEY key, const TCHAR *keyName, bool create)
|
HKEY ArchMiscWindows::openKey(HKEY key, const TCHAR *keyName, bool create)
|
||||||
{
|
{
|
||||||
// ignore if parent is NULL
|
// ignore if parent is nullptr
|
||||||
if (key == NULL) {
|
if (key == nullptr) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// open next key
|
// open next key
|
||||||
|
|
@ -115,11 +115,11 @@ HKEY ArchMiscWindows::openKey(HKEY key, const TCHAR *keyName, bool create)
|
||||||
LSTATUS result = RegOpenKeyEx(key, keyName, 0, KEY_WRITE | KEY_QUERY_VALUE, &newKey);
|
LSTATUS result = RegOpenKeyEx(key, keyName, 0, KEY_WRITE | KEY_QUERY_VALUE, &newKey);
|
||||||
if (result != ERROR_SUCCESS && create) {
|
if (result != ERROR_SUCCESS && create) {
|
||||||
DWORD disp;
|
DWORD disp;
|
||||||
result = RegCreateKeyEx(key, keyName, 0, NULL, 0, KEY_WRITE | KEY_QUERY_VALUE, NULL, &newKey, &disp);
|
result = RegCreateKeyEx(key, keyName, 0, nullptr, 0, KEY_WRITE | KEY_QUERY_VALUE, nullptr, &newKey, &disp);
|
||||||
}
|
}
|
||||||
if (result != ERROR_SUCCESS) {
|
if (result != ERROR_SUCCESS) {
|
||||||
RegCloseKey(key);
|
RegCloseKey(key);
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// switch to new key
|
// switch to new key
|
||||||
|
|
@ -129,7 +129,7 @@ HKEY ArchMiscWindows::openKey(HKEY key, const TCHAR *keyName, bool create)
|
||||||
|
|
||||||
HKEY ArchMiscWindows::openKey(HKEY key, const TCHAR *const *keyNames, bool create)
|
HKEY ArchMiscWindows::openKey(HKEY key, const TCHAR *const *keyNames, bool create)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; key != NULL && keyNames[i] != NULL; ++i) {
|
for (size_t i = 0; key != nullptr && keyNames[i] != nullptr; ++i) {
|
||||||
// open next key
|
// open next key
|
||||||
key = openKey(key, keyNames[i], create);
|
key = openKey(key, keyNames[i], create);
|
||||||
}
|
}
|
||||||
|
|
@ -138,17 +138,17 @@ HKEY ArchMiscWindows::openKey(HKEY key, const TCHAR *const *keyNames, bool creat
|
||||||
|
|
||||||
void ArchMiscWindows::closeKey(HKEY key)
|
void ArchMiscWindows::closeKey(HKEY key)
|
||||||
{
|
{
|
||||||
assert(key != NULL);
|
assert(key != nullptr);
|
||||||
if (key == NULL)
|
if (key == nullptr)
|
||||||
return;
|
return;
|
||||||
RegCloseKey(key);
|
RegCloseKey(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMiscWindows::deleteKey(HKEY key, const TCHAR *name)
|
void ArchMiscWindows::deleteKey(HKEY key, const TCHAR *name)
|
||||||
{
|
{
|
||||||
assert(key != NULL);
|
assert(key != nullptr);
|
||||||
assert(name != NULL);
|
assert(name != nullptr);
|
||||||
if (key == NULL || name == NULL)
|
if (key == nullptr || name == nullptr)
|
||||||
return;
|
return;
|
||||||
RegDeleteKey(key, name);
|
RegDeleteKey(key, name);
|
||||||
}
|
}
|
||||||
|
|
@ -156,7 +156,7 @@ void ArchMiscWindows::deleteKey(HKEY key, const TCHAR *name)
|
||||||
ArchMiscWindows::EValueType ArchMiscWindows::typeOfValue(HKEY key, const TCHAR *name)
|
ArchMiscWindows::EValueType ArchMiscWindows::typeOfValue(HKEY key, const TCHAR *name)
|
||||||
{
|
{
|
||||||
DWORD type;
|
DWORD type;
|
||||||
LONG result = RegQueryValueEx(key, name, 0, &type, NULL, NULL);
|
LONG result = RegQueryValueEx(key, name, 0, &type, nullptr, nullptr);
|
||||||
if (result != ERROR_SUCCESS) {
|
if (result != ERROR_SUCCESS) {
|
||||||
return kNO_VALUE;
|
return kNO_VALUE;
|
||||||
}
|
}
|
||||||
|
|
@ -177,8 +177,8 @@ ArchMiscWindows::EValueType ArchMiscWindows::typeOfValue(HKEY key, const TCHAR *
|
||||||
|
|
||||||
void ArchMiscWindows::setValue(HKEY key, const TCHAR *name, const std::string &value)
|
void ArchMiscWindows::setValue(HKEY key, const TCHAR *name, const std::string &value)
|
||||||
{
|
{
|
||||||
assert(key != NULL);
|
assert(key != nullptr);
|
||||||
if (key == NULL) {
|
if (key == nullptr) {
|
||||||
// TODO: throw exception
|
// TODO: throw exception
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -187,8 +187,8 @@ void ArchMiscWindows::setValue(HKEY key, const TCHAR *name, const std::string &v
|
||||||
|
|
||||||
void ArchMiscWindows::setValue(HKEY key, const TCHAR *name, DWORD value)
|
void ArchMiscWindows::setValue(HKEY key, const TCHAR *name, DWORD value)
|
||||||
{
|
{
|
||||||
assert(key != NULL);
|
assert(key != nullptr);
|
||||||
if (key == NULL) {
|
if (key == nullptr) {
|
||||||
// TODO: throw exception
|
// TODO: throw exception
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -200,7 +200,7 @@ std::string ArchMiscWindows::readBinaryOrString(HKEY key, const TCHAR *name, DWO
|
||||||
// get the size of the string
|
// get the size of the string
|
||||||
DWORD actualType;
|
DWORD actualType;
|
||||||
DWORD size = 0;
|
DWORD size = 0;
|
||||||
LONG result = RegQueryValueEx(key, name, 0, &actualType, NULL, &size);
|
LONG result = RegQueryValueEx(key, name, 0, &actualType, nullptr, &size);
|
||||||
if (result != ERROR_SUCCESS || actualType != type) {
|
if (result != ERROR_SUCCESS || actualType != type) {
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
@ -263,12 +263,12 @@ void ArchMiscWindows::removeBusyState(DWORD busyModes)
|
||||||
void ArchMiscWindows::setThreadExecutionState(DWORD busyModes)
|
void ArchMiscWindows::setThreadExecutionState(DWORD busyModes)
|
||||||
{
|
{
|
||||||
// look up function dynamically so we work on older systems
|
// look up function dynamically so we work on older systems
|
||||||
if (s_stes == NULL) {
|
if (s_stes == nullptr) {
|
||||||
HINSTANCE kernel = LoadLibrary("kernel32.dll");
|
HINSTANCE kernel = LoadLibrary("kernel32.dll");
|
||||||
if (kernel != NULL) {
|
if (kernel != nullptr) {
|
||||||
s_stes = reinterpret_cast<STES_t>(GetProcAddress(kernel, "SetThreadExecutionState"));
|
s_stes = reinterpret_cast<STES_t>(GetProcAddress(kernel, "SetThreadExecutionState"));
|
||||||
}
|
}
|
||||||
if (s_stes == NULL) {
|
if (s_stes == nullptr) {
|
||||||
s_stes = &ArchMiscWindows::dummySetThreadExecutionState;
|
s_stes = &ArchMiscWindows::dummySetThreadExecutionState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -301,12 +301,12 @@ void ArchMiscWindows::wakeupDisplay()
|
||||||
// We can't use ::setThreadExecutionState here because it sets
|
// We can't use ::setThreadExecutionState here because it sets
|
||||||
// ES_CONTINUOUS, which we don't want.
|
// ES_CONTINUOUS, which we don't want.
|
||||||
|
|
||||||
if (s_stes == NULL) {
|
if (s_stes == nullptr) {
|
||||||
HINSTANCE kernel = LoadLibrary("kernel32.dll");
|
HINSTANCE kernel = LoadLibrary("kernel32.dll");
|
||||||
if (kernel != NULL) {
|
if (kernel != nullptr) {
|
||||||
s_stes = reinterpret_cast<STES_t>(GetProcAddress(kernel, "SetThreadExecutionState"));
|
s_stes = reinterpret_cast<STES_t>(GetProcAddress(kernel, "SetThreadExecutionState"));
|
||||||
}
|
}
|
||||||
if (s_stes == NULL) {
|
if (s_stes == nullptr) {
|
||||||
s_stes = &ArchMiscWindows::dummySetThreadExecutionState;
|
s_stes = &ArchMiscWindows::dummySetThreadExecutionState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -394,13 +394,13 @@ BOOL WINAPI ArchMiscWindows::getProcessEntry(PROCESSENTRY32 &entry, DWORD proces
|
||||||
HINSTANCE
|
HINSTANCE
|
||||||
ArchMiscWindows::instanceWin32()
|
ArchMiscWindows::instanceWin32()
|
||||||
{
|
{
|
||||||
assert(s_instanceWin32 != NULL);
|
assert(s_instanceWin32 != nullptr);
|
||||||
return s_instanceWin32;
|
return s_instanceWin32;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMiscWindows::setInstanceWin32(HINSTANCE instance)
|
void ArchMiscWindows::setInstanceWin32(HINSTANCE instance)
|
||||||
{
|
{
|
||||||
assert(instance != NULL);
|
assert(instance != nullptr);
|
||||||
s_instanceWin32 = instance;
|
s_instanceWin32 = instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,16 +50,16 @@ public:
|
||||||
|
|
||||||
ArchThreadImpl::ArchThreadImpl()
|
ArchThreadImpl::ArchThreadImpl()
|
||||||
: m_refCount(1),
|
: m_refCount(1),
|
||||||
m_thread(NULL),
|
m_thread(nullptr),
|
||||||
m_id(0),
|
m_id(0),
|
||||||
m_func(NULL),
|
m_func(nullptr),
|
||||||
m_userData(NULL),
|
m_userData(nullptr),
|
||||||
m_cancelling(false),
|
m_cancelling(false),
|
||||||
m_result(NULL),
|
m_result(nullptr),
|
||||||
m_networkData(NULL)
|
m_networkData(nullptr)
|
||||||
{
|
{
|
||||||
m_exit = CreateEvent(NULL, TRUE, FALSE, NULL);
|
m_exit = CreateEvent(nullptr, TRUE, FALSE, nullptr);
|
||||||
m_cancel = CreateEvent(NULL, TRUE, FALSE, NULL);
|
m_cancel = CreateEvent(nullptr, TRUE, FALSE, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
ArchThreadImpl::~ArchThreadImpl()
|
ArchThreadImpl::~ArchThreadImpl()
|
||||||
|
|
@ -72,17 +72,17 @@ ArchThreadImpl::~ArchThreadImpl()
|
||||||
// ArchMultithreadWindows
|
// ArchMultithreadWindows
|
||||||
//
|
//
|
||||||
|
|
||||||
ArchMultithreadWindows *ArchMultithreadWindows::s_instance = NULL;
|
ArchMultithreadWindows *ArchMultithreadWindows::s_instance = nullptr;
|
||||||
|
|
||||||
ArchMultithreadWindows::ArchMultithreadWindows()
|
ArchMultithreadWindows::ArchMultithreadWindows()
|
||||||
{
|
{
|
||||||
assert(s_instance == NULL);
|
assert(s_instance == nullptr);
|
||||||
s_instance = this;
|
s_instance = this;
|
||||||
|
|
||||||
// no signal handlers
|
// no signal handlers
|
||||||
for (size_t i = 0; i < kNUM_SIGNALS; ++i) {
|
for (size_t i = 0; i < kNUM_SIGNALS; ++i) {
|
||||||
m_signalFunc[i] = NULL;
|
m_signalFunc[i] = nullptr;
|
||||||
m_signalUserData[i] = NULL;
|
m_signalUserData[i] = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// create mutex for thread list
|
// create mutex for thread list
|
||||||
|
|
@ -91,14 +91,14 @@ ArchMultithreadWindows::ArchMultithreadWindows()
|
||||||
// create thread for calling (main) thread and add it to our
|
// create thread for calling (main) thread and add it to our
|
||||||
// list. no need to lock the mutex since we're the only thread.
|
// list. no need to lock the mutex since we're the only thread.
|
||||||
m_mainThread = new ArchThreadImpl;
|
m_mainThread = new ArchThreadImpl;
|
||||||
m_mainThread->m_thread = NULL;
|
m_mainThread->m_thread = nullptr;
|
||||||
m_mainThread->m_id = GetCurrentThreadId();
|
m_mainThread->m_id = GetCurrentThreadId();
|
||||||
insert(m_mainThread);
|
insert(m_mainThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
ArchMultithreadWindows::~ArchMultithreadWindows()
|
ArchMultithreadWindows::~ArchMultithreadWindows()
|
||||||
{
|
{
|
||||||
s_instance = NULL;
|
s_instance = nullptr;
|
||||||
|
|
||||||
// clean up thread list
|
// clean up thread list
|
||||||
for (ThreadList::iterator index = m_threadList.begin(); index != m_threadList.end(); ++index) {
|
for (ThreadList::iterator index = m_threadList.begin(); index != m_threadList.end(); ++index) {
|
||||||
|
|
@ -142,8 +142,8 @@ ArchMultithreadWindows *ArchMultithreadWindows::getInstance()
|
||||||
ArchCond ArchMultithreadWindows::newCondVar()
|
ArchCond ArchMultithreadWindows::newCondVar()
|
||||||
{
|
{
|
||||||
ArchCondImpl *cond = new ArchCondImpl;
|
ArchCondImpl *cond = new ArchCondImpl;
|
||||||
cond->m_events[ArchCondImpl::kSignal] = CreateEvent(NULL, FALSE, FALSE, NULL);
|
cond->m_events[ArchCondImpl::kSignal] = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
||||||
cond->m_events[ArchCondImpl::kBroadcast] = CreateEvent(NULL, TRUE, FALSE, NULL);
|
cond->m_events[ArchCondImpl::kBroadcast] = CreateEvent(nullptr, TRUE, FALSE, nullptr);
|
||||||
cond->m_waitCountMutex = newMutex();
|
cond->m_waitCountMutex = newMutex();
|
||||||
cond->m_waitCount = 0;
|
cond->m_waitCount = 0;
|
||||||
return cond;
|
return cond;
|
||||||
|
|
@ -272,14 +272,14 @@ ArchThread ArchMultithreadWindows::newThread(ThreadFunc func, void *data)
|
||||||
|
|
||||||
// create thread
|
// create thread
|
||||||
unsigned int id = 0;
|
unsigned int id = 0;
|
||||||
thread->m_thread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, threadFunc, (void *)thread, 0, &id));
|
thread->m_thread = reinterpret_cast<HANDLE>(_beginthreadex(nullptr, 0, threadFunc, (void *)thread, 0, &id));
|
||||||
thread->m_id = static_cast<DWORD>(id);
|
thread->m_id = static_cast<DWORD>(id);
|
||||||
|
|
||||||
// check if thread was started
|
// check if thread was started
|
||||||
if (thread->m_thread == 0) {
|
if (thread->m_thread == 0) {
|
||||||
// failed to start thread so clean up
|
// failed to start thread so clean up
|
||||||
delete thread;
|
delete thread;
|
||||||
thread = NULL;
|
thread = nullptr;
|
||||||
} else {
|
} else {
|
||||||
// add thread to list
|
// add thread to list
|
||||||
insert(thread);
|
insert(thread);
|
||||||
|
|
@ -299,18 +299,18 @@ ArchThread ArchMultithreadWindows::newCurrentThread()
|
||||||
lockMutex(m_threadMutex);
|
lockMutex(m_threadMutex);
|
||||||
ArchThreadImpl *thread = find(GetCurrentThreadId());
|
ArchThreadImpl *thread = find(GetCurrentThreadId());
|
||||||
unlockMutex(m_threadMutex);
|
unlockMutex(m_threadMutex);
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
return thread;
|
return thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMultithreadWindows::closeThread(ArchThread thread)
|
void ArchMultithreadWindows::closeThread(ArchThread thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
// decrement ref count and clean up thread if no more references
|
// decrement ref count and clean up thread if no more references
|
||||||
if (--thread->m_refCount == 0) {
|
if (--thread->m_refCount == 0) {
|
||||||
// close the handle (main thread has a NULL handle)
|
// close the handle (main thread has a nullptr handle)
|
||||||
if (thread->m_thread != NULL) {
|
if (thread->m_thread != nullptr) {
|
||||||
CloseHandle(thread->m_thread);
|
CloseHandle(thread->m_thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -333,7 +333,7 @@ ArchThread ArchMultithreadWindows::copyThread(ArchThread thread)
|
||||||
|
|
||||||
void ArchMultithreadWindows::cancelThread(ArchThread thread)
|
void ArchMultithreadWindows::cancelThread(ArchThread thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
// set cancel flag
|
// set cancel flag
|
||||||
SetEvent(thread->m_cancel);
|
SetEvent(thread->m_cancel);
|
||||||
|
|
@ -380,7 +380,7 @@ void ArchMultithreadWindows::setPriorityOfThread(ArchThread thread, int n)
|
||||||
#endif
|
#endif
|
||||||
static const size_t s_pBase = 8; // index of normal priority
|
static const size_t s_pBase = 8; // index of normal priority
|
||||||
|
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
size_t index;
|
size_t index;
|
||||||
if (n > 0 && s_pBase < (size_t)n) {
|
if (n > 0 && s_pBase < (size_t)n) {
|
||||||
|
|
@ -410,7 +410,7 @@ void ArchMultithreadWindows::testCancelThread()
|
||||||
|
|
||||||
bool ArchMultithreadWindows::wait(ArchThread target, double timeout)
|
bool ArchMultithreadWindows::wait(ArchThread target, double timeout)
|
||||||
{
|
{
|
||||||
assert(target != NULL);
|
assert(target != nullptr);
|
||||||
|
|
||||||
lockMutex(m_threadMutex);
|
lockMutex(m_threadMutex);
|
||||||
|
|
||||||
|
|
@ -502,7 +502,7 @@ void ArchMultithreadWindows::setSignalHandler(ESignal signal, SignalFunc func, v
|
||||||
void ArchMultithreadWindows::raiseSignal(ESignal signal)
|
void ArchMultithreadWindows::raiseSignal(ESignal signal)
|
||||||
{
|
{
|
||||||
lockMutex(m_threadMutex);
|
lockMutex(m_threadMutex);
|
||||||
if (m_signalFunc[signal] != NULL) {
|
if (m_signalFunc[signal] != nullptr) {
|
||||||
m_signalFunc[signal](signal, m_signalUserData[signal]);
|
m_signalFunc[signal](signal, m_signalUserData[signal]);
|
||||||
ARCH->unblockPollSocket(m_mainThread);
|
ARCH->unblockPollSocket(m_mainThread);
|
||||||
} else if (signal == kINTERRUPT || signal == kTERMINATE) {
|
} else if (signal == kINTERRUPT || signal == kTERMINATE) {
|
||||||
|
|
@ -514,7 +514,7 @@ void ArchMultithreadWindows::raiseSignal(ESignal signal)
|
||||||
ArchThreadImpl *ArchMultithreadWindows::find(DWORD id)
|
ArchThreadImpl *ArchMultithreadWindows::find(DWORD id)
|
||||||
{
|
{
|
||||||
ArchThreadImpl *impl = findNoRef(id);
|
ArchThreadImpl *impl = findNoRef(id);
|
||||||
if (impl != NULL) {
|
if (impl != nullptr) {
|
||||||
refThread(impl);
|
refThread(impl);
|
||||||
}
|
}
|
||||||
return impl;
|
return impl;
|
||||||
|
|
@ -523,13 +523,13 @@ ArchThreadImpl *ArchMultithreadWindows::find(DWORD id)
|
||||||
ArchThreadImpl *ArchMultithreadWindows::findNoRef(DWORD id)
|
ArchThreadImpl *ArchMultithreadWindows::findNoRef(DWORD id)
|
||||||
{
|
{
|
||||||
ArchThreadImpl *impl = findNoRefOrCreate(id);
|
ArchThreadImpl *impl = findNoRefOrCreate(id);
|
||||||
if (impl == NULL) {
|
if (impl == nullptr) {
|
||||||
// create thread for calling thread which isn't in our list and
|
// create thread for calling thread which isn't in our list and
|
||||||
// add it to the list. this won't normally happen but it can if
|
// add it to the list. this won't normally happen but it can if
|
||||||
// the system calls us under a new thread, like it does when we
|
// the system calls us under a new thread, like it does when we
|
||||||
// run as a service.
|
// run as a service.
|
||||||
impl = new ArchThreadImpl;
|
impl = new ArchThreadImpl;
|
||||||
impl->m_thread = NULL;
|
impl->m_thread = nullptr;
|
||||||
impl->m_id = GetCurrentThreadId();
|
impl->m_id = GetCurrentThreadId();
|
||||||
insert(impl);
|
insert(impl);
|
||||||
}
|
}
|
||||||
|
|
@ -544,15 +544,15 @@ ArchThreadImpl *ArchMultithreadWindows::findNoRefOrCreate(DWORD id)
|
||||||
return *index;
|
return *index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMultithreadWindows::insert(ArchThreadImpl *thread)
|
void ArchMultithreadWindows::insert(ArchThreadImpl *thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
// thread shouldn't already be on the list
|
// thread shouldn't already be on the list
|
||||||
assert(findNoRefOrCreate(thread->m_id) == NULL);
|
assert(findNoRefOrCreate(thread->m_id) == nullptr);
|
||||||
|
|
||||||
// append to list
|
// append to list
|
||||||
m_threadList.push_back(thread);
|
m_threadList.push_back(thread);
|
||||||
|
|
@ -570,14 +570,14 @@ void ArchMultithreadWindows::erase(ArchThreadImpl *thread)
|
||||||
|
|
||||||
void ArchMultithreadWindows::refThread(ArchThreadImpl *thread)
|
void ArchMultithreadWindows::refThread(ArchThreadImpl *thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
assert(findNoRefOrCreate(thread->m_id) != NULL);
|
assert(findNoRefOrCreate(thread->m_id) != nullptr);
|
||||||
++thread->m_refCount;
|
++thread->m_refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArchMultithreadWindows::testCancelThreadImpl(ArchThreadImpl *thread)
|
void ArchMultithreadWindows::testCancelThreadImpl(ArchThreadImpl *thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != nullptr);
|
||||||
|
|
||||||
// poll cancel event. return if not set.
|
// poll cancel event. return if not set.
|
||||||
const DWORD result = WaitForSingleObject(thread->m_cancel, 0);
|
const DWORD result = WaitForSingleObject(thread->m_cancel, 0);
|
||||||
|
|
@ -616,7 +616,7 @@ void ArchMultithreadWindows::doThreadFunc(ArchThread thread)
|
||||||
lockMutex(m_threadMutex);
|
lockMutex(m_threadMutex);
|
||||||
unlockMutex(m_threadMutex);
|
unlockMutex(m_threadMutex);
|
||||||
|
|
||||||
void *result = NULL;
|
void *result = nullptr;
|
||||||
try {
|
try {
|
||||||
// go
|
// go
|
||||||
result = (*thread->m_func)(thread->m_userData);
|
result = (*thread->m_func)(thread->m_userData);
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ static int(PASCAL FAR *WSAEnumNetworkEvents_winsock)(SOCKET, WSAEVENT, LPWSANETW
|
||||||
|
|
||||||
#define setfunc(var, name, type) var = (type)netGetProcAddress(module, #name)
|
#define setfunc(var, name, type) var = (type)netGetProcAddress(module, #name)
|
||||||
|
|
||||||
static HMODULE s_networkModule = NULL;
|
static HMODULE s_networkModule = nullptr;
|
||||||
|
|
||||||
static FARPROC netGetProcAddress(HMODULE module, LPCSTR name)
|
static FARPROC netGetProcAddress(HMODULE module, LPCSTR name)
|
||||||
{
|
{
|
||||||
|
|
@ -81,20 +81,20 @@ ArchNetAddressImpl *ArchNetAddressImpl::alloc(size_t size)
|
||||||
// ArchNetworkWinsock
|
// ArchNetworkWinsock
|
||||||
//
|
//
|
||||||
|
|
||||||
ArchNetworkWinsock::ArchNetworkWinsock() : m_mutex(NULL)
|
ArchNetworkWinsock::ArchNetworkWinsock() : m_mutex(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ArchNetworkWinsock::~ArchNetworkWinsock()
|
ArchNetworkWinsock::~ArchNetworkWinsock()
|
||||||
{
|
{
|
||||||
if (s_networkModule != NULL) {
|
if (s_networkModule != nullptr) {
|
||||||
WSACleanup_winsock();
|
WSACleanup_winsock();
|
||||||
::FreeLibrary(s_networkModule);
|
::FreeLibrary(s_networkModule);
|
||||||
|
|
||||||
WSACleanup_winsock = NULL;
|
WSACleanup_winsock = nullptr;
|
||||||
s_networkModule = NULL;
|
s_networkModule = nullptr;
|
||||||
}
|
}
|
||||||
if (m_mutex != NULL) {
|
if (m_mutex != nullptr) {
|
||||||
ARCH->closeMutex(m_mutex);
|
ARCH->closeMutex(m_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -108,8 +108,8 @@ void ArchNetworkWinsock::init()
|
||||||
{
|
{
|
||||||
static const char *s_library[] = {"ws2_32.dll"};
|
static const char *s_library[] = {"ws2_32.dll"};
|
||||||
|
|
||||||
assert(WSACleanup_winsock == NULL);
|
assert(WSACleanup_winsock == nullptr);
|
||||||
assert(s_networkModule == NULL);
|
assert(s_networkModule == nullptr);
|
||||||
|
|
||||||
// try each winsock library
|
// try each winsock library
|
||||||
for (size_t i = 0; i < sizeof(s_library) / sizeof(s_library[0]); ++i) {
|
for (size_t i = 0; i < sizeof(s_library) / sizeof(s_library[0]); ++i) {
|
||||||
|
|
@ -128,7 +128,7 @@ void ArchNetworkWinsock::init()
|
||||||
|
|
||||||
void ArchNetworkWinsock::initModule(HMODULE module)
|
void ArchNetworkWinsock::initModule(HMODULE module)
|
||||||
{
|
{
|
||||||
if (module == NULL) {
|
if (module == nullptr) {
|
||||||
throw XArchNetworkSupport("");
|
throw XArchNetworkSupport("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -229,7 +229,7 @@ ArchSocket ArchNetworkWinsock::newSocket(EAddressFamily family, ESocketType type
|
||||||
|
|
||||||
ArchSocket ArchNetworkWinsock::copySocket(ArchSocket s)
|
ArchSocket ArchNetworkWinsock::copySocket(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// ref the socket and return it
|
// ref the socket and return it
|
||||||
ARCH->lockMutex(m_mutex);
|
ARCH->lockMutex(m_mutex);
|
||||||
|
|
@ -240,7 +240,7 @@ ArchSocket ArchNetworkWinsock::copySocket(ArchSocket s)
|
||||||
|
|
||||||
void ArchNetworkWinsock::closeSocket(ArchSocket s)
|
void ArchNetworkWinsock::closeSocket(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// unref the socket and note if it should be released
|
// unref the socket and note if it should be released
|
||||||
ARCH->lockMutex(m_mutex);
|
ARCH->lockMutex(m_mutex);
|
||||||
|
|
@ -264,7 +264,7 @@ void ArchNetworkWinsock::closeSocket(ArchSocket s)
|
||||||
|
|
||||||
void ArchNetworkWinsock::closeSocketForRead(ArchSocket s)
|
void ArchNetworkWinsock::closeSocketForRead(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
if (shutdown_winsock(s->m_socket, SD_RECEIVE) == SOCKET_ERROR) {
|
if (shutdown_winsock(s->m_socket, SD_RECEIVE) == SOCKET_ERROR) {
|
||||||
if (getsockerror_winsock() != WSAENOTCONN) {
|
if (getsockerror_winsock() != WSAENOTCONN) {
|
||||||
|
|
@ -275,7 +275,7 @@ void ArchNetworkWinsock::closeSocketForRead(ArchSocket s)
|
||||||
|
|
||||||
void ArchNetworkWinsock::closeSocketForWrite(ArchSocket s)
|
void ArchNetworkWinsock::closeSocketForWrite(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
if (shutdown_winsock(s->m_socket, SD_SEND) == SOCKET_ERROR) {
|
if (shutdown_winsock(s->m_socket, SD_SEND) == SOCKET_ERROR) {
|
||||||
if (getsockerror_winsock() != WSAENOTCONN) {
|
if (getsockerror_winsock() != WSAENOTCONN) {
|
||||||
|
|
@ -286,8 +286,8 @@ void ArchNetworkWinsock::closeSocketForWrite(ArchSocket s)
|
||||||
|
|
||||||
void ArchNetworkWinsock::bindSocket(ArchSocket s, ArchNetAddress addr)
|
void ArchNetworkWinsock::bindSocket(ArchSocket s, ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
if (bind_winsock(s->m_socket, TYPED_ADDR(struct sockaddr, addr), addr->m_len) == SOCKET_ERROR) {
|
if (bind_winsock(s->m_socket, TYPED_ADDR(struct sockaddr, addr), addr->m_len) == SOCKET_ERROR) {
|
||||||
throwError(getsockerror_winsock());
|
throwError(getsockerror_winsock());
|
||||||
|
|
@ -296,7 +296,7 @@ void ArchNetworkWinsock::bindSocket(ArchSocket s, ArchNetAddress addr)
|
||||||
|
|
||||||
void ArchNetworkWinsock::listenOnSocket(ArchSocket s)
|
void ArchNetworkWinsock::listenOnSocket(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// hardcoding backlog
|
// hardcoding backlog
|
||||||
if (listen_winsock(s->m_socket, 3) == SOCKET_ERROR) {
|
if (listen_winsock(s->m_socket, 3) == SOCKET_ERROR) {
|
||||||
|
|
@ -306,7 +306,7 @@ void ArchNetworkWinsock::listenOnSocket(ArchSocket s)
|
||||||
|
|
||||||
ArchSocket ArchNetworkWinsock::acceptSocket(ArchSocket s, ArchNetAddress *const addr)
|
ArchSocket ArchNetworkWinsock::acceptSocket(ArchSocket s, ArchNetAddress *const addr)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// create new socket and temporary address
|
// create new socket and temporary address
|
||||||
ArchSocketImpl *socket = new ArchSocketImpl;
|
ArchSocketImpl *socket = new ArchSocketImpl;
|
||||||
|
|
@ -319,10 +319,10 @@ ArchSocket ArchNetworkWinsock::acceptSocket(ArchSocket s, ArchNetAddress *const
|
||||||
delete socket;
|
delete socket;
|
||||||
free(tmp);
|
free(tmp);
|
||||||
if (addr) {
|
if (addr) {
|
||||||
*addr = NULL;
|
*addr = nullptr;
|
||||||
}
|
}
|
||||||
if (err == WSAEWOULDBLOCK) {
|
if (err == WSAEWOULDBLOCK) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
throwError(err);
|
throwError(err);
|
||||||
}
|
}
|
||||||
|
|
@ -334,7 +334,7 @@ ArchSocket ArchNetworkWinsock::acceptSocket(ArchSocket s, ArchNetAddress *const
|
||||||
delete socket;
|
delete socket;
|
||||||
free(tmp);
|
free(tmp);
|
||||||
if (addr) {
|
if (addr) {
|
||||||
*addr = NULL;
|
*addr = nullptr;
|
||||||
}
|
}
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
@ -346,7 +346,7 @@ ArchSocket ArchNetworkWinsock::acceptSocket(ArchSocket s, ArchNetAddress *const
|
||||||
socket->m_pollWrite = true;
|
socket->m_pollWrite = true;
|
||||||
|
|
||||||
// copy address if requested
|
// copy address if requested
|
||||||
if (addr != NULL) {
|
if (addr != nullptr) {
|
||||||
*addr = ARCH->copyAddr(tmp);
|
*addr = ARCH->copyAddr(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -356,8 +356,8 @@ ArchSocket ArchNetworkWinsock::acceptSocket(ArchSocket s, ArchNetAddress *const
|
||||||
|
|
||||||
bool ArchNetworkWinsock::connectSocket(ArchSocket s, ArchNetAddress addr)
|
bool ArchNetworkWinsock::connectSocket(ArchSocket s, ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
if (connect_winsock(s->m_socket, TYPED_ADDR(struct sockaddr, addr), addr->m_len) == SOCKET_ERROR) {
|
if (connect_winsock(s->m_socket, TYPED_ADDR(struct sockaddr, addr), addr->m_len) == SOCKET_ERROR) {
|
||||||
if (getsockerror_winsock() == WSAEISCONN) {
|
if (getsockerror_winsock() == WSAEISCONN) {
|
||||||
|
|
@ -384,7 +384,7 @@ int ArchNetworkWinsock::pollSocket(PollEntry pe[], int num, double timeout)
|
||||||
pe[i].m_revents = 0;
|
pe[i].m_revents = 0;
|
||||||
|
|
||||||
// set invalid flag if socket is bogus then go to next socket
|
// set invalid flag if socket is bogus then go to next socket
|
||||||
if (pe[i].m_socket == NULL) {
|
if (pe[i].m_socket == nullptr) {
|
||||||
pe[i].m_revents |= kPOLLNVAL;
|
pe[i].m_revents |= kPOLLNVAL;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -428,7 +428,7 @@ int ArchNetworkWinsock::pollSocket(PollEntry pe[], int num, double timeout)
|
||||||
ArchThread thread = mt->newCurrentThread();
|
ArchThread thread = mt->newCurrentThread();
|
||||||
WSAEVENT *unblockEvent = (WSAEVENT *)mt->getNetworkDataForThread(thread);
|
WSAEVENT *unblockEvent = (WSAEVENT *)mt->getNetworkDataForThread(thread);
|
||||||
ARCH->closeThread(thread);
|
ARCH->closeThread(thread);
|
||||||
if (unblockEvent == NULL) {
|
if (unblockEvent == nullptr) {
|
||||||
unblockEvent = new WSAEVENT;
|
unblockEvent = new WSAEVENT;
|
||||||
m_unblockEvents.push_back(unblockEvent);
|
m_unblockEvents.push_back(unblockEvent);
|
||||||
*unblockEvent = WSACreateEvent_winsock();
|
*unblockEvent = WSACreateEvent_winsock();
|
||||||
|
|
@ -467,7 +467,7 @@ int ArchNetworkWinsock::pollSocket(PollEntry pe[], int num, double timeout)
|
||||||
}
|
}
|
||||||
for (i = 0, n = 0; i < num; ++i) {
|
for (i = 0, n = 0; i < num; ++i) {
|
||||||
// skip events we didn't check
|
// skip events we didn't check
|
||||||
if (pe[i].m_socket == NULL || (pe[i].m_events & (kPOLLIN | kPOLLOUT)) == 0) {
|
if (pe[i].m_socket == nullptr || (pe[i].m_events & (kPOLLIN | kPOLLOUT)) == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -522,14 +522,14 @@ void ArchNetworkWinsock::unblockPollSocket(ArchThread thread)
|
||||||
// set the unblock event
|
// set the unblock event
|
||||||
ArchMultithreadWindows *mt = ArchMultithreadWindows::getInstance();
|
ArchMultithreadWindows *mt = ArchMultithreadWindows::getInstance();
|
||||||
WSAEVENT *unblockEvent = (WSAEVENT *)mt->getNetworkDataForThread(thread);
|
WSAEVENT *unblockEvent = (WSAEVENT *)mt->getNetworkDataForThread(thread);
|
||||||
if (unblockEvent != NULL) {
|
if (unblockEvent != nullptr) {
|
||||||
WSASetEvent_winsock(*unblockEvent);
|
WSASetEvent_winsock(*unblockEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ArchNetworkWinsock::readSocket(ArchSocket s, void *buf, size_t len)
|
size_t ArchNetworkWinsock::readSocket(ArchSocket s, void *buf, size_t len)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
int n = recv_winsock(s->m_socket, buf, (int)len, 0);
|
int n = recv_winsock(s->m_socket, buf, (int)len, 0);
|
||||||
if (n == SOCKET_ERROR) {
|
if (n == SOCKET_ERROR) {
|
||||||
|
|
@ -544,7 +544,7 @@ size_t ArchNetworkWinsock::readSocket(ArchSocket s, void *buf, size_t len)
|
||||||
|
|
||||||
size_t ArchNetworkWinsock::writeSocket(ArchSocket s, const void *buf, size_t len)
|
size_t ArchNetworkWinsock::writeSocket(ArchSocket s, const void *buf, size_t len)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
int n = send_winsock(s->m_socket, buf, (int)len, 0);
|
int n = send_winsock(s->m_socket, buf, (int)len, 0);
|
||||||
if (n == SOCKET_ERROR) {
|
if (n == SOCKET_ERROR) {
|
||||||
|
|
@ -563,7 +563,7 @@ size_t ArchNetworkWinsock::writeSocket(ArchSocket s, const void *buf, size_t len
|
||||||
|
|
||||||
void ArchNetworkWinsock::throwErrorOnSocket(ArchSocket s)
|
void ArchNetworkWinsock::throwErrorOnSocket(ArchSocket s)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// get the error from the socket layer
|
// get the error from the socket layer
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
@ -590,7 +590,7 @@ void ArchNetworkWinsock::setBlockingOnSocket(SOCKET s, bool blocking)
|
||||||
|
|
||||||
bool ArchNetworkWinsock::setNoDelayOnSocket(ArchSocket s, bool noDelay)
|
bool ArchNetworkWinsock::setNoDelayOnSocket(ArchSocket s, bool noDelay)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// get old state
|
// get old state
|
||||||
BOOL oflag;
|
BOOL oflag;
|
||||||
|
|
@ -611,7 +611,7 @@ bool ArchNetworkWinsock::setNoDelayOnSocket(ArchSocket s, bool noDelay)
|
||||||
|
|
||||||
bool ArchNetworkWinsock::setReuseAddrOnSocket(ArchSocket s, bool reuse)
|
bool ArchNetworkWinsock::setReuseAddrOnSocket(ArchSocket s, bool reuse)
|
||||||
{
|
{
|
||||||
assert(s != NULL);
|
assert(s != nullptr);
|
||||||
|
|
||||||
// get old state
|
// get old state
|
||||||
BOOL oflag;
|
BOOL oflag;
|
||||||
|
|
@ -643,7 +643,7 @@ std::string ArchNetworkWinsock::getHostName()
|
||||||
|
|
||||||
ArchNetAddress ArchNetworkWinsock::newAnyAddr(EAddressFamily family)
|
ArchNetAddress ArchNetworkWinsock::newAnyAddr(EAddressFamily family)
|
||||||
{
|
{
|
||||||
ArchNetAddressImpl *addr = NULL;
|
ArchNetAddressImpl *addr = nullptr;
|
||||||
switch (family) {
|
switch (family) {
|
||||||
case kINET: {
|
case kINET: {
|
||||||
addr = ArchNetAddressImpl::alloc(sizeof(struct sockaddr_in));
|
addr = ArchNetAddressImpl::alloc(sizeof(struct sockaddr_in));
|
||||||
|
|
@ -671,7 +671,7 @@ ArchNetAddress ArchNetworkWinsock::newAnyAddr(EAddressFamily family)
|
||||||
|
|
||||||
ArchNetAddress ArchNetworkWinsock::copyAddr(ArchNetAddress addr)
|
ArchNetAddress ArchNetworkWinsock::copyAddr(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
ArchNetAddressImpl *copy = ArchNetAddressImpl::alloc(addr->m_len);
|
ArchNetAddressImpl *copy = ArchNetAddressImpl::alloc(addr->m_len);
|
||||||
memcpy(TYPED_ADDR(void, copy), TYPED_ADDR(void, addr), addr->m_len);
|
memcpy(TYPED_ADDR(void, copy), TYPED_ADDR(void, addr), addr->m_len);
|
||||||
|
|
@ -690,7 +690,7 @@ std::vector<ArchNetAddress> ArchNetworkWinsock::nameToAddr(const std::string &na
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
ARCH->lockMutex(m_mutex);
|
ARCH->lockMutex(m_mutex);
|
||||||
if ((ret = getaddrinfo(name.c_str(), NULL, &hints, &pResult)) != 0) {
|
if ((ret = getaddrinfo(name.c_str(), nullptr, &hints, &pResult)) != 0) {
|
||||||
ARCH->unlockMutex(m_mutex);
|
ARCH->unlockMutex(m_mutex);
|
||||||
throwNameError(ret);
|
throwNameError(ret);
|
||||||
}
|
}
|
||||||
|
|
@ -713,21 +713,21 @@ std::vector<ArchNetAddress> ArchNetworkWinsock::nameToAddr(const std::string &na
|
||||||
|
|
||||||
void ArchNetworkWinsock::closeAddr(ArchNetAddress addr)
|
void ArchNetworkWinsock::closeAddr(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
free(addr);
|
free(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ArchNetworkWinsock::addrToName(ArchNetAddress addr)
|
std::string ArchNetworkWinsock::addrToName(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
char host[1024];
|
char host[1024];
|
||||||
char service[20];
|
char service[20];
|
||||||
int ret =
|
int ret =
|
||||||
getnameinfo(TYPED_ADDR(struct sockaddr, addr), addr->m_len, host, sizeof(host), service, sizeof(service), 0);
|
getnameinfo(TYPED_ADDR(struct sockaddr, addr), addr->m_len, host, sizeof(host), service, sizeof(service), 0);
|
||||||
|
|
||||||
if (ret != NULL) {
|
if (ret != 0) {
|
||||||
throwNameError(ret);
|
throwNameError(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -738,7 +738,7 @@ std::string ArchNetworkWinsock::addrToName(ArchNetAddress addr)
|
||||||
|
|
||||||
std::string ArchNetworkWinsock::addrToString(ArchNetAddress addr)
|
std::string ArchNetworkWinsock::addrToString(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case kINET: {
|
||||||
|
|
@ -761,7 +761,7 @@ std::string ArchNetworkWinsock::addrToString(ArchNetAddress addr)
|
||||||
|
|
||||||
IArchNetwork::EAddressFamily ArchNetworkWinsock::getAddrFamily(ArchNetAddress addr)
|
IArchNetwork::EAddressFamily ArchNetworkWinsock::getAddrFamily(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (addr->m_addr.ss_family) {
|
switch (addr->m_addr.ss_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
|
|
@ -777,7 +777,7 @@ IArchNetwork::EAddressFamily ArchNetworkWinsock::getAddrFamily(ArchNetAddress ad
|
||||||
|
|
||||||
void ArchNetworkWinsock::setAddrPort(ArchNetAddress addr, int port)
|
void ArchNetworkWinsock::setAddrPort(ArchNetAddress addr, int port)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case kINET: {
|
||||||
|
|
@ -800,7 +800,7 @@ void ArchNetworkWinsock::setAddrPort(ArchNetAddress addr, int port)
|
||||||
|
|
||||||
int ArchNetworkWinsock::getAddrPort(ArchNetAddress addr)
|
int ArchNetworkWinsock::getAddrPort(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case kINET: {
|
||||||
|
|
@ -821,7 +821,7 @@ int ArchNetworkWinsock::getAddrPort(ArchNetAddress addr)
|
||||||
|
|
||||||
bool ArchNetworkWinsock::isAnyAddr(ArchNetAddress addr)
|
bool ArchNetworkWinsock::isAnyAddr(ArchNetAddress addr)
|
||||||
{
|
{
|
||||||
assert(addr != NULL);
|
assert(addr != nullptr);
|
||||||
|
|
||||||
switch (getAddrFamily(addr)) {
|
switch (getAddrFamily(addr)) {
|
||||||
case kINET: {
|
case kINET: {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ void ArchSleepWindows::sleep(double timeout)
|
||||||
// this is windows so that's pretty certain; we'll get a
|
// this is windows so that's pretty certain; we'll get a
|
||||||
// link error if we're not, though.
|
// link error if we're not, though.
|
||||||
ArchMultithreadWindows *mt = ArchMultithreadWindows::getInstance();
|
ArchMultithreadWindows *mt = ArchMultithreadWindows::getInstance();
|
||||||
if (mt != NULL) {
|
if (mt != nullptr) {
|
||||||
HANDLE cancelEvent = mt->getCancelEventForCurrentThread();
|
HANDLE cancelEvent = mt->getCancelEventForCurrentThread();
|
||||||
WaitForSingleObject(cancelEvent, (DWORD)(1000.0 * timeout));
|
WaitForSingleObject(cancelEvent, (DWORD)(1000.0 * timeout));
|
||||||
if (timeout == 0.0) {
|
if (timeout == 0.0) {
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@
|
||||||
typedef WINMMAPI DWORD(WINAPI *PTimeGetTime)(void);
|
typedef WINMMAPI DWORD(WINAPI *PTimeGetTime)(void);
|
||||||
|
|
||||||
static double s_freq = 0.0;
|
static double s_freq = 0.0;
|
||||||
static HINSTANCE s_mmInstance = NULL;
|
static HINSTANCE s_mmInstance = nullptr;
|
||||||
static PTimeGetTime s_tgt = NULL;
|
static PTimeGetTime s_tgt = nullptr;
|
||||||
|
|
||||||
//
|
//
|
||||||
// ArchTimeWindows
|
// ArchTimeWindows
|
||||||
|
|
@ -34,7 +34,7 @@ static PTimeGetTime s_tgt = NULL;
|
||||||
|
|
||||||
ArchTimeWindows::ArchTimeWindows()
|
ArchTimeWindows::ArchTimeWindows()
|
||||||
{
|
{
|
||||||
assert(s_freq == 0.0 || s_mmInstance == NULL);
|
assert(s_freq == 0.0 || s_mmInstance == nullptr);
|
||||||
|
|
||||||
LARGE_INTEGER freq;
|
LARGE_INTEGER freq;
|
||||||
if (QueryPerformanceFrequency(&freq) && freq.QuadPart != 0) {
|
if (QueryPerformanceFrequency(&freq) && freq.QuadPart != 0) {
|
||||||
|
|
@ -42,7 +42,7 @@ ArchTimeWindows::ArchTimeWindows()
|
||||||
} else {
|
} else {
|
||||||
// load winmm.dll and get timeGetTime
|
// load winmm.dll and get timeGetTime
|
||||||
s_mmInstance = LoadLibrary("winmm");
|
s_mmInstance = LoadLibrary("winmm");
|
||||||
if (s_mmInstance != NULL) {
|
if (s_mmInstance != nullptr) {
|
||||||
s_tgt = (PTimeGetTime)GetProcAddress(s_mmInstance, "timeGetTime");
|
s_tgt = (PTimeGetTime)GetProcAddress(s_mmInstance, "timeGetTime");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -51,10 +51,10 @@ ArchTimeWindows::ArchTimeWindows()
|
||||||
ArchTimeWindows::~ArchTimeWindows()
|
ArchTimeWindows::~ArchTimeWindows()
|
||||||
{
|
{
|
||||||
s_freq = 0.0;
|
s_freq = 0.0;
|
||||||
if (s_mmInstance == NULL) {
|
if (s_mmInstance == nullptr) {
|
||||||
FreeLibrary(static_cast<HMODULE>(s_mmInstance));
|
FreeLibrary(static_cast<HMODULE>(s_mmInstance));
|
||||||
s_tgt = NULL;
|
s_tgt = nullptr;
|
||||||
s_mmInstance = NULL;
|
s_mmInstance = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -65,7 +65,7 @@ double ArchTimeWindows::time()
|
||||||
LARGE_INTEGER c;
|
LARGE_INTEGER c;
|
||||||
QueryPerformanceCounter(&c);
|
QueryPerformanceCounter(&c);
|
||||||
return s_freq * static_cast<double>(c.QuadPart);
|
return s_freq * static_cast<double>(c.QuadPart);
|
||||||
} else if (s_tgt != NULL) {
|
} else if (s_tgt != nullptr) {
|
||||||
return 0.001 * static_cast<double>(s_tgt());
|
return 0.001 * static_cast<double>(s_tgt());
|
||||||
} else {
|
} else {
|
||||||
return 0.001 * static_cast<double>(GetTickCount());
|
return 0.001 * static_cast<double>(GetTickCount());
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@ std::string XArchEvalWindows::eval() const throw()
|
||||||
char *cmsg;
|
char *cmsg;
|
||||||
if (FormatMessage(
|
if (FormatMessage(
|
||||||
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, 0, m_error,
|
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, 0, m_error,
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&cmsg, 0, NULL
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&cmsg, 0, nullptr
|
||||||
) == 0) {
|
) == 0) {
|
||||||
cmsg = NULL;
|
cmsg = nullptr;
|
||||||
return deskflow::string::sprintf("Unknown error, code %d", m_error);
|
return deskflow::string::sprintf("Unknown error, code %d", m_error);
|
||||||
}
|
}
|
||||||
std::string smsg(cmsg);
|
std::string smsg(cmsg);
|
||||||
|
|
@ -200,7 +200,7 @@ std::string XArchEvalWinsock::eval() const throw()
|
||||||
{WSANO_DATA, "The requested name is valid but does not have an IP address"},
|
{WSANO_DATA, "The requested name is valid but does not have an IP address"},
|
||||||
|
|
||||||
// end
|
// end
|
||||||
{0, NULL}
|
{0, nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
for (unsigned int i = 0; s_netErrorCodes[i].m_code != 0; ++i) {
|
for (unsigned int i = 0; s_netErrorCodes[i].m_code != 0; ++i) {
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
// Event
|
// Event
|
||||||
//
|
//
|
||||||
|
|
||||||
Event::Event() : m_type(kUnknown), m_target(NULL), m_data(NULL), m_flags(0), m_dataObject(nullptr)
|
Event::Event() : m_type(kUnknown), m_target(nullptr), m_data(nullptr), m_flags(0), m_dataObject(nullptr)
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ public:
|
||||||
\p target is the intended recipient of the event.
|
\p target is the intended recipient of the event.
|
||||||
\p flags is any combination of \c Flags.
|
\p flags is any combination of \c Flags.
|
||||||
*/
|
*/
|
||||||
Event(Type type, void *target = NULL, void *data = NULL, Flags flags = kNone);
|
Event(Type type, void *target = nullptr, void *data = nullptr, Flags flags = kNone);
|
||||||
|
|
||||||
//! Create \c Event with non-POD data
|
//! Create \c Event with non-POD data
|
||||||
/*!
|
/*!
|
||||||
|
|
|
||||||
|
|
@ -48,23 +48,23 @@ static void interrupt(Arch::ESignal, void *data)
|
||||||
EventQueue::EventQueue()
|
EventQueue::EventQueue()
|
||||||
: m_systemTarget(0),
|
: m_systemTarget(0),
|
||||||
m_nextType(Event::kLast),
|
m_nextType(Event::kLast),
|
||||||
m_typesForClient(NULL),
|
m_typesForClient(nullptr),
|
||||||
m_typesForIStream(NULL),
|
m_typesForIStream(nullptr),
|
||||||
m_typesForIDataSocket(NULL),
|
m_typesForIDataSocket(nullptr),
|
||||||
m_typesForIListenSocket(NULL),
|
m_typesForIListenSocket(nullptr),
|
||||||
m_typesForISocket(NULL),
|
m_typesForISocket(nullptr),
|
||||||
m_typesForOSXScreen(NULL),
|
m_typesForOSXScreen(nullptr),
|
||||||
m_typesForClientListener(NULL),
|
m_typesForClientListener(nullptr),
|
||||||
m_typesForClientProxy(NULL),
|
m_typesForClientProxy(nullptr),
|
||||||
m_typesForClientProxyUnknown(NULL),
|
m_typesForClientProxyUnknown(nullptr),
|
||||||
m_typesForServer(NULL),
|
m_typesForServer(nullptr),
|
||||||
m_typesForServerApp(NULL),
|
m_typesForServerApp(nullptr),
|
||||||
m_typesForIKeyState(NULL),
|
m_typesForIKeyState(nullptr),
|
||||||
m_typesForIPrimaryScreen(NULL),
|
m_typesForIPrimaryScreen(nullptr),
|
||||||
m_typesForIScreen(NULL),
|
m_typesForIScreen(nullptr),
|
||||||
m_typesForClipboard(NULL),
|
m_typesForClipboard(nullptr),
|
||||||
m_typesForFile(NULL),
|
m_typesForFile(nullptr),
|
||||||
m_typesForEi(NULL),
|
m_typesForEi(nullptr),
|
||||||
m_readyMutex(new Mutex),
|
m_readyMutex(new Mutex),
|
||||||
m_readyCondVar(new CondVar<bool>(m_readyMutex, false))
|
m_readyCondVar(new CondVar<bool>(m_readyMutex, false))
|
||||||
{
|
{
|
||||||
|
|
@ -80,8 +80,8 @@ EventQueue::~EventQueue()
|
||||||
delete m_readyCondVar;
|
delete m_readyCondVar;
|
||||||
delete m_readyMutex;
|
delete m_readyMutex;
|
||||||
|
|
||||||
ARCH->setSignalHandler(Arch::kINTERRUPT, NULL, NULL);
|
ARCH->setSignalHandler(Arch::kINTERRUPT, nullptr, nullptr);
|
||||||
ARCH->setSignalHandler(Arch::kTERMINATE, NULL, NULL);
|
ARCH->setSignalHandler(Arch::kTERMINATE, nullptr, nullptr);
|
||||||
ARCH->closeMutex(m_mutex);
|
ARCH->closeMutex(m_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -169,7 +169,7 @@ void EventQueue::adoptBuffer(IEventQueueBuffer *buffer)
|
||||||
|
|
||||||
// use new buffer
|
// use new buffer
|
||||||
m_buffer = buffer;
|
m_buffer = buffer;
|
||||||
if (m_buffer == NULL) {
|
if (m_buffer == nullptr) {
|
||||||
m_buffer = new SimpleEventQueueBuffer;
|
m_buffer = new SimpleEventQueueBuffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -235,10 +235,10 @@ bool EventQueue::dispatchEvent(const Event &event)
|
||||||
{
|
{
|
||||||
void *target = event.getTarget();
|
void *target = event.getTarget();
|
||||||
IEventJob *job = getHandler(event.getType(), target);
|
IEventJob *job = getHandler(event.getType(), target);
|
||||||
if (job == NULL) {
|
if (job == nullptr) {
|
||||||
job = getHandler(Event::kUnknown, target);
|
job = getHandler(Event::kUnknown, target);
|
||||||
}
|
}
|
||||||
if (job != NULL) {
|
if (job != nullptr) {
|
||||||
job->run(event);
|
job->run(event);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -288,7 +288,7 @@ EventQueueTimer *EventQueue::newTimer(double duration, void *target)
|
||||||
assert(duration > 0.0);
|
assert(duration > 0.0);
|
||||||
|
|
||||||
EventQueueTimer *timer = m_buffer->newTimer(duration, false);
|
EventQueueTimer *timer = m_buffer->newTimer(duration, false);
|
||||||
if (target == NULL) {
|
if (target == nullptr) {
|
||||||
target = timer;
|
target = timer;
|
||||||
}
|
}
|
||||||
ArchMutexLock lock(m_mutex);
|
ArchMutexLock lock(m_mutex);
|
||||||
|
|
@ -305,7 +305,7 @@ EventQueueTimer *EventQueue::newOneShotTimer(double duration, void *target)
|
||||||
assert(duration > 0.0);
|
assert(duration > 0.0);
|
||||||
|
|
||||||
EventQueueTimer *timer = m_buffer->newTimer(duration, true);
|
EventQueueTimer *timer = m_buffer->newTimer(duration, true);
|
||||||
if (target == NULL) {
|
if (target == nullptr) {
|
||||||
target = timer;
|
target = timer;
|
||||||
}
|
}
|
||||||
ArchMutexLock lock(m_mutex);
|
ArchMutexLock lock(m_mutex);
|
||||||
|
|
@ -343,7 +343,7 @@ void EventQueue::adoptHandler(Event::Type type, void *target, IEventJob *handler
|
||||||
|
|
||||||
void EventQueue::removeHandler(Event::Type type, void *target)
|
void EventQueue::removeHandler(Event::Type type, void *target)
|
||||||
{
|
{
|
||||||
IEventJob *handler = NULL;
|
IEventJob *handler = nullptr;
|
||||||
{
|
{
|
||||||
ArchMutexLock lock(m_mutex);
|
ArchMutexLock lock(m_mutex);
|
||||||
HandlerTable::iterator index = m_handlers.find(target);
|
HandlerTable::iterator index = m_handlers.find(target);
|
||||||
|
|
@ -397,7 +397,7 @@ IEventJob *EventQueue::getHandler(Event::Type type, void *target) const
|
||||||
return index2->second;
|
return index2->second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t EventQueue::saveEvent(const Event &event)
|
uint32_t EventQueue::saveEvent(const Event &event)
|
||||||
|
|
|
||||||
|
|
@ -171,7 +171,7 @@ private:
|
||||||
type_##Events& \
|
type_##Events& \
|
||||||
EventQueue::for##type_() \
|
EventQueue::for##type_() \
|
||||||
{ \
|
{ \
|
||||||
if (m_typesFor##type_ == NULL) { \
|
if (m_typesFor##type_ == nullptr) { \
|
||||||
m_typesFor##type_ = new type_##Events(); \
|
m_typesFor##type_ = new type_##Events(); \
|
||||||
m_typesFor##type_->setEvents(dynamic_cast<IEventQueue *>(this)); \
|
m_typesFor##type_->setEvents(dynamic_cast<IEventQueue *>(this)); \
|
||||||
} \
|
} \
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,13 @@
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
EventTypes::EventTypes() : m_events(NULL)
|
EventTypes::EventTypes() : m_events(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
IEventQueue *EventTypes::getEvents() const
|
IEventQueue *EventTypes::getEvents() const
|
||||||
{
|
{
|
||||||
assert(m_events != NULL);
|
assert(m_events != nullptr);
|
||||||
return m_events;
|
return m_events;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ FunctionEventJob::~FunctionEventJob()
|
||||||
|
|
||||||
void FunctionEventJob::run(const Event &event)
|
void FunctionEventJob::run(const Event &event)
|
||||||
{
|
{
|
||||||
if (m_func != NULL) {
|
if (m_func != nullptr) {
|
||||||
m_func(event, m_arg);
|
m_func(event, m_arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ class FunctionEventJob : public IEventJob
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! run() invokes \c func(arg)
|
//! run() invokes \c func(arg)
|
||||||
FunctionEventJob(void (*func)(const Event &, void *), void *arg = NULL);
|
FunctionEventJob(void (*func)(const Event &, void *), void *arg = nullptr);
|
||||||
~FunctionEventJob() override;
|
~FunctionEventJob() override;
|
||||||
|
|
||||||
// IEventJob overrides
|
// IEventJob overrides
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ FunctionJob::~FunctionJob()
|
||||||
|
|
||||||
void FunctionJob::run()
|
void FunctionJob::run()
|
||||||
{
|
{
|
||||||
if (m_func != NULL) {
|
if (m_func != nullptr) {
|
||||||
m_func(m_arg);
|
m_func(m_arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ class FunctionJob : public IJob
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! run() invokes \c func(arg)
|
//! run() invokes \c func(arg)
|
||||||
FunctionJob(void (*func)(void *), void *arg = NULL);
|
FunctionJob(void (*func)(void *), void *arg = nullptr);
|
||||||
~FunctionJob() override;
|
~FunctionJob() override;
|
||||||
|
|
||||||
// IJob overrides
|
// IJob overrides
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ public:
|
||||||
is returned the data points to a \c TimerEvent. The client must pass
|
is returned the data points to a \c TimerEvent. The client must pass
|
||||||
the returned timer to \c deleteTimer() (whether or not the timer has
|
the returned timer to \c deleteTimer() (whether or not the timer has
|
||||||
expired) to release the timer. The returned timer event uses the
|
expired) to release the timer. The returned timer event uses the
|
||||||
given \p target. If \p target is NULL it uses the returned timer as
|
given \p target. If \p target is nullptr it uses the returned timer as
|
||||||
the target.
|
the target.
|
||||||
|
|
||||||
Events for a single timer don't accumulate in the queue, even if the
|
Events for a single timer don't accumulate in the queue, even if the
|
||||||
|
|
@ -117,7 +117,7 @@ public:
|
||||||
The c_count member of the \c TimerEvent is always 1. The client
|
The c_count member of the \c TimerEvent is always 1. The client
|
||||||
must pass the returned timer to \c deleteTimer() (whether or not the
|
must pass the returned timer to \c deleteTimer() (whether or not the
|
||||||
timer has expired) to release the timer. The returned timer event
|
timer has expired) to release the timer. The returned timer event
|
||||||
uses the given \p target. If \p target is NULL it uses the returned
|
uses the given \p target. If \p target is nullptr it uses the returned
|
||||||
timer as the target.
|
timer as the target.
|
||||||
*/
|
*/
|
||||||
virtual EventQueueTimer *newOneShotTimer(double duration, void *target) = 0;
|
virtual EventQueueTimer *newOneShotTimer(double duration, void *target) = 0;
|
||||||
|
|
@ -181,7 +181,7 @@ public:
|
||||||
//! Get an event handler
|
//! Get an event handler
|
||||||
/*!
|
/*!
|
||||||
Finds and returns the event handler for the \p type, \p target pair
|
Finds and returns the event handler for the \p type, \p target pair
|
||||||
if it exists, otherwise it returns NULL.
|
if it exists, otherwise it returns nullptr.
|
||||||
*/
|
*/
|
||||||
virtual IEventJob *getHandler(Event::Type type, void *target) const = 0;
|
virtual IEventJob *getHandler(Event::Type type, void *target) const = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ public:
|
||||||
/*!
|
/*!
|
||||||
Create and return a timer object. The object is opaque and is
|
Create and return a timer object. The object is opaque and is
|
||||||
used only by the buffer but it must be a valid object (i.e.
|
used only by the buffer but it must be a valid object (i.e.
|
||||||
not NULL).
|
not nullptr).
|
||||||
*/
|
*/
|
||||||
virtual EventQueueTimer *newTimer(double duration, bool oneShot) const = 0;
|
virtual EventQueueTimer *newTimer(double duration, bool oneShot) const = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,12 +115,12 @@ std::vector<char> makeMessage(const char *filename, int lineNumber, const char *
|
||||||
// Log
|
// Log
|
||||||
//
|
//
|
||||||
|
|
||||||
Log *Log::s_log = NULL;
|
Log *Log::s_log = nullptr;
|
||||||
|
|
||||||
Log::Log(bool singleton)
|
Log::Log(bool singleton)
|
||||||
{
|
{
|
||||||
if (singleton) {
|
if (singleton) {
|
||||||
assert(s_log == NULL);
|
assert(s_log == nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create mutex for multithread safe operation
|
// create mutex for multithread safe operation
|
||||||
|
|
@ -154,7 +154,7 @@ Log::~Log()
|
||||||
|
|
||||||
Log *Log::getInstance()
|
Log *Log::getInstance()
|
||||||
{
|
{
|
||||||
assert(s_log != NULL);
|
assert(s_log != nullptr);
|
||||||
return s_log;
|
return s_log;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -210,7 +210,7 @@ void Log::print(const char *file, int line, const char *fmt, ...)
|
||||||
|
|
||||||
void Log::insert(ILogOutputter *adoptedOutputter, bool alwaysAtHead)
|
void Log::insert(ILogOutputter *adoptedOutputter, bool alwaysAtHead)
|
||||||
{
|
{
|
||||||
assert(adoptedOutputter != NULL);
|
assert(adoptedOutputter != nullptr);
|
||||||
|
|
||||||
ArchMutexLock lock(m_mutex);
|
ArchMutexLock lock(m_mutex);
|
||||||
if (alwaysAtHead) {
|
if (alwaysAtHead) {
|
||||||
|
|
@ -241,7 +241,7 @@ void Log::pop_front(bool alwaysAtHead)
|
||||||
|
|
||||||
bool Log::setFilter(const char *maxPriority)
|
bool Log::setFilter(const char *maxPriority)
|
||||||
{
|
{
|
||||||
if (maxPriority != NULL) {
|
if (maxPriority != nullptr) {
|
||||||
for (int i = 0; i < g_numPriority; ++i) {
|
for (int i = 0; i < g_numPriority; ++i) {
|
||||||
if (strcmp(maxPriority, g_priority[i]) == 0) {
|
if (strcmp(maxPriority, g_priority[i]) == 0) {
|
||||||
setFilter(i);
|
setFilter(i);
|
||||||
|
|
@ -268,7 +268,7 @@ int Log::getFilter() const
|
||||||
void Log::output(ELevel priority, char *msg)
|
void Log::output(ELevel priority, char *msg)
|
||||||
{
|
{
|
||||||
assert(priority >= -1 && priority < g_numPriority);
|
assert(priority >= -1 && priority < g_numPriority);
|
||||||
assert(msg != NULL);
|
assert(msg != nullptr);
|
||||||
if (!msg)
|
if (!msg)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ public:
|
||||||
Set the filter. Messages below this priority are discarded.
|
Set the filter. Messages below this priority are discarded.
|
||||||
The default priority is 4 (INFO) (unless built without NDEBUG
|
The default priority is 4 (INFO) (unless built without NDEBUG
|
||||||
in which case it's 5 (DEBUG)). setFilter(const char*) returns
|
in which case it's 5 (DEBUG)). setFilter(const char*) returns
|
||||||
true if the priority \c name was recognized; if \c name is NULL
|
true if the priority \c name was recognized; if \c name is nullptr
|
||||||
then it simply returns true.
|
then it simply returns true.
|
||||||
*/
|
*/
|
||||||
bool setFilter(const char *name);
|
bool setFilter(const char *name);
|
||||||
|
|
@ -94,7 +94,7 @@ public:
|
||||||
//! Print a log message
|
//! Print a log message
|
||||||
/*!
|
/*!
|
||||||
Print a log message using the printf-like \c format and arguments
|
Print a log message using the printf-like \c format and arguments
|
||||||
preceded by the filename and line number. If \c file is NULL then
|
preceded by the filename and line number. If \c file is nullptr then
|
||||||
neither the file nor the line are printed.
|
neither the file nor the line are printed.
|
||||||
*/
|
*/
|
||||||
void print(const char *file, int line, const char *format, ...);
|
void print(const char *file, int line, const char *format, ...);
|
||||||
|
|
@ -182,7 +182,7 @@ otherwise it expands to a call that doesn't.
|
||||||
#define LOGC(_a1, _a2) \
|
#define LOGC(_a1, _a2) \
|
||||||
if (_a1) \
|
if (_a1) \
|
||||||
CLOG->print _a2
|
CLOG->print _a2
|
||||||
#define CLOG_TRACE NULL, 0,
|
#define CLOG_TRACE nullptr, 0,
|
||||||
#else
|
#else
|
||||||
#define LOG(_a1) CLOG->print _a1
|
#define LOG(_a1) CLOG->print _a1
|
||||||
#define LOGC(_a1, _a2) \
|
#define LOGC(_a1, _a2) \
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ bool SystemLogOutputter::write(ELevel level, const char *msg)
|
||||||
// SystemLogger
|
// SystemLogger
|
||||||
//
|
//
|
||||||
|
|
||||||
SystemLogger::SystemLogger(const char *title, bool blockConsole) : m_stop(NULL)
|
SystemLogger::SystemLogger(const char *title, bool blockConsole) : m_stop(nullptr)
|
||||||
{
|
{
|
||||||
// redirect log messages
|
// redirect log messages
|
||||||
if (blockConsole) {
|
if (blockConsole) {
|
||||||
|
|
@ -144,7 +144,7 @@ SystemLogger::~SystemLogger()
|
||||||
{
|
{
|
||||||
CLOG->remove(m_syslog);
|
CLOG->remove(m_syslog);
|
||||||
delete m_syslog;
|
delete m_syslog;
|
||||||
if (m_stop != NULL) {
|
if (m_stop != nullptr) {
|
||||||
CLOG->remove(m_stop);
|
CLOG->remove(m_stop);
|
||||||
delete m_stop;
|
delete m_stop;
|
||||||
}
|
}
|
||||||
|
|
@ -165,7 +165,7 @@ FileLogOutputter::~FileLogOutputter()
|
||||||
|
|
||||||
void FileLogOutputter::setLogFilename(const char *logFile)
|
void FileLogOutputter::setLogFilename(const char *logFile)
|
||||||
{
|
{
|
||||||
assert(logFile != NULL);
|
assert(logFile != nullptr);
|
||||||
m_fileName = logFile;
|
m_fileName = logFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ std::wstring path(const std::string &filePath)
|
||||||
{
|
{
|
||||||
std::wstring result;
|
std::wstring result;
|
||||||
|
|
||||||
auto length = MultiByteToWideChar(CP_UTF8, 0, filePath.c_str(), static_cast<int>(filePath.length()), NULL, 0);
|
auto length = MultiByteToWideChar(CP_UTF8, 0, filePath.c_str(), static_cast<int>(filePath.length()), nullptr, 0);
|
||||||
if (length > 0) {
|
if (length > 0) {
|
||||||
result.resize(length);
|
result.resize(length);
|
||||||
MultiByteToWideChar(CP_UTF8, 0, filePath.c_str(), static_cast<int>(filePath.length()), &result[0], length);
|
MultiByteToWideChar(CP_UTF8, 0, filePath.c_str(), static_cast<int>(filePath.length()), &result[0], length);
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ std::string sprintf(const char *fmt, ...)
|
||||||
char *buffer = tmp;
|
char *buffer = tmp;
|
||||||
int len = (int)(sizeof(tmp) / sizeof(tmp[0]));
|
int len = (int)(sizeof(tmp) / sizeof(tmp[0]));
|
||||||
std::string result;
|
std::string result;
|
||||||
while (buffer != NULL) {
|
while (buffer != nullptr) {
|
||||||
// try printing into the buffer
|
// try printing into the buffer
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
|
|
@ -131,7 +131,7 @@ std::string sprintf(const char *fmt, ...)
|
||||||
if (buffer != tmp) {
|
if (buffer != tmp) {
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
}
|
}
|
||||||
buffer = NULL;
|
buffer = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ template <class T> class TMethodEventJob : public IEventJob
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! run(event) invokes \c object->method(event, arg)
|
//! run(event) invokes \c object->method(event, arg)
|
||||||
TMethodEventJob(T *object, void (T::*method)(const Event &, void *), void *arg = NULL);
|
TMethodEventJob(T *object, void (T::*method)(const Event &, void *), void *arg = nullptr);
|
||||||
~TMethodEventJob() override;
|
~TMethodEventJob() override;
|
||||||
|
|
||||||
// IJob overrides
|
// IJob overrides
|
||||||
|
|
@ -45,7 +45,7 @@ template <class T> inline TMethodEventJob<T>::~TMethodEventJob()
|
||||||
|
|
||||||
template <class T> inline void TMethodEventJob<T>::run(const Event &event)
|
template <class T> inline void TMethodEventJob<T>::run(const Event &event)
|
||||||
{
|
{
|
||||||
if (m_object != NULL) {
|
if (m_object != nullptr) {
|
||||||
(m_object->*m_method)(event, m_arg);
|
(m_object->*m_method)(event, m_arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ template <class T> class TMethodJob : public IJob
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! run() invokes \c object->method(arg)
|
//! run() invokes \c object->method(arg)
|
||||||
TMethodJob(T *object, void (T::*method)(void *), void *arg = NULL);
|
TMethodJob(T *object, void (T::*method)(void *), void *arg = nullptr);
|
||||||
~TMethodJob() override;
|
~TMethodJob() override;
|
||||||
|
|
||||||
// IJob overrides
|
// IJob overrides
|
||||||
|
|
@ -45,7 +45,7 @@ template <class T> inline TMethodJob<T>::~TMethodJob()
|
||||||
|
|
||||||
template <class T> inline void TMethodJob<T>::run()
|
template <class T> inline void TMethodJob<T>::run()
|
||||||
{
|
{
|
||||||
if (m_object != NULL) {
|
if (m_object != nullptr) {
|
||||||
(m_object->*m_method)(m_arg);
|
(m_object->*m_method)(m_arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,14 +52,14 @@ inline static uint32_t decode32(const uint8_t *n, bool byteSwapped)
|
||||||
|
|
||||||
inline static void resetError(bool *errors)
|
inline static void resetError(bool *errors)
|
||||||
{
|
{
|
||||||
if (errors != NULL) {
|
if (errors != nullptr) {
|
||||||
*errors = false;
|
*errors = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static void setError(bool *errors)
|
inline static void setError(bool *errors)
|
||||||
{
|
{
|
||||||
if (errors != NULL) {
|
if (errors != nullptr) {
|
||||||
*errors = true;
|
*errors = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -204,7 +204,7 @@ std::string Unicode::UTF8ToText(const std::string &src, bool *errors)
|
||||||
wchar_t *tmp = UTF8ToWideChar(src, size, errors);
|
wchar_t *tmp = UTF8ToWideChar(src, size, errors);
|
||||||
|
|
||||||
// convert string to multibyte
|
// convert string to multibyte
|
||||||
int len = ARCH->convStringWCToMB(NULL, tmp, size, errors);
|
int len = ARCH->convStringWCToMB(nullptr, tmp, size, errors);
|
||||||
char *mbs = new char[len + 1];
|
char *mbs = new char[len + 1];
|
||||||
ARCH->convStringWCToMB(mbs, tmp, size, errors);
|
ARCH->convStringWCToMB(mbs, tmp, size, errors);
|
||||||
std::string text(mbs, len);
|
std::string text(mbs, len);
|
||||||
|
|
@ -263,7 +263,7 @@ std::string Unicode::textToUTF8(const std::string &src, bool *errors, IArchStrin
|
||||||
|
|
||||||
// convert string to wide characters
|
// convert string to wide characters
|
||||||
uint32_t n = (uint32_t)src.size();
|
uint32_t n = (uint32_t)src.size();
|
||||||
int len = ARCH->convStringMBToWC(NULL, src.c_str(), n, errors);
|
int len = ARCH->convStringMBToWC(nullptr, src.c_str(), n, errors);
|
||||||
wchar_t *wcs = new wchar_t[len + 1];
|
wchar_t *wcs = new wchar_t[len + 1];
|
||||||
ARCH->convStringMBToWC(wcs, src.c_str(), n, errors);
|
ARCH->convStringMBToWC(wcs, src.c_str(), n, errors);
|
||||||
|
|
||||||
|
|
@ -445,7 +445,7 @@ std::string Unicode::doUTF16ToUTF8(const uint8_t *data, uint32_t n, bool *errors
|
||||||
} else if (n == 1) {
|
} else if (n == 1) {
|
||||||
// error -- missing second word
|
// error -- missing second word
|
||||||
setError(errors);
|
setError(errors);
|
||||||
toUTF8(dst, s_replacement, NULL);
|
toUTF8(dst, s_replacement, nullptr);
|
||||||
} else if (c >= 0x0000d800 && c <= 0x0000dbff) {
|
} else if (c >= 0x0000d800 && c <= 0x0000dbff) {
|
||||||
data += 2;
|
data += 2;
|
||||||
--n;
|
--n;
|
||||||
|
|
@ -453,7 +453,7 @@ std::string Unicode::doUTF16ToUTF8(const uint8_t *data, uint32_t n, bool *errors
|
||||||
if (c2 < 0x0000dc00 || c2 > 0x0000dfff) {
|
if (c2 < 0x0000dc00 || c2 > 0x0000dfff) {
|
||||||
// error -- [d800,dbff] not followed by [dc00,dfff]
|
// error -- [d800,dbff] not followed by [dc00,dfff]
|
||||||
setError(errors);
|
setError(errors);
|
||||||
toUTF8(dst, s_replacement, NULL);
|
toUTF8(dst, s_replacement, nullptr);
|
||||||
} else {
|
} else {
|
||||||
c = (((c - 0x0000d800) << 10) | (c2 - 0x0000dc00)) + 0x00010000;
|
c = (((c - 0x0000d800) << 10) | (c2 - 0x0000dc00)) + 0x00010000;
|
||||||
toUTF8(dst, c, errors);
|
toUTF8(dst, c, errors);
|
||||||
|
|
@ -461,7 +461,7 @@ std::string Unicode::doUTF16ToUTF8(const uint8_t *data, uint32_t n, bool *errors
|
||||||
} else {
|
} else {
|
||||||
// error -- [dc00,dfff] without leading [d800,dbff]
|
// error -- [dc00,dfff] without leading [d800,dbff]
|
||||||
setError(errors);
|
setError(errors);
|
||||||
toUTF8(dst, s_replacement, NULL);
|
toUTF8(dst, s_replacement, nullptr);
|
||||||
}
|
}
|
||||||
data += 2;
|
data += 2;
|
||||||
--n;
|
--n;
|
||||||
|
|
@ -512,7 +512,7 @@ std::string Unicode::doUTF32ToUTF8(const uint8_t *data, uint32_t n, bool *errors
|
||||||
|
|
||||||
uint32_t Unicode::fromUTF8(const uint8_t *&data, uint32_t &n)
|
uint32_t Unicode::fromUTF8(const uint8_t *&data, uint32_t &n)
|
||||||
{
|
{
|
||||||
assert(data != NULL);
|
assert(data != nullptr);
|
||||||
assert(n != 0);
|
assert(n != 0);
|
||||||
|
|
||||||
// compute character encoding length, checking for overlong
|
// compute character encoding length, checking for overlong
|
||||||
|
|
|
||||||
|
|
@ -31,76 +31,76 @@ public:
|
||||||
|
|
||||||
//! Convert from UTF-8 to UCS-2 encoding
|
//! Convert from UTF-8 to UCS-2 encoding
|
||||||
/*!
|
/*!
|
||||||
Convert from UTF-8 to UCS-2. If errors is not NULL then *errors
|
Convert from UTF-8 to UCS-2. If errors is not nullptr then *errors
|
||||||
is set to true iff any character could not be encoded in UCS-2.
|
is set to true iff any character could not be encoded in UCS-2.
|
||||||
Decoding errors do not set *errors.
|
Decoding errors do not set *errors.
|
||||||
*/
|
*/
|
||||||
static std::string UTF8ToUCS2(const std::string &, bool *errors = NULL);
|
static std::string UTF8ToUCS2(const std::string &, bool *errors = nullptr);
|
||||||
|
|
||||||
//! Convert from UTF-8 to UCS-4 encoding
|
//! Convert from UTF-8 to UCS-4 encoding
|
||||||
/*!
|
/*!
|
||||||
Convert from UTF-8 to UCS-4. If errors is not NULL then *errors
|
Convert from UTF-8 to UCS-4. If errors is not nullptr then *errors
|
||||||
is set to true iff any character could not be encoded in UCS-4.
|
is set to true iff any character could not be encoded in UCS-4.
|
||||||
Decoding errors do not set *errors.
|
Decoding errors do not set *errors.
|
||||||
*/
|
*/
|
||||||
static std::string UTF8ToUCS4(const std::string &, bool *errors = NULL);
|
static std::string UTF8ToUCS4(const std::string &, bool *errors = nullptr);
|
||||||
|
|
||||||
//! Convert from UTF-8 to UTF-16 encoding
|
//! Convert from UTF-8 to UTF-16 encoding
|
||||||
/*!
|
/*!
|
||||||
Convert from UTF-8 to UTF-16. If errors is not NULL then *errors
|
Convert from UTF-8 to UTF-16. If errors is not nullptr then *errors
|
||||||
is set to true iff any character could not be encoded in UTF-16.
|
is set to true iff any character could not be encoded in UTF-16.
|
||||||
Decoding errors do not set *errors.
|
Decoding errors do not set *errors.
|
||||||
*/
|
*/
|
||||||
static std::string UTF8ToUTF16(const std::string &, bool *errors = NULL);
|
static std::string UTF8ToUTF16(const std::string &, bool *errors = nullptr);
|
||||||
|
|
||||||
//! Convert from UTF-8 to UTF-32 encoding
|
//! Convert from UTF-8 to UTF-32 encoding
|
||||||
/*!
|
/*!
|
||||||
Convert from UTF-8 to UTF-32. If errors is not NULL then *errors
|
Convert from UTF-8 to UTF-32. If errors is not nullptr then *errors
|
||||||
is set to true iff any character could not be encoded in UTF-32.
|
is set to true iff any character could not be encoded in UTF-32.
|
||||||
Decoding errors do not set *errors.
|
Decoding errors do not set *errors.
|
||||||
*/
|
*/
|
||||||
static std::string UTF8ToUTF32(const std::string &, bool *errors = NULL);
|
static std::string UTF8ToUTF32(const std::string &, bool *errors = nullptr);
|
||||||
|
|
||||||
//! Convert from UTF-8 to the current locale encoding
|
//! Convert from UTF-8 to the current locale encoding
|
||||||
/*!
|
/*!
|
||||||
Convert from UTF-8 to the current locale encoding. If errors is not
|
Convert from UTF-8 to the current locale encoding. If errors is not
|
||||||
NULL then *errors is set to true iff any character could not be encoded.
|
nullptr then *errors is set to true iff any character could not be encoded.
|
||||||
Decoding errors do not set *errors.
|
Decoding errors do not set *errors.
|
||||||
*/
|
*/
|
||||||
static std::string UTF8ToText(const std::string &, bool *errors = NULL);
|
static std::string UTF8ToText(const std::string &, bool *errors = nullptr);
|
||||||
|
|
||||||
//! Convert from UCS-2 to UTF-8
|
//! Convert from UCS-2 to UTF-8
|
||||||
/*!
|
/*!
|
||||||
Convert from UCS-2 to UTF-8. If errors is not NULL then *errors is
|
Convert from UCS-2 to UTF-8. If errors is not nullptr then *errors is
|
||||||
set to true iff any character could not be decoded.
|
set to true iff any character could not be decoded.
|
||||||
*/
|
*/
|
||||||
static std::string UCS2ToUTF8(const std::string &, bool *errors = NULL);
|
static std::string UCS2ToUTF8(const std::string &, bool *errors = nullptr);
|
||||||
|
|
||||||
//! Convert from UCS-4 to UTF-8
|
//! Convert from UCS-4 to UTF-8
|
||||||
/*!
|
/*!
|
||||||
Convert from UCS-4 to UTF-8. If errors is not NULL then *errors is
|
Convert from UCS-4 to UTF-8. If errors is not nullptr then *errors is
|
||||||
set to true iff any character could not be decoded.
|
set to true iff any character could not be decoded.
|
||||||
*/
|
*/
|
||||||
static std::string UCS4ToUTF8(const std::string &, bool *errors = NULL);
|
static std::string UCS4ToUTF8(const std::string &, bool *errors = nullptr);
|
||||||
|
|
||||||
//! Convert from UTF-16 to UTF-8
|
//! Convert from UTF-16 to UTF-8
|
||||||
/*!
|
/*!
|
||||||
Convert from UTF-16 to UTF-8. If errors is not NULL then *errors is
|
Convert from UTF-16 to UTF-8. If errors is not nullptr then *errors is
|
||||||
set to true iff any character could not be decoded.
|
set to true iff any character could not be decoded.
|
||||||
*/
|
*/
|
||||||
static std::string UTF16ToUTF8(const std::string &, bool *errors = NULL);
|
static std::string UTF16ToUTF8(const std::string &, bool *errors = nullptr);
|
||||||
|
|
||||||
//! Convert from UTF-32 to UTF-8
|
//! Convert from UTF-32 to UTF-8
|
||||||
/*!
|
/*!
|
||||||
Convert from UTF-32 to UTF-8. If errors is not NULL then *errors is
|
Convert from UTF-32 to UTF-8. If errors is not nullptr then *errors is
|
||||||
set to true iff any character could not be decoded.
|
set to true iff any character could not be decoded.
|
||||||
*/
|
*/
|
||||||
static std::string UTF32ToUTF8(const std::string &, bool *errors = NULL);
|
static std::string UTF32ToUTF8(const std::string &, bool *errors = nullptr);
|
||||||
|
|
||||||
//! Convert from the current locale encoding to UTF-8
|
//! Convert from the current locale encoding to UTF-8
|
||||||
/*!
|
/*!
|
||||||
Convert from the current locale encoding to UTF-8. If errors is not
|
Convert from the current locale encoding to UTF-8. If errors is not
|
||||||
NULL then *errors is set to true iff any character could not be decoded.
|
nullptr then *errors is set to true iff any character could not be decoded.
|
||||||
*/
|
*/
|
||||||
static std::string textToUTF8(
|
static std::string textToUTF8(
|
||||||
const std::string &, bool *errors = nullptr,
|
const std::string &, bool *errors = nullptr,
|
||||||
|
|
|
||||||
|
|
@ -55,9 +55,9 @@ Client::Client(
|
||||||
m_serverAddress(address),
|
m_serverAddress(address),
|
||||||
m_socketFactory(socketFactory),
|
m_socketFactory(socketFactory),
|
||||||
m_screen(screen),
|
m_screen(screen),
|
||||||
m_stream(NULL),
|
m_stream(nullptr),
|
||||||
m_timer(NULL),
|
m_timer(nullptr),
|
||||||
m_server(NULL),
|
m_server(nullptr),
|
||||||
m_ready(false),
|
m_ready(false),
|
||||||
m_active(false),
|
m_active(false),
|
||||||
m_suspended(false),
|
m_suspended(false),
|
||||||
|
|
@ -70,8 +70,8 @@ Client::Client(
|
||||||
m_enableClipboard(true),
|
m_enableClipboard(true),
|
||||||
m_maximumClipboardSize(INT_MAX)
|
m_maximumClipboardSize(INT_MAX)
|
||||||
{
|
{
|
||||||
assert(m_socketFactory != NULL);
|
assert(m_socketFactory != nullptr);
|
||||||
assert(m_screen != NULL);
|
assert(m_screen != nullptr);
|
||||||
|
|
||||||
// register suspend/resume event handlers
|
// register suspend/resume event handlers
|
||||||
m_events->adoptHandler(
|
m_events->adoptHandler(
|
||||||
|
|
@ -123,7 +123,7 @@ Client::~Client()
|
||||||
|
|
||||||
void Client::connect(size_t addressIndex)
|
void Client::connect(size_t addressIndex)
|
||||||
{
|
{
|
||||||
if (m_stream != NULL) {
|
if (m_stream != nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (m_suspended) {
|
if (m_suspended) {
|
||||||
|
|
@ -179,7 +179,7 @@ void Client::disconnect(const char *msg)
|
||||||
if (msg) {
|
if (msg) {
|
||||||
sendConnectionFailedEvent(msg);
|
sendConnectionFailedEvent(msg);
|
||||||
} else {
|
} else {
|
||||||
sendEvent(m_events->forClient().disconnected(), NULL);
|
sendEvent(m_events->forClient().disconnected(), nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -199,17 +199,17 @@ void Client::handshakeComplete()
|
||||||
{
|
{
|
||||||
m_ready = true;
|
m_ready = true;
|
||||||
m_screen->enable();
|
m_screen->enable();
|
||||||
sendEvent(m_events->forClient().connected(), NULL);
|
sendEvent(m_events->forClient().connected(), nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::isConnected() const
|
bool Client::isConnected() const
|
||||||
{
|
{
|
||||||
return (m_server != NULL);
|
return (m_server != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::isConnecting() const
|
bool Client::isConnecting() const
|
||||||
{
|
{
|
||||||
return (m_timer != NULL);
|
return (m_timer != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkAddress Client::getServerAddress() const
|
NetworkAddress Client::getServerAddress() const
|
||||||
|
|
@ -373,8 +373,8 @@ std::string Client::getName() const
|
||||||
void Client::sendClipboard(ClipboardID id)
|
void Client::sendClipboard(ClipboardID id)
|
||||||
{
|
{
|
||||||
// note -- m_mutex must be locked on entry
|
// note -- m_mutex must be locked on entry
|
||||||
assert(m_screen != NULL);
|
assert(m_screen != nullptr);
|
||||||
assert(m_server != NULL);
|
assert(m_server != nullptr);
|
||||||
|
|
||||||
// get clipboard data. set the clipboard time to the last
|
// get clipboard data. set the clipboard time to the last
|
||||||
// clipboard time before getting the data from the screen
|
// clipboard time before getting the data from the screen
|
||||||
|
|
@ -427,7 +427,7 @@ void Client::sendFileChunk(const void *data)
|
||||||
{
|
{
|
||||||
FileChunk *chunk = static_cast<FileChunk *>(const_cast<void *>(data));
|
FileChunk *chunk = static_cast<FileChunk *>(const_cast<void *>(data));
|
||||||
LOG((CLOG_DEBUG1 "send file chunk"));
|
LOG((CLOG_DEBUG1 "send file chunk"));
|
||||||
assert(m_server != NULL);
|
assert(m_server != nullptr);
|
||||||
|
|
||||||
// relay
|
// relay
|
||||||
m_server->fileChunkSending(chunk->m_chunk[0], &chunk->m_chunk[1], chunk->m_dataSize);
|
m_server->fileChunkSending(chunk->m_chunk[0], &chunk->m_chunk[1], chunk->m_dataSize);
|
||||||
|
|
@ -435,7 +435,7 @@ void Client::sendFileChunk(const void *data)
|
||||||
|
|
||||||
void Client::setupConnecting()
|
void Client::setupConnecting()
|
||||||
{
|
{
|
||||||
assert(m_stream != NULL);
|
assert(m_stream != nullptr);
|
||||||
|
|
||||||
if (m_args.m_enableCrypto) {
|
if (m_args.m_enableCrypto) {
|
||||||
m_events->adoptHandler(
|
m_events->adoptHandler(
|
||||||
|
|
@ -457,7 +457,7 @@ void Client::setupConnecting()
|
||||||
|
|
||||||
void Client::setupConnection()
|
void Client::setupConnection()
|
||||||
{
|
{
|
||||||
assert(m_stream != NULL);
|
assert(m_stream != nullptr);
|
||||||
|
|
||||||
m_events->adoptHandler(
|
m_events->adoptHandler(
|
||||||
m_events->forISocket().disconnected(), m_stream->getEventTarget(),
|
m_events->forISocket().disconnected(), m_stream->getEventTarget(),
|
||||||
|
|
@ -488,7 +488,7 @@ void Client::setupConnection()
|
||||||
|
|
||||||
void Client::setupScreen()
|
void Client::setupScreen()
|
||||||
{
|
{
|
||||||
assert(m_server == NULL);
|
assert(m_server == nullptr);
|
||||||
|
|
||||||
m_ready = false;
|
m_ready = false;
|
||||||
m_server = new ServerProxy(this, m_stream, m_events);
|
m_server = new ServerProxy(this, m_stream, m_events);
|
||||||
|
|
@ -504,8 +504,8 @@ void Client::setupScreen()
|
||||||
|
|
||||||
void Client::setupTimer()
|
void Client::setupTimer()
|
||||||
{
|
{
|
||||||
assert(m_timer == NULL);
|
assert(m_timer == nullptr);
|
||||||
m_timer = m_events->newOneShotTimer(2.0, NULL);
|
m_timer = m_events->newOneShotTimer(2.0, nullptr);
|
||||||
m_events->adoptHandler(Event::kTimer, m_timer, new TMethodEventJob<Client>(this, &Client::handleConnectTimeout));
|
m_events->adoptHandler(Event::kTimer, m_timer, new TMethodEventJob<Client>(this, &Client::handleConnectTimeout));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -520,7 +520,7 @@ void Client::cleanup()
|
||||||
|
|
||||||
void Client::cleanupConnecting()
|
void Client::cleanupConnecting()
|
||||||
{
|
{
|
||||||
if (m_stream != NULL) {
|
if (m_stream != nullptr) {
|
||||||
m_events->removeHandler(m_events->forIDataSocket().connected(), m_stream->getEventTarget());
|
m_events->removeHandler(m_events->forIDataSocket().connected(), m_stream->getEventTarget());
|
||||||
m_events->removeHandler(m_events->forIDataSocket().connectionFailed(), m_stream->getEventTarget());
|
m_events->removeHandler(m_events->forIDataSocket().connectionFailed(), m_stream->getEventTarget());
|
||||||
}
|
}
|
||||||
|
|
@ -528,7 +528,7 @@ void Client::cleanupConnecting()
|
||||||
|
|
||||||
void Client::cleanupConnection()
|
void Client::cleanupConnection()
|
||||||
{
|
{
|
||||||
if (m_stream != NULL) {
|
if (m_stream != nullptr) {
|
||||||
m_events->removeHandler(m_events->forIStream().inputReady(), m_stream->getEventTarget());
|
m_events->removeHandler(m_events->forIStream().inputReady(), m_stream->getEventTarget());
|
||||||
m_events->removeHandler(m_events->forIStream().outputError(), m_stream->getEventTarget());
|
m_events->removeHandler(m_events->forIStream().outputError(), m_stream->getEventTarget());
|
||||||
m_events->removeHandler(m_events->forIStream().inputShutdown(), m_stream->getEventTarget());
|
m_events->removeHandler(m_events->forIStream().inputShutdown(), m_stream->getEventTarget());
|
||||||
|
|
@ -541,7 +541,7 @@ void Client::cleanupConnection()
|
||||||
|
|
||||||
void Client::cleanupScreen()
|
void Client::cleanupScreen()
|
||||||
{
|
{
|
||||||
if (m_server != NULL) {
|
if (m_server != nullptr) {
|
||||||
if (m_ready) {
|
if (m_ready) {
|
||||||
m_screen->disable();
|
m_screen->disable();
|
||||||
m_ready = false;
|
m_ready = false;
|
||||||
|
|
@ -549,23 +549,23 @@ void Client::cleanupScreen()
|
||||||
m_events->removeHandler(m_events->forIScreen().shapeChanged(), getEventTarget());
|
m_events->removeHandler(m_events->forIScreen().shapeChanged(), getEventTarget());
|
||||||
m_events->removeHandler(m_events->forClipboard().clipboardGrabbed(), getEventTarget());
|
m_events->removeHandler(m_events->forClipboard().clipboardGrabbed(), getEventTarget());
|
||||||
delete m_server;
|
delete m_server;
|
||||||
m_server = NULL;
|
m_server = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::cleanupTimer()
|
void Client::cleanupTimer()
|
||||||
{
|
{
|
||||||
if (m_timer != NULL) {
|
if (m_timer != nullptr) {
|
||||||
m_events->removeHandler(Event::kTimer, m_timer);
|
m_events->removeHandler(Event::kTimer, m_timer);
|
||||||
m_events->deleteTimer(m_timer);
|
m_events->deleteTimer(m_timer);
|
||||||
m_timer = NULL;
|
m_timer = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::cleanupStream()
|
void Client::cleanupStream()
|
||||||
{
|
{
|
||||||
delete m_stream;
|
delete m_stream;
|
||||||
m_stream = NULL;
|
m_stream = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::handleConnected(const Event &, void *)
|
void Client::handleConnected(const Event &, void *)
|
||||||
|
|
@ -610,7 +610,7 @@ void Client::handleOutputError(const Event &, void *)
|
||||||
cleanupScreen();
|
cleanupScreen();
|
||||||
cleanupConnection();
|
cleanupConnection();
|
||||||
LOG((CLOG_WARN "error sending to server"));
|
LOG((CLOG_WARN "error sending to server"));
|
||||||
sendEvent(m_events->forClient().disconnected(), NULL);
|
sendEvent(m_events->forClient().disconnected(), nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::handleDisconnected(const Event &, void *)
|
void Client::handleDisconnected(const Event &, void *)
|
||||||
|
|
@ -619,7 +619,7 @@ void Client::handleDisconnected(const Event &, void *)
|
||||||
cleanupScreen();
|
cleanupScreen();
|
||||||
cleanupConnection();
|
cleanupConnection();
|
||||||
LOG((CLOG_DEBUG1 "disconnected"));
|
LOG((CLOG_DEBUG1 "disconnected"));
|
||||||
sendEvent(m_events->forClient().disconnected(), NULL);
|
sendEvent(m_events->forClient().disconnected(), nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::handleShapeChanged(const Event &, void *)
|
void Client::handleShapeChanged(const Event &, void *)
|
||||||
|
|
@ -673,7 +673,7 @@ void Client::handleSuspend(const Event &, void *)
|
||||||
LOG((CLOG_INFO "suspend"));
|
LOG((CLOG_INFO "suspend"));
|
||||||
m_suspended = true;
|
m_suspended = true;
|
||||||
bool wasConnected = isConnected();
|
bool wasConnected = isConnected();
|
||||||
disconnect(NULL);
|
disconnect(nullptr);
|
||||||
m_connectOnResume = wasConnected;
|
m_connectOnResume = wasConnected;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,12 +43,12 @@ ServerProxy::ServerProxy(Client *client, deskflow::IStream *stream, IEventQueue
|
||||||
m_dyMouse(0),
|
m_dyMouse(0),
|
||||||
m_ignoreMouse(false),
|
m_ignoreMouse(false),
|
||||||
m_keepAliveAlarm(0.0),
|
m_keepAliveAlarm(0.0),
|
||||||
m_keepAliveAlarmTimer(NULL),
|
m_keepAliveAlarmTimer(nullptr),
|
||||||
m_parser(&ServerProxy::parseHandshakeMessage),
|
m_parser(&ServerProxy::parseHandshakeMessage),
|
||||||
m_events(events)
|
m_events(events)
|
||||||
{
|
{
|
||||||
assert(m_client != NULL);
|
assert(m_client != nullptr);
|
||||||
assert(m_stream != NULL);
|
assert(m_stream != nullptr);
|
||||||
|
|
||||||
// initialize modifier translation table
|
// initialize modifier translation table
|
||||||
for (KeyModifierID id = 0; id < kKeyModifierIDLast; ++id)
|
for (KeyModifierID id = 0; id < kKeyModifierIDLast; ++id)
|
||||||
|
|
@ -77,13 +77,13 @@ ServerProxy::~ServerProxy()
|
||||||
|
|
||||||
void ServerProxy::resetKeepAliveAlarm()
|
void ServerProxy::resetKeepAliveAlarm()
|
||||||
{
|
{
|
||||||
if (m_keepAliveAlarmTimer != NULL) {
|
if (m_keepAliveAlarmTimer != nullptr) {
|
||||||
m_events->removeHandler(Event::kTimer, m_keepAliveAlarmTimer);
|
m_events->removeHandler(Event::kTimer, m_keepAliveAlarmTimer);
|
||||||
m_events->deleteTimer(m_keepAliveAlarmTimer);
|
m_events->deleteTimer(m_keepAliveAlarmTimer);
|
||||||
m_keepAliveAlarmTimer = NULL;
|
m_keepAliveAlarmTimer = nullptr;
|
||||||
}
|
}
|
||||||
if (m_keepAliveAlarm > 0.0) {
|
if (m_keepAliveAlarm > 0.0) {
|
||||||
m_keepAliveAlarmTimer = m_events->newOneShotTimer(m_keepAliveAlarm, NULL);
|
m_keepAliveAlarmTimer = m_events->newOneShotTimer(m_keepAliveAlarm, nullptr);
|
||||||
m_events->adoptHandler(
|
m_events->adoptHandler(
|
||||||
Event::kTimer, m_keepAliveAlarmTimer, new TMethodEventJob<ServerProxy>(this, &ServerProxy::handleKeepAliveAlarm)
|
Event::kTimer, m_keepAliveAlarmTimer, new TMethodEventJob<ServerProxy>(this, &ServerProxy::handleKeepAliveAlarm)
|
||||||
);
|
);
|
||||||
|
|
@ -177,7 +177,7 @@ ServerProxy::EResult ServerProxy::parseHandshakeMessage(const uint8_t *code)
|
||||||
else if (memcmp(code, kMsgCClose, 4) == 0) {
|
else if (memcmp(code, kMsgCClose, 4) == 0) {
|
||||||
// server wants us to hangup
|
// server wants us to hangup
|
||||||
LOG((CLOG_DEBUG1 "recv close"));
|
LOG((CLOG_DEBUG1 "recv close"));
|
||||||
m_client->disconnect(NULL);
|
m_client->disconnect(nullptr);
|
||||||
return kDisconnect;
|
return kDisconnect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -324,7 +324,7 @@ ServerProxy::EResult ServerProxy::parseMessage(const uint8_t *code)
|
||||||
else if (memcmp(code, kMsgCClose, 4) == 0) {
|
else if (memcmp(code, kMsgCClose, 4) == 0) {
|
||||||
// server wants us to hangup
|
// server wants us to hangup
|
||||||
LOG((CLOG_DEBUG1 "recv close"));
|
LOG((CLOG_DEBUG1 "recv close"));
|
||||||
m_client->disconnect(NULL);
|
m_client->disconnect(nullptr);
|
||||||
return kDisconnect;
|
return kDisconnect;
|
||||||
} else if (memcmp(code, kMsgEBad, 4) == 0) {
|
} else if (memcmp(code, kMsgEBad, 4) == 0) {
|
||||||
LOG((CLOG_ERR "server disconnected due to a protocol error"));
|
LOG((CLOG_ERR "server disconnected due to a protocol error"));
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ public:
|
||||||
#ifdef TEST_ENV
|
#ifdef TEST_ENV
|
||||||
void handleDataForTest()
|
void handleDataForTest()
|
||||||
{
|
{
|
||||||
handleData(Event(), NULL);
|
handleData(Event(), nullptr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
#error "config.h missing"
|
#error "config.h missing"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// define NULL
|
// define nullptr
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
// make assert available since we use it a lot
|
// make assert available since we use it a lot
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@ int App::daemonMainLoop(int, const char **)
|
||||||
|
|
||||||
void App::setupFileLogging()
|
void App::setupFileLogging()
|
||||||
{
|
{
|
||||||
if (argsBase().m_logFile != NULL) {
|
if (argsBase().m_logFile != nullptr) {
|
||||||
m_fileLog = new FileLogOutputter(argsBase().m_logFile); // NOSONAR - Adopted by `Log`
|
m_fileLog = new FileLogOutputter(argsBase().m_logFile); // NOSONAR - Adopted by `Log`
|
||||||
CLOG->insert(m_fileLog);
|
CLOG->insert(m_fileLog);
|
||||||
LOG((CLOG_DEBUG1 "logging to file (%s) enabled", argsBase().m_logFile));
|
LOG((CLOG_DEBUG1 "logging to file (%s) enabled", argsBase().m_logFile));
|
||||||
|
|
@ -141,7 +141,7 @@ void App::setupFileLogging()
|
||||||
void App::loggingFilterWarning()
|
void App::loggingFilterWarning()
|
||||||
{
|
{
|
||||||
if (CLOG->getFilter() > CLOG->getConsoleMaxLevel()) {
|
if (CLOG->getFilter() > CLOG->getConsoleMaxLevel()) {
|
||||||
if (argsBase().m_logFile == NULL) {
|
if (argsBase().m_logFile == nullptr) {
|
||||||
LOG(
|
LOG(
|
||||||
(CLOG_WARN "log messages above %s are NOT sent to console (use file logging)",
|
(CLOG_WARN "log messages above %s are NOT sent to console (use file logging)",
|
||||||
CLOG->getFilterName(CLOG->getConsoleMaxLevel()))
|
CLOG->getFilterName(CLOG->getConsoleMaxLevel()))
|
||||||
|
|
@ -206,7 +206,7 @@ void App::runEventsLoop(void *)
|
||||||
// MinimalApp
|
// MinimalApp
|
||||||
//
|
//
|
||||||
|
|
||||||
MinimalApp::MinimalApp() : App(NULL, new deskflow::ArgsBase())
|
MinimalApp::MinimalApp() : App(nullptr, new deskflow::ArgsBase())
|
||||||
{
|
{
|
||||||
m_arch.init();
|
m_arch.init();
|
||||||
setEvents(m_events);
|
setEvents(m_events);
|
||||||
|
|
@ -242,7 +242,7 @@ int MinimalApp::foregroundStartup(int argc, char **argv)
|
||||||
|
|
||||||
deskflow::Screen *MinimalApp::createScreen()
|
deskflow::Screen *MinimalApp::createScreen()
|
||||||
{
|
{
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MinimalApp::loadConfig()
|
void MinimalApp::loadConfig()
|
||||||
|
|
|
||||||
|
|
@ -62,9 +62,9 @@
|
||||||
|
|
||||||
ClientApp::ClientApp(IEventQueue *events)
|
ClientApp::ClientApp(IEventQueue *events)
|
||||||
: App(events, new deskflow::ClientArgs()),
|
: App(events, new deskflow::ClientArgs()),
|
||||||
m_client(NULL),
|
m_client(nullptr),
|
||||||
m_clientScreen(NULL),
|
m_clientScreen(nullptr),
|
||||||
m_serverAddress(NULL)
|
m_serverAddress(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -258,7 +258,7 @@ deskflow::Screen *ClientApp::openClientScreen()
|
||||||
|
|
||||||
void ClientApp::closeClientScreen(deskflow::Screen *screen)
|
void ClientApp::closeClientScreen(deskflow::Screen *screen)
|
||||||
{
|
{
|
||||||
if (screen != NULL) {
|
if (screen != nullptr) {
|
||||||
m_events->removeHandler(m_events->forIScreen().error(), screen->getEventTarget());
|
m_events->removeHandler(m_events->forIScreen().error(), screen->getEventTarget());
|
||||||
delete screen;
|
delete screen;
|
||||||
}
|
}
|
||||||
|
|
@ -279,7 +279,7 @@ void ClientApp::scheduleClientRestart(double retryTime)
|
||||||
{
|
{
|
||||||
// install a timer and handler to retry later
|
// install a timer and handler to retry later
|
||||||
LOG((CLOG_DEBUG "retry in %.0f seconds", retryTime));
|
LOG((CLOG_DEBUG "retry in %.0f seconds", retryTime));
|
||||||
EventQueueTimer *timer = m_events->newOneShotTimer(retryTime, NULL);
|
EventQueueTimer *timer = m_events->newOneShotTimer(retryTime, nullptr);
|
||||||
m_events->adoptHandler(
|
m_events->adoptHandler(
|
||||||
Event::kTimer, timer, new TMethodEventJob<ClientApp>(this, &ClientApp::handleClientRestart, timer)
|
Event::kTimer, timer, new TMethodEventJob<ClientApp>(this, &ClientApp::handleClientRestart, timer)
|
||||||
);
|
);
|
||||||
|
|
@ -370,7 +370,7 @@ Client *ClientApp::openClient(const std::string &name, const NetworkAddress &add
|
||||||
|
|
||||||
void ClientApp::closeClient(Client *client)
|
void ClientApp::closeClient(Client *client)
|
||||||
{
|
{
|
||||||
if (client == NULL) {
|
if (client == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -392,9 +392,9 @@ int ClientApp::foregroundStartup(int argc, char **argv)
|
||||||
bool ClientApp::startClient()
|
bool ClientApp::startClient()
|
||||||
{
|
{
|
||||||
double retryTime;
|
double retryTime;
|
||||||
deskflow::Screen *clientScreen = NULL;
|
deskflow::Screen *clientScreen = nullptr;
|
||||||
try {
|
try {
|
||||||
if (m_clientScreen == NULL) {
|
if (m_clientScreen == nullptr) {
|
||||||
clientScreen = openClientScreen();
|
clientScreen = openClientScreen();
|
||||||
m_client = openClient(args().m_name, *m_serverAddress, clientScreen);
|
m_client = openClient(args().m_name, *m_serverAddress, clientScreen);
|
||||||
m_clientScreen = clientScreen;
|
m_clientScreen = clientScreen;
|
||||||
|
|
@ -433,8 +433,8 @@ void ClientApp::stopClient()
|
||||||
{
|
{
|
||||||
closeClient(m_client);
|
closeClient(m_client);
|
||||||
closeClientScreen(m_clientScreen);
|
closeClientScreen(m_clientScreen);
|
||||||
m_client = NULL;
|
m_client = nullptr;
|
||||||
m_clientScreen = NULL;
|
m_clientScreen = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ClientApp::mainLoop()
|
int ClientApp::mainLoop()
|
||||||
|
|
@ -454,7 +454,7 @@ int ClientApp::mainLoop()
|
||||||
|
|
||||||
#if WINAPI_CARBON
|
#if WINAPI_CARBON
|
||||||
|
|
||||||
Thread thread(new TMethodJob<ClientApp>(this, &ClientApp::runEventsLoop, NULL));
|
Thread thread(new TMethodJob<ClientApp>(this, &ClientApp::runEventsLoop, nullptr));
|
||||||
|
|
||||||
// wait until carbon loop is ready
|
// wait until carbon loop is ready
|
||||||
OSXScreen *screen = dynamic_cast<OSXScreen *>(m_clientScreen->getPlatformScreen());
|
OSXScreen *screen = dynamic_cast<OSXScreen *>(m_clientScreen->getPlatformScreen());
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
void IClipboard::unmarshall(IClipboard *clipboard, const std::string &data, Time time)
|
void IClipboard::unmarshall(IClipboard *clipboard, const std::string &data, Time time)
|
||||||
{
|
{
|
||||||
assert(clipboard != NULL);
|
assert(clipboard != nullptr);
|
||||||
|
|
||||||
const char *index = data.data();
|
const char *index = data.data();
|
||||||
|
|
||||||
|
|
@ -60,7 +60,7 @@ std::string IClipboard::marshall(const IClipboard *clipboard)
|
||||||
// n bytes => clipboard data
|
// n bytes => clipboard data
|
||||||
// back to the second 4 bytes if there is another format
|
// back to the second 4 bytes if there is another format
|
||||||
|
|
||||||
assert(clipboard != NULL);
|
assert(clipboard != nullptr);
|
||||||
|
|
||||||
std::string data;
|
std::string data;
|
||||||
|
|
||||||
|
|
@ -100,16 +100,16 @@ std::string IClipboard::marshall(const IClipboard *clipboard)
|
||||||
|
|
||||||
bool IClipboard::copy(IClipboard *dst, const IClipboard *src)
|
bool IClipboard::copy(IClipboard *dst, const IClipboard *src)
|
||||||
{
|
{
|
||||||
assert(dst != NULL);
|
assert(dst != nullptr);
|
||||||
assert(src != NULL);
|
assert(src != nullptr);
|
||||||
|
|
||||||
return copy(dst, src, src->getTime());
|
return copy(dst, src, src->getTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IClipboard::copy(IClipboard *dst, const IClipboard *src, Time time)
|
bool IClipboard::copy(IClipboard *dst, const IClipboard *src, Time time)
|
||||||
{
|
{
|
||||||
assert(dst != NULL);
|
assert(dst != nullptr);
|
||||||
assert(src != NULL);
|
assert(src != nullptr);
|
||||||
|
|
||||||
bool success = false;
|
bool success = false;
|
||||||
if (src->open(time)) {
|
if (src->open(time)) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ IKeyState::KeyInfo *IKeyState::KeyInfo::alloc(KeyID id, KeyModifierMask mask, Ke
|
||||||
info->m_mask = mask;
|
info->m_mask = mask;
|
||||||
info->m_button = button;
|
info->m_button = button;
|
||||||
info->m_count = count;
|
info->m_count = count;
|
||||||
info->m_screens = NULL;
|
info->m_screens = nullptr;
|
||||||
info->m_screensBuffer[0] = '\0';
|
info->m_screensBuffer[0] = '\0';
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
@ -61,14 +61,14 @@ IKeyState::KeyInfo *IKeyState::KeyInfo::alloc(const KeyInfo &x)
|
||||||
info->m_mask = x.m_mask;
|
info->m_mask = x.m_mask;
|
||||||
info->m_button = x.m_button;
|
info->m_button = x.m_button;
|
||||||
info->m_count = x.m_count;
|
info->m_count = x.m_count;
|
||||||
info->m_screens = x.m_screens ? info->m_screensBuffer : NULL;
|
info->m_screens = x.m_screens ? info->m_screensBuffer : nullptr;
|
||||||
memcpy(info->m_screensBuffer, x.m_screensBuffer, bufferLen + 1);
|
memcpy(info->m_screensBuffer, x.m_screensBuffer, bufferLen + 1);
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IKeyState::KeyInfo::isDefault(const char *screens)
|
bool IKeyState::KeyInfo::isDefault(const char *screens)
|
||||||
{
|
{
|
||||||
return (screens == NULL || screens[0] == '\0');
|
return (screens == nullptr || screens[0] == '\0');
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IKeyState::KeyInfo::contains(const char *screens, const std::string &name)
|
bool IKeyState::KeyInfo::contains(const char *screens, const std::string &name)
|
||||||
|
|
@ -87,7 +87,7 @@ bool IKeyState::KeyInfo::contains(const char *screens, const std::string &name)
|
||||||
match += ":";
|
match += ":";
|
||||||
match += name;
|
match += name;
|
||||||
match += ":";
|
match += ":";
|
||||||
return (strstr(screens, match.c_str()) != NULL);
|
return (strstr(screens, match.c_str()) != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IKeyState::KeyInfo::equal(const KeyInfo *a, const KeyInfo *b)
|
bool IKeyState::KeyInfo::equal(const KeyInfo *a, const KeyInfo *b)
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,10 @@
|
||||||
|
|
||||||
namespace deskflow {
|
namespace deskflow {
|
||||||
|
|
||||||
KeyMap::NameToKeyMap *KeyMap::s_nameToKeyMap = NULL;
|
KeyMap::NameToKeyMap *KeyMap::s_nameToKeyMap = nullptr;
|
||||||
KeyMap::NameToModifierMap *KeyMap::s_nameToModifierMap = NULL;
|
KeyMap::NameToModifierMap *KeyMap::s_nameToModifierMap = nullptr;
|
||||||
KeyMap::KeyToNameMap *KeyMap::s_keyToNameMap = NULL;
|
KeyMap::KeyToNameMap *KeyMap::s_keyToNameMap = nullptr;
|
||||||
KeyMap::ModifierToNameMap *KeyMap::s_modifierToNameMap = NULL;
|
KeyMap::ModifierToNameMap *KeyMap::s_modifierToNameMap = nullptr;
|
||||||
|
|
||||||
KeyMap::KeyMap() : m_numGroups(0), m_composeAcrossGroups(false)
|
KeyMap::KeyMap() : m_numGroups(0), m_composeAcrossGroups(false)
|
||||||
{
|
{
|
||||||
|
|
@ -104,7 +104,7 @@ void KeyMap::addKeyAliasEntry(
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// if we can already generate the target as desired then we're done.
|
// if we can already generate the target as desired then we're done.
|
||||||
if (findCompatibleKey(targetID, group, targetRequired, targetSensitive) != NULL) {
|
if (findCompatibleKey(targetID, group, targetRequired, targetSensitive) != nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -112,7 +112,7 @@ void KeyMap::addKeyAliasEntry(
|
||||||
for (int32_t gd = 0, n = getNumGroups(); gd < n; ++gd) {
|
for (int32_t gd = 0, n = getNumGroups(); gd < n; ++gd) {
|
||||||
int32_t eg = getEffectiveGroup(group, gd);
|
int32_t eg = getEffectiveGroup(group, gd);
|
||||||
const KeyItemList *sourceEntry = findCompatibleKey(sourceID, eg, sourceRequired, sourceSensitive);
|
const KeyItemList *sourceEntry = findCompatibleKey(sourceID, eg, sourceRequired, sourceSensitive);
|
||||||
if (sourceEntry != NULL && sourceEntry->size() == 1) {
|
if (sourceEntry != nullptr && sourceEntry->size() == 1) {
|
||||||
KeyMap::KeyItem targetItem = sourceEntry->back();
|
KeyMap::KeyItem targetItem = sourceEntry->back();
|
||||||
targetItem.m_id = targetID;
|
targetItem.m_id = targetID;
|
||||||
targetItem.m_group = eg;
|
targetItem.m_group = eg;
|
||||||
|
|
@ -243,10 +243,10 @@ const KeyMap::KeyItem *KeyMap::mapKey(
|
||||||
// handle group change
|
// handle group change
|
||||||
if (id == kKeyNextGroup) {
|
if (id == kKeyNextGroup) {
|
||||||
keys.push_back(Keystroke(1, false, false));
|
keys.push_back(Keystroke(1, false, false));
|
||||||
return NULL;
|
return nullptr;
|
||||||
} else if (id == kKeyPrevGroup) {
|
} else if (id == kKeyPrevGroup) {
|
||||||
keys.push_back(Keystroke(-1, false, false));
|
keys.push_back(Keystroke(-1, false, false));
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const KeyItem *item;
|
const KeyItem *item;
|
||||||
|
|
@ -271,7 +271,7 @@ const KeyMap::KeyItem *KeyMap::mapKey(
|
||||||
case kKeySetModifiers:
|
case kKeySetModifiers:
|
||||||
if (!keysForModifierState(0, group, activeModifiers, currentState, desiredMask, desiredMask, 0, keys)) {
|
if (!keysForModifierState(0, group, activeModifiers, currentState, desiredMask, desiredMask, 0, keys)) {
|
||||||
LOG((CLOG_DEBUG1 "unable to set modifiers %04x", desiredMask));
|
LOG((CLOG_DEBUG1 "unable to set modifiers %04x", desiredMask));
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return &m_modifierKeyItem;
|
return &m_modifierKeyItem;
|
||||||
|
|
||||||
|
|
@ -280,7 +280,7 @@ const KeyMap::KeyItem *KeyMap::mapKey(
|
||||||
0, group, activeModifiers, currentState, currentState & ~desiredMask, desiredMask, 0, keys
|
0, group, activeModifiers, currentState, currentState & ~desiredMask, desiredMask, 0, keys
|
||||||
)) {
|
)) {
|
||||||
LOG((CLOG_DEBUG1 "unable to clear modifiers %04x", desiredMask));
|
LOG((CLOG_DEBUG1 "unable to clear modifiers %04x", desiredMask));
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return &m_modifierKeyItem;
|
return &m_modifierKeyItem;
|
||||||
|
|
||||||
|
|
@ -293,7 +293,7 @@ const KeyMap::KeyItem *KeyMap::mapKey(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item != NULL) {
|
if (item != nullptr) {
|
||||||
LOG((CLOG_DEBUG1 "mapped to %03x, new state %04x", item->m_button, currentState));
|
LOG((CLOG_DEBUG1 "mapped to %03x, new state %04x", item->m_button, currentState));
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
|
|
@ -336,7 +336,7 @@ KeyMap::findCompatibleKey(KeyID id, int32_t group, KeyModifierMask required, Key
|
||||||
|
|
||||||
KeyIDMap::const_iterator i = m_keyIDMap.find(id);
|
KeyIDMap::const_iterator i = m_keyIDMap.find(id);
|
||||||
if (i == m_keyIDMap.end()) {
|
if (i == m_keyIDMap.end()) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const KeyEntryList &entries = i->second[group];
|
const KeyEntryList &entries = i->second[group];
|
||||||
|
|
@ -347,7 +347,7 @@ KeyMap::findCompatibleKey(KeyID id, int32_t group, KeyModifierMask required, Key
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KeyMap::isHalfDuplex(KeyID key, KeyButton button) const
|
bool KeyMap::isHalfDuplex(KeyID key, KeyButton button) const
|
||||||
|
|
@ -487,12 +487,12 @@ const KeyMap::KeyItem *KeyMap::mapCommandKey(
|
||||||
if (i == m_keyIDMap.end()) {
|
if (i == m_keyIDMap.end()) {
|
||||||
// unknown key
|
// unknown key
|
||||||
LOG((CLOG_DEBUG1 "key %04x is not on keyboard", id));
|
LOG((CLOG_DEBUG1 "key %04x is not on keyboard", id));
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
const KeyGroupTable &keyGroupTable = i->second;
|
const KeyGroupTable &keyGroupTable = i->second;
|
||||||
|
|
||||||
// find the first key that generates this KeyID
|
// find the first key that generates this KeyID
|
||||||
const KeyItem *keyItem = NULL;
|
const KeyItem *keyItem = nullptr;
|
||||||
int32_t numGroups = getNumGroups();
|
int32_t numGroups = getNumGroups();
|
||||||
for (int32_t groupOffset = 0; groupOffset < numGroups; ++groupOffset) {
|
for (int32_t groupOffset = 0; groupOffset < numGroups; ++groupOffset) {
|
||||||
int32_t effectiveGroup = getEffectiveGroup(group, groupOffset);
|
int32_t effectiveGroup = getEffectiveGroup(group, groupOffset);
|
||||||
|
|
@ -518,14 +518,14 @@ const KeyMap::KeyItem *KeyMap::mapCommandKey(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (keyItem != NULL) {
|
if (keyItem != nullptr) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (keyItem == NULL) {
|
if (keyItem == nullptr) {
|
||||||
// no mapping for this keysym
|
// no mapping for this keysym
|
||||||
LOG((CLOG_DEBUG1 "no mapping for key %04x", id));
|
LOG((CLOG_DEBUG1 "no mapping for key %04x", id));
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// make working copy of modifiers
|
// make working copy of modifiers
|
||||||
|
|
@ -542,14 +542,14 @@ const KeyMap::KeyItem *KeyMap::mapCommandKey(
|
||||||
)) {
|
)) {
|
||||||
LOG((CLOG_DEBUG1 "can't map key"));
|
LOG((CLOG_DEBUG1 "can't map key"));
|
||||||
keys.clear();
|
keys.clear();
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add keystrokes to restore modifier keys
|
// add keystrokes to restore modifier keys
|
||||||
if (!keysToRestoreModifiers(*keyItem, group, newModifiers, newState, activeModifiers, keys)) {
|
if (!keysToRestoreModifiers(*keyItem, group, newModifiers, newState, activeModifiers, keys)) {
|
||||||
LOG((CLOG_DEBUG1 "modifiers were not restored"));
|
LOG((CLOG_DEBUG1 "modifiers were not restored"));
|
||||||
keys.clear();
|
keys.clear();
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// save new modifiers
|
// save new modifiers
|
||||||
|
|
@ -589,7 +589,7 @@ const KeyMap::KeyItem *KeyMap::mapCharacterKey(
|
||||||
// unknown key
|
// unknown key
|
||||||
LOG((CLOG_DEBUG1 "key %04x is not on keyboard", id));
|
LOG((CLOG_DEBUG1 "key %04x is not on keyboard", id));
|
||||||
|
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get keys to press for key
|
// get keys to press for key
|
||||||
|
|
@ -597,7 +597,7 @@ const KeyMap::KeyItem *KeyMap::mapCharacterKey(
|
||||||
if (!itemList || itemList->empty()) {
|
if (!itemList || itemList->empty()) {
|
||||||
// no mapping for this keysym
|
// no mapping for this keysym
|
||||||
LOG((CLOG_DEBUG1 "no mapping for key %04x", id));
|
LOG((CLOG_DEBUG1 "no mapping for key %04x", id));
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const KeyItem &keyItem = itemList->back();
|
const KeyItem &keyItem = itemList->back();
|
||||||
|
|
@ -612,7 +612,7 @@ const KeyMap::KeyItem *KeyMap::mapCharacterKey(
|
||||||
if (!keysForKeyItem(itemList->at(j), newGroup, newModifiers, newState, desiredMask, 0, isAutoRepeat, keys, lang)) {
|
if (!keysForKeyItem(itemList->at(j), newGroup, newModifiers, newState, desiredMask, 0, isAutoRepeat, keys, lang)) {
|
||||||
LOG((CLOG_DEBUG1 "can't map key"));
|
LOG((CLOG_DEBUG1 "can't map key"));
|
||||||
keys.clear();
|
keys.clear();
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -620,7 +620,7 @@ const KeyMap::KeyItem *KeyMap::mapCharacterKey(
|
||||||
if (!keysToRestoreModifiers(keyItem, group, newModifiers, newState, activeModifiers, keys)) {
|
if (!keysToRestoreModifiers(keyItem, group, newModifiers, newState, activeModifiers, keys)) {
|
||||||
LOG((CLOG_DEBUG1 "modifiers were not restored"));
|
LOG((CLOG_DEBUG1 "modifiers were not restored"));
|
||||||
keys.clear();
|
keys.clear();
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// save new modifiers
|
// save new modifiers
|
||||||
|
|
@ -691,7 +691,7 @@ const KeyMap::KeyItem *KeyMap::keyForModifier(KeyButton button, int32_t group, i
|
||||||
return (*i);
|
return (*i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KeyMap::keysForKeyItem(
|
bool KeyMap::keysForKeyItem(
|
||||||
|
|
@ -852,7 +852,7 @@ bool KeyMap::keysForModifierState(
|
||||||
|
|
||||||
// get the KeyItem for the modifier in the group
|
// get the KeyItem for the modifier in the group
|
||||||
const KeyItem *keyItem = keyForModifier(button, group, bit);
|
const KeyItem *keyItem = keyForModifier(button, group, bit);
|
||||||
if (keyItem == NULL) {
|
if (keyItem == nullptr) {
|
||||||
if ((mask & notRequiredMask) == 0) {
|
if ((mask & notRequiredMask) == 0) {
|
||||||
LOG((CLOG_DEBUG1 "no key for modifier %04x", mask));
|
LOG((CLOG_DEBUG1 "no key for modifier %04x", mask));
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -1199,18 +1199,18 @@ bool KeyMap::parseModifiers(std::string &x, KeyModifierMask &mask)
|
||||||
void KeyMap::initKeyNameMaps()
|
void KeyMap::initKeyNameMaps()
|
||||||
{
|
{
|
||||||
// initialize tables
|
// initialize tables
|
||||||
if (s_nameToKeyMap == NULL) {
|
if (s_nameToKeyMap == nullptr) {
|
||||||
s_nameToKeyMap = new NameToKeyMap;
|
s_nameToKeyMap = new NameToKeyMap;
|
||||||
s_keyToNameMap = new KeyToNameMap;
|
s_keyToNameMap = new KeyToNameMap;
|
||||||
for (const KeyNameMapEntry *i = kKeyNameMap; i->m_name != NULL; ++i) {
|
for (const KeyNameMapEntry *i = kKeyNameMap; i->m_name != nullptr; ++i) {
|
||||||
(*s_nameToKeyMap)[i->m_name] = i->m_id;
|
(*s_nameToKeyMap)[i->m_name] = i->m_id;
|
||||||
(*s_keyToNameMap)[i->m_id] = i->m_name;
|
(*s_keyToNameMap)[i->m_id] = i->m_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (s_nameToModifierMap == NULL) {
|
if (s_nameToModifierMap == nullptr) {
|
||||||
s_nameToModifierMap = new NameToModifierMap;
|
s_nameToModifierMap = new NameToModifierMap;
|
||||||
s_modifierToNameMap = new ModifierToNameMap;
|
s_modifierToNameMap = new ModifierToNameMap;
|
||||||
for (const KeyModifierNameMapEntry *i = kModifierNameMap; i->m_name != NULL; ++i) {
|
for (const KeyModifierNameMapEntry *i = kModifierNameMap; i->m_name != nullptr; ++i) {
|
||||||
(*s_nameToModifierMap)[i->m_name] = i->m_mask;
|
(*s_nameToModifierMap)[i->m_name] = i->m_mask;
|
||||||
(*s_modifierToNameMap)[i->m_mask] = i->m_name;
|
(*s_modifierToNameMap)[i->m_mask] = i->m_name;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -211,7 +211,7 @@ public:
|
||||||
modifiers as given in \p currentState and the desired modifiers in
|
modifiers as given in \p currentState and the desired modifiers in
|
||||||
\p desiredMask into the keystrokes necessary to synthesize that key
|
\p desiredMask into the keystrokes necessary to synthesize that key
|
||||||
event in \p keys. It returns the \c KeyItem of the key being
|
event in \p keys. It returns the \c KeyItem of the key being
|
||||||
pressed/repeated, or NULL if the key cannot be mapped.
|
pressed/repeated, or nullptr if the key cannot be mapped.
|
||||||
*/
|
*/
|
||||||
virtual const KeyItem *mapKey(
|
virtual const KeyItem *mapKey(
|
||||||
Keystrokes &keys, KeyID id, int32_t group, ModifierToKeys &activeModifiers, KeyModifierMask ¤tState,
|
Keystrokes &keys, KeyID id, int32_t group, ModifierToKeys &activeModifiers, KeyModifierMask ¤tState,
|
||||||
|
|
@ -235,7 +235,7 @@ public:
|
||||||
//! Find key entry compatible with modifiers
|
//! Find key entry compatible with modifiers
|
||||||
/*!
|
/*!
|
||||||
Returns the \c KeyItemList for the first entry for \p id in group
|
Returns the \c KeyItemList for the first entry for \p id in group
|
||||||
\p group that is compatible with the given modifiers, or NULL
|
\p group that is compatible with the given modifiers, or nullptr
|
||||||
if there isn't one. A button list is compatible with a modifiers
|
if there isn't one. A button list is compatible with a modifiers
|
||||||
if it is either insensitive to all modifiers in \p sensitive or
|
if it is either insensitive to all modifiers in \p sensitive or
|
||||||
it requires the modifiers to be in the state indicated by \p required
|
it requires the modifiers to be in the state indicated by \p required
|
||||||
|
|
|
||||||
|
|
@ -855,7 +855,7 @@ bool KeyState::fakeKeyRepeat(KeyID id, KeyModifierMask mask, int32_t count, KeyB
|
||||||
ModifierToKeys oldActiveModifiers = m_activeModifiers;
|
ModifierToKeys oldActiveModifiers = m_activeModifiers;
|
||||||
const deskflow::KeyMap::KeyItem *keyItem =
|
const deskflow::KeyMap::KeyItem *keyItem =
|
||||||
m_keyMap.mapKey(keys, id, pollActiveGroup(), m_activeModifiers, getActiveModifiersRValue(), mask, true, lang);
|
m_keyMap.mapKey(keys, id, pollActiveGroup(), m_activeModifiers, getActiveModifiersRValue(), mask, true, lang);
|
||||||
if (keyItem == NULL) {
|
if (keyItem == nullptr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
KeyButton localID = (KeyButton)(keyItem->m_button & kButtonMask);
|
KeyButton localID = (KeyButton)(keyItem->m_button & kButtonMask);
|
||||||
|
|
@ -996,7 +996,7 @@ bool KeyState::isIgnoredKey(KeyID key, KeyModifierMask) const
|
||||||
KeyButton KeyState::getButton(KeyID id, int32_t group) const
|
KeyButton KeyState::getButton(KeyID id, int32_t group) const
|
||||||
{
|
{
|
||||||
const deskflow::KeyMap::KeyItemList *items = m_keyMap.findCompatibleKey(id, group, 0, 0);
|
const deskflow::KeyMap::KeyItemList *items = m_keyMap.findCompatibleKey(id, group, 0, 0);
|
||||||
if (items == NULL) {
|
if (items == nullptr) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return items->back().m_button;
|
return items->back().m_button;
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,7 @@ const KeyNameMapEntry kKeyNameMap[] = {
|
||||||
{"Bar", 0x007c},
|
{"Bar", 0x007c},
|
||||||
{"BraceR", 0x007d},
|
{"BraceR", 0x007d},
|
||||||
{"Tilde", 0x007e},
|
{"Tilde", 0x007e},
|
||||||
{NULL, 0},
|
{nullptr, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
const KeyModifierNameMapEntry kModifierNameMap[] = {
|
const KeyModifierNameMapEntry kModifierNameMap[] = {
|
||||||
|
|
@ -193,5 +193,5 @@ const KeyModifierNameMapEntry kModifierNameMap[] = {
|
||||||
// { "ScrollLock", KeyModifierScrollLock },
|
// { "ScrollLock", KeyModifierScrollLock },
|
||||||
{"Shift", KeyModifierShift},
|
{"Shift", KeyModifierShift},
|
||||||
{"Super", KeyModifierSuper},
|
{"Super", KeyModifierSuper},
|
||||||
{NULL, 0},
|
{nullptr, 0},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -310,13 +310,13 @@ struct KeyModifierNameMapEntry
|
||||||
/*!
|
/*!
|
||||||
A table of key names to the corresponding KeyID. Only the keys listed
|
A table of key names to the corresponding KeyID. Only the keys listed
|
||||||
above plus non-alphanumeric ASCII characters are in the table. The end
|
above plus non-alphanumeric ASCII characters are in the table. The end
|
||||||
of the table is the first pair with a NULL m_name.
|
of the table is the first pair with a nullptr m_name.
|
||||||
*/
|
*/
|
||||||
extern const struct KeyNameMapEntry kKeyNameMap[];
|
extern const struct KeyNameMapEntry kKeyNameMap[];
|
||||||
|
|
||||||
//! Modifier key name to KeyModifierMask table
|
//! Modifier key name to KeyModifierMask table
|
||||||
/*!
|
/*!
|
||||||
A table of modifier key names to the corresponding KeyModifierMask.
|
A table of modifier key names to the corresponding KeyModifierMask.
|
||||||
The end of the table is the first pair with a NULL m_name.
|
The end of the table is the first pair with a nullptr m_name.
|
||||||
*/
|
*/
|
||||||
extern const struct KeyModifierNameMapEntry kModifierNameMap[];
|
extern const struct KeyModifierNameMapEntry kModifierNameMap[];
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ uint32_t PacketStreamFilter::read(void *buffer, uint32_t n)
|
||||||
}
|
}
|
||||||
|
|
||||||
// read it
|
// read it
|
||||||
if (buffer != NULL) {
|
if (buffer != nullptr) {
|
||||||
memcpy(buffer, m_buffer.peek(n), n);
|
memcpy(buffer, m_buffer.peek(n), n);
|
||||||
}
|
}
|
||||||
m_buffer.pop(n);
|
m_buffer.pop(n);
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ template <typename T> void writeVectorInt(const std::vector<T> *VectorData, std:
|
||||||
|
|
||||||
void writeString(const std::string *StringData, std::vector<uint8_t> &Buffer)
|
void writeString(const std::string *StringData, std::vector<uint8_t> &Buffer)
|
||||||
{
|
{
|
||||||
const uint32_t len = (StringData != NULL) ? (uint32_t)StringData->size() : 0;
|
const uint32_t len = (StringData != nullptr) ? (uint32_t)StringData->size() : 0;
|
||||||
writeInt(len, sizeof(len), Buffer);
|
writeInt(len, sizeof(len), Buffer);
|
||||||
if (len != 0) {
|
if (len != 0) {
|
||||||
std::copy(StringData->begin(), StringData->end(), std::back_inserter(Buffer));
|
std::copy(StringData->begin(), StringData->end(), std::back_inserter(Buffer));
|
||||||
|
|
@ -69,8 +69,8 @@ void writeString(const std::string *StringData, std::vector<uint8_t> &Buffer)
|
||||||
|
|
||||||
void ProtocolUtil::writef(deskflow::IStream *stream, const char *fmt, ...)
|
void ProtocolUtil::writef(deskflow::IStream *stream, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
assert(stream != NULL);
|
assert(stream != nullptr);
|
||||||
assert(fmt != NULL);
|
assert(fmt != nullptr);
|
||||||
LOG((CLOG_DEBUG2 "writef(%s)", fmt));
|
LOG((CLOG_DEBUG2 "writef(%s)", fmt));
|
||||||
|
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
@ -106,8 +106,8 @@ bool ProtocolUtil::readf(deskflow::IStream *stream, const char *fmt, ...)
|
||||||
|
|
||||||
void ProtocolUtil::vwritef(deskflow::IStream *stream, const char *fmt, uint32_t size, va_list args)
|
void ProtocolUtil::vwritef(deskflow::IStream *stream, const char *fmt, uint32_t size, va_list args)
|
||||||
{
|
{
|
||||||
assert(stream != NULL);
|
assert(stream != nullptr);
|
||||||
assert(fmt != NULL);
|
assert(fmt != nullptr);
|
||||||
|
|
||||||
// done if nothing to write
|
// done if nothing to write
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
|
|
@ -130,8 +130,8 @@ void ProtocolUtil::vwritef(deskflow::IStream *stream, const char *fmt, uint32_t
|
||||||
|
|
||||||
void ProtocolUtil::vreadf(deskflow::IStream *stream, const char *fmt, va_list args)
|
void ProtocolUtil::vreadf(deskflow::IStream *stream, const char *fmt, va_list args)
|
||||||
{
|
{
|
||||||
assert(stream != NULL);
|
assert(stream != nullptr);
|
||||||
assert(fmt != NULL);
|
assert(fmt != nullptr);
|
||||||
|
|
||||||
// begin scanning
|
// begin scanning
|
||||||
while (*fmt) {
|
while (*fmt) {
|
||||||
|
|
@ -415,8 +415,8 @@ uint32_t ProtocolUtil::eatLength(const char **pfmt)
|
||||||
|
|
||||||
void ProtocolUtil::read(deskflow::IStream *stream, void *vbuffer, uint32_t count)
|
void ProtocolUtil::read(deskflow::IStream *stream, void *vbuffer, uint32_t count)
|
||||||
{
|
{
|
||||||
assert(stream != NULL);
|
assert(stream != nullptr);
|
||||||
assert(vbuffer != NULL);
|
assert(vbuffer != nullptr);
|
||||||
|
|
||||||
uint8_t *buffer = static_cast<uint8_t *>(vbuffer);
|
uint8_t *buffer = static_cast<uint8_t *>(vbuffer);
|
||||||
while (count > 0) {
|
while (count > 0) {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ Screen::Screen(IPlatformScreen *platformScreen, IEventQueue *events)
|
||||||
m_mock(false),
|
m_mock(false),
|
||||||
m_enableDragDrop(false)
|
m_enableDragDrop(false)
|
||||||
{
|
{
|
||||||
assert(m_screen != NULL);
|
assert(m_screen != nullptr);
|
||||||
|
|
||||||
// reset options
|
// reset options
|
||||||
resetOptions();
|
resetOptions();
|
||||||
|
|
@ -179,7 +179,7 @@ void Screen::setClipboard(ClipboardID id, const IClipboard *clipboard)
|
||||||
|
|
||||||
void Screen::grabClipboard(ClipboardID id)
|
void Screen::grabClipboard(ClipboardID id)
|
||||||
{
|
{
|
||||||
m_screen->setClipboard(id, NULL);
|
m_screen->setClipboard(id, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::screensaver(bool) const
|
void Screen::screensaver(bool) const
|
||||||
|
|
|
||||||
|
|
@ -70,13 +70,13 @@ using namespace deskflow::server;
|
||||||
|
|
||||||
ServerApp::ServerApp(IEventQueue *events)
|
ServerApp::ServerApp(IEventQueue *events)
|
||||||
: App(events, new deskflow::ServerArgs()),
|
: App(events, new deskflow::ServerArgs()),
|
||||||
m_server(NULL),
|
m_server(nullptr),
|
||||||
m_serverState(kUninitialized),
|
m_serverState(kUninitialized),
|
||||||
m_serverScreen(NULL),
|
m_serverScreen(nullptr),
|
||||||
m_primaryClient(NULL),
|
m_primaryClient(nullptr),
|
||||||
m_listener(NULL),
|
m_listener(nullptr),
|
||||||
m_timer(NULL),
|
m_timer(nullptr),
|
||||||
m_deskflowAddress(NULL)
|
m_deskflowAddress(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -166,7 +166,7 @@ void ServerApp::reloadConfig(const Event &, void *)
|
||||||
{
|
{
|
||||||
LOG((CLOG_DEBUG "reload configuration"));
|
LOG((CLOG_DEBUG "reload configuration"));
|
||||||
if (loadConfig(args().m_configFile)) {
|
if (loadConfig(args().m_configFile)) {
|
||||||
if (m_server != NULL) {
|
if (m_server != nullptr) {
|
||||||
m_server->setConfig(*args().m_config);
|
m_server->setConfig(*args().m_config);
|
||||||
}
|
}
|
||||||
LOG((CLOG_NOTE "reloaded configuration"));
|
LOG((CLOG_NOTE "reloaded configuration"));
|
||||||
|
|
@ -209,7 +209,7 @@ bool ServerApp::loadConfig(const std::string &pathname)
|
||||||
|
|
||||||
void ServerApp::forceReconnect(const Event &, void *)
|
void ServerApp::forceReconnect(const Event &, void *)
|
||||||
{
|
{
|
||||||
if (m_server != NULL) {
|
if (m_server != nullptr) {
|
||||||
m_server->disconnect();
|
m_server->disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -218,7 +218,7 @@ void ServerApp::handleClientConnected(const Event &, void *vlistener)
|
||||||
{
|
{
|
||||||
ClientListener *listener = static_cast<ClientListener *>(vlistener);
|
ClientListener *listener = static_cast<ClientListener *>(vlistener);
|
||||||
ClientProxy *client = listener->getNextClient();
|
ClientProxy *client = listener->getNextClient();
|
||||||
if (client != NULL) {
|
if (client != nullptr) {
|
||||||
m_server->adoptClient(client);
|
m_server->adoptClient(client);
|
||||||
updateStatus();
|
updateStatus();
|
||||||
}
|
}
|
||||||
|
|
@ -231,7 +231,7 @@ void ServerApp::handleClientsDisconnected(const Event &, void *)
|
||||||
|
|
||||||
void ServerApp::closeServer(Server *server)
|
void ServerApp::closeServer(Server *server)
|
||||||
{
|
{
|
||||||
if (server == NULL) {
|
if (server == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -240,7 +240,7 @@ void ServerApp::closeServer(Server *server)
|
||||||
|
|
||||||
// wait for clients to disconnect for up to timeout seconds
|
// wait for clients to disconnect for up to timeout seconds
|
||||||
double timeout = 3.0;
|
double timeout = 3.0;
|
||||||
EventQueueTimer *timer = m_events->newOneShotTimer(timeout, NULL);
|
EventQueueTimer *timer = m_events->newOneShotTimer(timeout, nullptr);
|
||||||
m_events->adoptHandler(
|
m_events->adoptHandler(
|
||||||
Event::kTimer, timer, new TMethodEventJob<ServerApp>(this, &ServerApp::handleClientsDisconnected)
|
Event::kTimer, timer, new TMethodEventJob<ServerApp>(this, &ServerApp::handleClientsDisconnected)
|
||||||
);
|
);
|
||||||
|
|
@ -261,10 +261,10 @@ void ServerApp::closeServer(Server *server)
|
||||||
|
|
||||||
void ServerApp::stopRetryTimer()
|
void ServerApp::stopRetryTimer()
|
||||||
{
|
{
|
||||||
if (m_timer != NULL) {
|
if (m_timer != nullptr) {
|
||||||
m_events->removeHandler(Event::kTimer, m_timer);
|
m_events->removeHandler(Event::kTimer, m_timer);
|
||||||
m_events->deleteTimer(m_timer);
|
m_events->deleteTimer(m_timer);
|
||||||
m_timer = NULL;
|
m_timer = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -279,7 +279,7 @@ void ServerApp::updateStatus(const std::string &msg)
|
||||||
|
|
||||||
void ServerApp::closeClientListener(ClientListener *listen)
|
void ServerApp::closeClientListener(ClientListener *listen)
|
||||||
{
|
{
|
||||||
if (listen != NULL) {
|
if (listen != nullptr) {
|
||||||
m_events->removeHandler(m_events->forClientListener().connected(), listen);
|
m_events->removeHandler(m_events->forClientListener().connected(), listen);
|
||||||
delete listen;
|
delete listen;
|
||||||
}
|
}
|
||||||
|
|
@ -290,15 +290,15 @@ void ServerApp::stopServer()
|
||||||
if (m_serverState == kStarted) {
|
if (m_serverState == kStarted) {
|
||||||
closeServer(m_server);
|
closeServer(m_server);
|
||||||
closeClientListener(m_listener);
|
closeClientListener(m_listener);
|
||||||
m_server = NULL;
|
m_server = nullptr;
|
||||||
m_listener = NULL;
|
m_listener = nullptr;
|
||||||
m_serverState = kInitialized;
|
m_serverState = kInitialized;
|
||||||
} else if (m_serverState == kStarting) {
|
} else if (m_serverState == kStarting) {
|
||||||
stopRetryTimer();
|
stopRetryTimer();
|
||||||
m_serverState = kInitialized;
|
m_serverState = kInitialized;
|
||||||
}
|
}
|
||||||
assert(m_server == NULL);
|
assert(m_server == nullptr);
|
||||||
assert(m_listener == NULL);
|
assert(m_listener == nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApp::closePrimaryClient(PrimaryClient *primaryClient)
|
void ServerApp::closePrimaryClient(PrimaryClient *primaryClient)
|
||||||
|
|
@ -308,7 +308,7 @@ void ServerApp::closePrimaryClient(PrimaryClient *primaryClient)
|
||||||
|
|
||||||
void ServerApp::closeServerScreen(deskflow::Screen *screen)
|
void ServerApp::closeServerScreen(deskflow::Screen *screen)
|
||||||
{
|
{
|
||||||
if (screen != NULL) {
|
if (screen != nullptr) {
|
||||||
m_events->removeHandler(m_events->forIScreen().error(), screen->getEventTarget());
|
m_events->removeHandler(m_events->forIScreen().error(), screen->getEventTarget());
|
||||||
m_events->removeHandler(m_events->forIScreen().suspend(), screen->getEventTarget());
|
m_events->removeHandler(m_events->forIScreen().suspend(), screen->getEventTarget());
|
||||||
m_events->removeHandler(m_events->forIScreen().resume(), screen->getEventTarget());
|
m_events->removeHandler(m_events->forIScreen().resume(), screen->getEventTarget());
|
||||||
|
|
@ -322,22 +322,22 @@ void ServerApp::cleanupServer()
|
||||||
if (m_serverState == kInitialized) {
|
if (m_serverState == kInitialized) {
|
||||||
closePrimaryClient(m_primaryClient);
|
closePrimaryClient(m_primaryClient);
|
||||||
closeServerScreen(m_serverScreen);
|
closeServerScreen(m_serverScreen);
|
||||||
m_primaryClient = NULL;
|
m_primaryClient = nullptr;
|
||||||
m_serverScreen = NULL;
|
m_serverScreen = nullptr;
|
||||||
m_serverState = kUninitialized;
|
m_serverState = kUninitialized;
|
||||||
} else if (m_serverState == kInitializing || m_serverState == kInitializingToStart) {
|
} else if (m_serverState == kInitializing || m_serverState == kInitializingToStart) {
|
||||||
stopRetryTimer();
|
stopRetryTimer();
|
||||||
m_serverState = kUninitialized;
|
m_serverState = kUninitialized;
|
||||||
}
|
}
|
||||||
assert(m_primaryClient == NULL);
|
assert(m_primaryClient == nullptr);
|
||||||
assert(m_serverScreen == NULL);
|
assert(m_serverScreen == nullptr);
|
||||||
assert(m_serverState == kUninitialized);
|
assert(m_serverState == kUninitialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApp::retryHandler(const Event &, void *)
|
void ServerApp::retryHandler(const Event &, void *)
|
||||||
{
|
{
|
||||||
// discard old timer
|
// discard old timer
|
||||||
assert(m_timer != NULL);
|
assert(m_timer != nullptr);
|
||||||
stopRetryTimer();
|
stopRetryTimer();
|
||||||
|
|
||||||
// try initializing/starting the server again
|
// try initializing/starting the server again
|
||||||
|
|
@ -387,8 +387,8 @@ bool ServerApp::initServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
double retryTime;
|
double retryTime;
|
||||||
deskflow::Screen *serverScreen = NULL;
|
deskflow::Screen *serverScreen = nullptr;
|
||||||
PrimaryClient *primaryClient = NULL;
|
PrimaryClient *primaryClient = nullptr;
|
||||||
try {
|
try {
|
||||||
std::string name = args().m_config->getCanonicalName(args().m_name);
|
std::string name = args().m_config->getCanonicalName(args().m_name);
|
||||||
serverScreen = openServerScreen();
|
serverScreen = openServerScreen();
|
||||||
|
|
@ -418,9 +418,9 @@ bool ServerApp::initServer()
|
||||||
|
|
||||||
if (args().m_restartable) {
|
if (args().m_restartable) {
|
||||||
// install a timer and handler to retry later
|
// install a timer and handler to retry later
|
||||||
assert(m_timer == NULL);
|
assert(m_timer == nullptr);
|
||||||
LOG((CLOG_DEBUG "retry in %.0f seconds", retryTime));
|
LOG((CLOG_DEBUG "retry in %.0f seconds", retryTime));
|
||||||
m_timer = m_events->newOneShotTimer(retryTime, NULL);
|
m_timer = m_events->newOneShotTimer(retryTime, nullptr);
|
||||||
m_events->adoptHandler(Event::kTimer, m_timer, new TMethodEventJob<ServerApp>(this, &ServerApp::retryHandler));
|
m_events->adoptHandler(Event::kTimer, m_timer, new TMethodEventJob<ServerApp>(this, &ServerApp::retryHandler));
|
||||||
m_serverState = kInitializing;
|
m_serverState = kInitializing;
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -470,7 +470,7 @@ bool ServerApp::startServer()
|
||||||
assert(m_serverState == kInitialized);
|
assert(m_serverState == kInitialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientListener *listener = NULL;
|
ClientListener *listener = nullptr;
|
||||||
try {
|
try {
|
||||||
listener = openClientListener(args().m_config->getDeskflowAddress());
|
listener = openClientListener(args().m_config->getDeskflowAddress());
|
||||||
m_server = openServer(*args().m_config, m_primaryClient);
|
m_server = openServer(*args().m_config, m_primaryClient);
|
||||||
|
|
@ -497,10 +497,10 @@ bool ServerApp::startServer()
|
||||||
|
|
||||||
if (args().m_restartable) {
|
if (args().m_restartable) {
|
||||||
// install a timer and handler to retry later
|
// install a timer and handler to retry later
|
||||||
assert(m_timer == NULL);
|
assert(m_timer == nullptr);
|
||||||
const auto retryTime = 10.0;
|
const auto retryTime = 10.0;
|
||||||
LOG((CLOG_DEBUG "retry in %.0f seconds", retryTime));
|
LOG((CLOG_DEBUG "retry in %.0f seconds", retryTime));
|
||||||
m_timer = m_events->newOneShotTimer(retryTime, NULL);
|
m_timer = m_events->newOneShotTimer(retryTime, nullptr);
|
||||||
m_events->adoptHandler(Event::kTimer, m_timer, new TMethodEventJob<ServerApp>(this, &ServerApp::retryHandler));
|
m_events->adoptHandler(Event::kTimer, m_timer, new TMethodEventJob<ServerApp>(this, &ServerApp::retryHandler));
|
||||||
m_serverState = kStarting;
|
m_serverState = kStarting;
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -655,7 +655,7 @@ int ServerApp::mainLoop()
|
||||||
appUtil().startNode();
|
appUtil().startNode();
|
||||||
|
|
||||||
// handle hangup signal by reloading the server's configuration
|
// handle hangup signal by reloading the server's configuration
|
||||||
ARCH->setSignalHandler(Arch::kHANGUP, &reloadSignalHandler, NULL);
|
ARCH->setSignalHandler(Arch::kHANGUP, &reloadSignalHandler, nullptr);
|
||||||
m_events->adoptHandler(
|
m_events->adoptHandler(
|
||||||
m_events->forServerApp().reloadConfig(), m_events->getSystemTarget(),
|
m_events->forServerApp().reloadConfig(), m_events->getSystemTarget(),
|
||||||
new TMethodEventJob<ServerApp>(this, &ServerApp::reloadConfig)
|
new TMethodEventJob<ServerApp>(this, &ServerApp::reloadConfig)
|
||||||
|
|
@ -682,7 +682,7 @@ int ServerApp::mainLoop()
|
||||||
|
|
||||||
#if WINAPI_CARBON
|
#if WINAPI_CARBON
|
||||||
|
|
||||||
Thread thread(new TMethodJob<ServerApp>(this, &ServerApp::runEventsLoop, NULL));
|
Thread thread(new TMethodJob<ServerApp>(this, &ServerApp::runEventsLoop, nullptr));
|
||||||
|
|
||||||
// wait until carbon loop is ready
|
// wait until carbon loop is ready
|
||||||
OSXScreen *screen = dynamic_cast<OSXScreen *>(m_serverScreen->getPlatformScreen());
|
OSXScreen *screen = dynamic_cast<OSXScreen *>(m_serverScreen->getPlatformScreen());
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ static const size_t g_chunkSize = 512 * 1024; // 512kb
|
||||||
|
|
||||||
bool StreamChunker::s_isChunkingFile = false;
|
bool StreamChunker::s_isChunkingFile = false;
|
||||||
bool StreamChunker::s_interruptFile = false;
|
bool StreamChunker::s_interruptFile = false;
|
||||||
Mutex *StreamChunker::s_interruptMutex = NULL;
|
Mutex *StreamChunker::s_interruptMutex = nullptr;
|
||||||
|
|
||||||
void StreamChunker::sendFile(char *filename, IEventQueue *events, void *eventTarget)
|
void StreamChunker::sendFile(char *filename, IEventQueue *events, void *eventTarget)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,9 @@ std::vector<std::string> AppUtilUnix::getKeyboardLayoutList()
|
||||||
#elif WINAPI_CARBON
|
#elif WINAPI_CARBON
|
||||||
CFStringRef keys[] = {kTISPropertyInputSourceCategory};
|
CFStringRef keys[] = {kTISPropertyInputSourceCategory};
|
||||||
CFStringRef values[] = {kTISCategoryKeyboardInputSource};
|
CFStringRef values[] = {kTISCategoryKeyboardInputSource};
|
||||||
AutoCFDictionary dict(CFDictionaryCreate(NULL, (const void **)keys, (const void **)values, 1, NULL, NULL), CFRelease);
|
AutoCFDictionary dict(
|
||||||
|
CFDictionaryCreate(nullptr, (const void **)keys, (const void **)values, 1, nullptr, nullptr), CFRelease
|
||||||
|
);
|
||||||
AutoCFArray kbds(TISCreateInputSourceList(dict.get(), false), CFRelease);
|
AutoCFArray kbds(TISCreateInputSourceList(dict.get(), false), CFRelease);
|
||||||
|
|
||||||
for (CFIndex i = 0; i < CFArrayGetCount(kbds.get()); ++i) {
|
for (CFIndex i = 0; i < CFArrayGetCount(kbds.get()); ++i) {
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ int AppUtilWindows::run(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
// record window instance for tray icon, etc
|
// record window instance for tray icon, etc
|
||||||
ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL));
|
ArchMiscWindows::setInstanceWin32(GetModuleHandle(nullptr));
|
||||||
|
|
||||||
MSWindowsScreen::init(ArchMiscWindows::instanceWin32());
|
MSWindowsScreen::init(ArchMiscWindows::instanceWin32());
|
||||||
Thread::getCurrentThread().setPriority(-14);
|
Thread::getCurrentThread().setPriority(-14);
|
||||||
|
|
@ -139,7 +139,7 @@ std::vector<std::string> AppUtilWindows::getKeyboardLayoutList()
|
||||||
{
|
{
|
||||||
std::vector<std::string> layoutLangCodes;
|
std::vector<std::string> layoutLangCodes;
|
||||||
{
|
{
|
||||||
auto uLayouts = GetKeyboardLayoutList(0, NULL);
|
auto uLayouts = GetKeyboardLayoutList(0, nullptr);
|
||||||
auto lpList = (HKL *)LocalAlloc(LPTR, (uLayouts * sizeof(HKL)));
|
auto lpList = (HKL *)LocalAlloc(LPTR, (uLayouts * sizeof(HKL)));
|
||||||
uLayouts = GetKeyboardLayoutList(uLayouts, lpList);
|
uLayouts = GetKeyboardLayoutList(uLayouts, lpList);
|
||||||
|
|
||||||
|
|
@ -178,7 +178,7 @@ HKL AppUtilWindows::getCurrentKeyboardLayout() const
|
||||||
|
|
||||||
GUITHREADINFO gti = {sizeof(GUITHREADINFO)};
|
GUITHREADINFO gti = {sizeof(GUITHREADINFO)};
|
||||||
if (GetGUIThreadInfo(0, >i) && gti.hwndActive) {
|
if (GetGUIThreadInfo(0, >i) && gti.hwndActive) {
|
||||||
layout = GetKeyboardLayout(GetWindowThreadProcessId(gti.hwndActive, NULL));
|
layout = GetKeyboardLayout(GetWindowThreadProcessId(gti.hwndActive, nullptr));
|
||||||
} else {
|
} else {
|
||||||
LOG((CLOG_WARN "failed to determine current keyboard layout"));
|
LOG((CLOG_WARN "failed to determine current keyboard layout"));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
const QString ScreenSetupModel::m_MimeType = "application/x-deskflow-screen";
|
const QString ScreenSetupModel::m_MimeType = "application/x-deskflow-screen";
|
||||||
|
|
||||||
ScreenSetupModel::ScreenSetupModel(ScreenList &screens, int numColumns, int numRows)
|
ScreenSetupModel::ScreenSetupModel(ScreenList &screens, int numColumns, int numRows)
|
||||||
: QAbstractTableModel(NULL),
|
: QAbstractTableModel(nullptr),
|
||||||
m_Screens(screens),
|
m_Screens(screens),
|
||||||
m_NumColumns(numColumns),
|
m_NumColumns(numColumns),
|
||||||
m_NumRows(numRows)
|
m_NumRows(numRows)
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ void ScreenSetupView::startDrag(Qt::DropActions)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QMimeData *pData = model()->mimeData(indexes);
|
QMimeData *pData = model()->mimeData(indexes);
|
||||||
if (pData == NULL)
|
if (pData == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const QPixmap &pixmap = model()->screen(indexes[0]).pixmap();
|
const QPixmap &pixmap = model()->screen(indexes[0]).pixmap();
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ public:
|
||||||
/*!
|
/*!
|
||||||
Read up to \p n bytes into \p buffer, returning the number read
|
Read up to \p n bytes into \p buffer, returning the number read
|
||||||
(zero if no data is available or input is shutdown). \p buffer
|
(zero if no data is available or input is shutdown). \p buffer
|
||||||
may be NULL in which case the data is discarded.
|
may be nullptr in which case the data is discarded.
|
||||||
*/
|
*/
|
||||||
virtual uint32_t read(void *buffer, uint32_t n) = 0;
|
virtual uint32_t read(void *buffer, uint32_t n) = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,10 @@ const void *StreamBuffer::peek(uint32_t n)
|
||||||
{
|
{
|
||||||
assert(n <= m_size);
|
assert(n <= m_size);
|
||||||
|
|
||||||
// if requesting no data then return NULL so we don't try to access
|
// if requesting no data then return nullptr so we don't try to access
|
||||||
// an empty list.
|
// an empty list.
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// reserve space in first chunk
|
// reserve space in first chunk
|
||||||
|
|
@ -80,7 +80,7 @@ void StreamBuffer::pop(uint32_t n)
|
||||||
|
|
||||||
void StreamBuffer::write(const void *vdata, uint32_t n)
|
void StreamBuffer::write(const void *vdata, uint32_t n)
|
||||||
{
|
{
|
||||||
assert(vdata != NULL);
|
assert(vdata != nullptr);
|
||||||
|
|
||||||
// ignore if no data, otherwise update size
|
// ignore if no data, otherwise update size
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
CondVarBase::CondVarBase(Mutex *mutex) : m_mutex(mutex)
|
CondVarBase::CondVarBase(Mutex *mutex) : m_mutex(mutex)
|
||||||
{
|
{
|
||||||
assert(m_mutex != NULL);
|
assert(m_mutex != nullptr);
|
||||||
m_cond = ARCH->newCondVar();
|
m_cond = ARCH->newCondVar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ class CondVarBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/*!
|
/*!
|
||||||
\c mutex must not be NULL. All condition variables have an
|
\c mutex must not be nullptr. All condition variables have an
|
||||||
associated mutex. The mutex needn't be unique to one condition
|
associated mutex. The mutex needn't be unique to one condition
|
||||||
variable.
|
variable.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
Thread::Thread(IJob *job)
|
Thread::Thread(IJob *job)
|
||||||
{
|
{
|
||||||
m_thread = ARCH->newThread(&Thread::threadFunc, job);
|
m_thread = ARCH->newThread(&Thread::threadFunc, job);
|
||||||
if (m_thread == NULL) {
|
if (m_thread == nullptr) {
|
||||||
// couldn't create thread
|
// couldn't create thread
|
||||||
delete job;
|
delete job;
|
||||||
throw XMTThreadUnavailable();
|
throw XMTThreadUnavailable();
|
||||||
|
|
@ -95,7 +95,7 @@ void *Thread::getResult() const
|
||||||
if (wait())
|
if (wait())
|
||||||
return ARCH->getResultOfThread(m_thread);
|
return ARCH->getResultOfThread(m_thread);
|
||||||
else
|
else
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
IArchMultithread::ThreadID Thread::getID() const
|
IArchMultithread::ThreadID Thread::getID() const
|
||||||
|
|
@ -127,7 +127,7 @@ void *Thread::threadFunc(void *vjob)
|
||||||
IJob *job = static_cast<IJob *>(vjob);
|
IJob *job = static_cast<IJob *>(vjob);
|
||||||
|
|
||||||
// run job
|
// run job
|
||||||
void *result = NULL;
|
void *result = nullptr;
|
||||||
try {
|
try {
|
||||||
// go
|
// go
|
||||||
LOG((CLOG_DEBUG1 "thread 0x%08x entry", id));
|
LOG((CLOG_DEBUG1 "thread 0x%08x entry", id));
|
||||||
|
|
|
||||||
|
|
@ -160,7 +160,7 @@ public:
|
||||||
//! Get the exit result
|
//! Get the exit result
|
||||||
/*!
|
/*!
|
||||||
Returns the exit result. This does an implicit wait(). It returns
|
Returns the exit result. This does an implicit wait(). It returns
|
||||||
NULL immediately if called by a thread on itself or on a thread that
|
nullptr immediately if called by a thread on itself or on a thread that
|
||||||
was cancelled.
|
was cancelled.
|
||||||
|
|
||||||
(cancellation point)
|
(cancellation point)
|
||||||
|
|
|
||||||
|
|
@ -22,5 +22,5 @@ void *IDataSocket::getEventTarget() const
|
||||||
{
|
{
|
||||||
// this is here to work around a VC++6 bug. see the header file.
|
// this is here to work around a VC++6 bug. see the header file.
|
||||||
assert(0 && "bad call");
|
assert(0 && "bad call");
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ public:
|
||||||
//! Accept connection
|
//! Accept connection
|
||||||
/*!
|
/*!
|
||||||
Accept a connection, returning a socket representing the full-duplex
|
Accept a connection, returning a socket representing the full-duplex
|
||||||
data stream. Returns NULL if no socket is waiting to be accepted.
|
data stream. Returns nullptr if no socket is waiting to be accepted.
|
||||||
This is only valid after a call to \c bind().
|
This is only valid after a call to \c bind().
|
||||||
*/
|
*/
|
||||||
virtual IDataSocket *accept() = 0;
|
virtual IDataSocket *accept() = 0;
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public:
|
||||||
Called by a socket multiplexer when the socket becomes readable,
|
Called by a socket multiplexer when the socket becomes readable,
|
||||||
writable, or has an error. It should return itself if the same
|
writable, or has an error. It should return itself if the same
|
||||||
job can continue to service events, a new job if the socket must
|
job can continue to service events, a new job if the socket must
|
||||||
be serviced differently, or NULL if the socket should no longer
|
be serviced differently, or nullptr if the socket should no longer
|
||||||
be serviced. The socket is readable if \p readable is true,
|
be serviced. The socket is readable if \p readable is true,
|
||||||
writable if \p writable is true, and in error if \p error is
|
writable if \p writable is true, and in error if \p error is
|
||||||
true.
|
true.
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,12 @@ SecureListenSocket::SecureListenSocket(
|
||||||
|
|
||||||
IDataSocket *SecureListenSocket::accept()
|
IDataSocket *SecureListenSocket::accept()
|
||||||
{
|
{
|
||||||
SecureSocket *socket = NULL;
|
SecureSocket *socket = nullptr;
|
||||||
try {
|
try {
|
||||||
socket = new SecureSocket(m_events, m_socketMultiplexer, ARCH->acceptSocket(m_socket, NULL), m_securityLevel);
|
socket = new SecureSocket(m_events, m_socketMultiplexer, ARCH->acceptSocket(m_socket, nullptr), m_securityLevel);
|
||||||
socket->initSsl(true);
|
socket->initSsl(true);
|
||||||
|
|
||||||
if (socket != NULL) {
|
if (socket != nullptr) {
|
||||||
setListeningJob();
|
setListeningJob();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -53,20 +53,20 @@ IDataSocket *SecureListenSocket::accept()
|
||||||
bool loaded = socket->loadCertificates(certificateFilename);
|
bool loaded = socket->loadCertificates(certificateFilename);
|
||||||
if (!loaded) {
|
if (!loaded) {
|
||||||
delete socket;
|
delete socket;
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
socket->secureAccept();
|
socket->secureAccept();
|
||||||
|
|
||||||
return dynamic_cast<IDataSocket *>(socket);
|
return dynamic_cast<IDataSocket *>(socket);
|
||||||
} catch (XArchNetwork &) {
|
} catch (XArchNetwork &) {
|
||||||
if (socket != NULL) {
|
if (socket != nullptr) {
|
||||||
delete socket;
|
delete socket;
|
||||||
setListeningJob();
|
setListeningJob();
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
} catch (std::exception &ex) {
|
} catch (std::exception &ex) {
|
||||||
if (socket != NULL) {
|
if (socket != nullptr) {
|
||||||
delete socket;
|
delete socket;
|
||||||
setListeningJob();
|
setListeningJob();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ ISocketMultiplexerJob *SecureSocket::newJob()
|
||||||
// after TCP connection is established, SecureSocket will pick up
|
// after TCP connection is established, SecureSocket will pick up
|
||||||
// connected event and do secureConnect
|
// connected event and do secureConnect
|
||||||
if (m_connected && !m_secureReady) {
|
if (m_connected && !m_secureReady) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TCPSocket::newJob();
|
return TCPSocket::newJob();
|
||||||
|
|
@ -184,7 +184,7 @@ TCPSocket::EJobResult SecureSocket::doWrite()
|
||||||
static bool s_retry = false;
|
static bool s_retry = false;
|
||||||
static int s_retrySize = 0;
|
static int s_retrySize = 0;
|
||||||
static int s_staticBufferSize = 0;
|
static int s_staticBufferSize = 0;
|
||||||
static void *s_staticBuffer = NULL;
|
static void *s_staticBuffer = nullptr;
|
||||||
|
|
||||||
// write data
|
// write data
|
||||||
int bufferSize = 0;
|
int bufferSize = 0;
|
||||||
|
|
@ -236,7 +236,7 @@ int SecureSocket::secureRead(void *buffer, int size, int &read)
|
||||||
{
|
{
|
||||||
std::lock_guard ssl_lock{ssl_mutex_};
|
std::lock_guard ssl_lock{ssl_mutex_};
|
||||||
|
|
||||||
if (m_ssl->m_ssl != NULL) {
|
if (m_ssl->m_ssl != nullptr) {
|
||||||
LOG((CLOG_DEBUG2 "reading secure socket"));
|
LOG((CLOG_DEBUG2 "reading secure socket"));
|
||||||
read = SSL_read(m_ssl->m_ssl, buffer, size);
|
read = SSL_read(m_ssl->m_ssl, buffer, size);
|
||||||
|
|
||||||
|
|
@ -263,7 +263,7 @@ int SecureSocket::secureWrite(const void *buffer, int size, int &wrote)
|
||||||
{
|
{
|
||||||
std::lock_guard ssl_lock{ssl_mutex_};
|
std::lock_guard ssl_lock{ssl_mutex_};
|
||||||
|
|
||||||
if (m_ssl->m_ssl != NULL) {
|
if (m_ssl->m_ssl != nullptr) {
|
||||||
LOG((CLOG_DEBUG2 "writing secure socket: %p", this));
|
LOG((CLOG_DEBUG2 "writing secure socket: %p", this));
|
||||||
|
|
||||||
wrote = SSL_write(m_ssl->m_ssl, buffer, size);
|
wrote = SSL_write(m_ssl->m_ssl, buffer, size);
|
||||||
|
|
@ -297,8 +297,8 @@ void SecureSocket::initSsl(bool server)
|
||||||
std::lock_guard ssl_lock{ssl_mutex_};
|
std::lock_guard ssl_lock{ssl_mutex_};
|
||||||
|
|
||||||
m_ssl = new Ssl();
|
m_ssl = new Ssl();
|
||||||
m_ssl->m_context = NULL;
|
m_ssl->m_context = nullptr;
|
||||||
m_ssl->m_ssl = NULL;
|
m_ssl->m_ssl = nullptr;
|
||||||
|
|
||||||
initContext(server);
|
initContext(server);
|
||||||
}
|
}
|
||||||
|
|
@ -372,7 +372,7 @@ void SecureSocket::initContext(bool server)
|
||||||
// be vulnerable
|
// be vulnerable
|
||||||
SSL_CTX_set_options(m_ssl->m_context, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1);
|
SSL_CTX_set_options(m_ssl->m_context, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1);
|
||||||
|
|
||||||
if (m_ssl->m_context == NULL) {
|
if (m_ssl->m_context == nullptr) {
|
||||||
SslLogger::logError();
|
SslLogger::logError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -388,8 +388,8 @@ void SecureSocket::createSSL()
|
||||||
{
|
{
|
||||||
// I assume just one instance is needed
|
// I assume just one instance is needed
|
||||||
// get new SSL state with context
|
// get new SSL state with context
|
||||||
if (m_ssl->m_ssl == NULL) {
|
if (m_ssl->m_ssl == nullptr) {
|
||||||
assert(m_ssl->m_context != NULL);
|
assert(m_ssl->m_context != nullptr);
|
||||||
m_ssl->m_ssl = SSL_new(m_ssl->m_context);
|
m_ssl->m_ssl = SSL_new(m_ssl->m_context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -402,17 +402,17 @@ void SecureSocket::freeSSL()
|
||||||
// take socket from multiplexer ASAP otherwise the race condition
|
// take socket from multiplexer ASAP otherwise the race condition
|
||||||
// could cause events to get called on a dead object. TCPSocket
|
// could cause events to get called on a dead object. TCPSocket
|
||||||
// will do this, too, but the double-call is harmless
|
// will do this, too, but the double-call is harmless
|
||||||
setJob(NULL);
|
setJob(nullptr);
|
||||||
if (m_ssl) {
|
if (m_ssl) {
|
||||||
if (m_ssl->m_ssl != NULL) {
|
if (m_ssl->m_ssl != nullptr) {
|
||||||
SSL_shutdown(m_ssl->m_ssl);
|
SSL_shutdown(m_ssl->m_ssl);
|
||||||
|
|
||||||
SSL_free(m_ssl->m_ssl);
|
SSL_free(m_ssl->m_ssl);
|
||||||
m_ssl->m_ssl = NULL;
|
m_ssl->m_ssl = nullptr;
|
||||||
}
|
}
|
||||||
if (m_ssl->m_context != NULL) {
|
if (m_ssl->m_context != nullptr) {
|
||||||
SSL_CTX_free(m_ssl->m_context);
|
SSL_CTX_free(m_ssl->m_context);
|
||||||
m_ssl->m_context = NULL;
|
m_ssl->m_context = nullptr;
|
||||||
}
|
}
|
||||||
delete m_ssl;
|
delete m_ssl;
|
||||||
m_ssl = nullptr;
|
m_ssl = nullptr;
|
||||||
|
|
@ -546,7 +546,7 @@ bool SecureSocket::showCertificate() const
|
||||||
|
|
||||||
// get the server's certificate
|
// get the server's certificate
|
||||||
cert = SSL_get_peer_certificate(m_ssl->m_ssl);
|
cert = SSL_get_peer_certificate(m_ssl->m_ssl);
|
||||||
if (cert != NULL) {
|
if (cert != nullptr) {
|
||||||
line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);
|
line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);
|
||||||
LOG((CLOG_INFO "server tls certificate info: %s", line));
|
LOG((CLOG_INFO "server tls certificate info: %s", line));
|
||||||
OPENSSL_free(line);
|
OPENSSL_free(line);
|
||||||
|
|
@ -704,7 +704,7 @@ ISocketMultiplexerJob *SecureSocket::serviceConnect(ISocketMultiplexerJob *job,
|
||||||
|
|
||||||
// If status < 0, error happened
|
// If status < 0, error happened
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If status > 0, success
|
// If status > 0, success
|
||||||
|
|
@ -731,7 +731,7 @@ ISocketMultiplexerJob *SecureSocket::serviceAccept(ISocketMultiplexerJob *job, b
|
||||||
#endif
|
#endif
|
||||||
// If status < 0, error happened
|
// If status < 0, error happened
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If status > 0, success
|
// If status > 0, success
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,7 @@ int getCertLength(const std::string &path)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EVP_PKEY *privateKey = PEM_read_PrivateKey(fp, NULL, NULL, NULL);
|
EVP_PKEY *privateKey = PEM_read_PrivateKey(fp, nullptr, nullptr, nullptr);
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,15 +25,15 @@
|
||||||
|
|
||||||
SocketMultiplexer::SocketMultiplexer()
|
SocketMultiplexer::SocketMultiplexer()
|
||||||
: m_mutex(new Mutex),
|
: m_mutex(new Mutex),
|
||||||
m_thread(NULL),
|
m_thread(nullptr),
|
||||||
m_update(false),
|
m_update(false),
|
||||||
m_jobsReady(new CondVar<bool>(m_mutex, false)),
|
m_jobsReady(new CondVar<bool>(m_mutex, false)),
|
||||||
m_jobListLock(new CondVar<bool>(m_mutex, false)),
|
m_jobListLock(new CondVar<bool>(m_mutex, false)),
|
||||||
m_jobListLockLocked(new CondVar<bool>(m_mutex, false)),
|
m_jobListLockLocked(new CondVar<bool>(m_mutex, false)),
|
||||||
m_jobListLocker(NULL),
|
m_jobListLocker(nullptr),
|
||||||
m_jobListLockLocker(NULL)
|
m_jobListLockLocker(nullptr)
|
||||||
{
|
{
|
||||||
// this pointer just has to be unique and not NULL. it will
|
// this pointer just has to be unique and not nullptr. it will
|
||||||
// never be dereferenced. it's used to identify cursor nodes
|
// never be dereferenced. it's used to identify cursor nodes
|
||||||
// in the jobs list.
|
// in the jobs list.
|
||||||
// TODO: Remove this evilness
|
// TODO: Remove this evilness
|
||||||
|
|
@ -64,8 +64,8 @@ SocketMultiplexer::~SocketMultiplexer()
|
||||||
|
|
||||||
void SocketMultiplexer::addSocket(ISocket *socket, ISocketMultiplexerJob *job)
|
void SocketMultiplexer::addSocket(ISocket *socket, ISocketMultiplexerJob *job)
|
||||||
{
|
{
|
||||||
assert(socket != NULL);
|
assert(socket != nullptr);
|
||||||
assert(job != NULL);
|
assert(job != nullptr);
|
||||||
|
|
||||||
// prevent other threads from locking the job list
|
// prevent other threads from locking the job list
|
||||||
lockJobListLock();
|
lockJobListLock();
|
||||||
|
|
@ -100,7 +100,7 @@ void SocketMultiplexer::addSocket(ISocket *socket, ISocketMultiplexerJob *job)
|
||||||
|
|
||||||
void SocketMultiplexer::removeSocket(ISocket *socket)
|
void SocketMultiplexer::removeSocket(ISocket *socket)
|
||||||
{
|
{
|
||||||
assert(socket != NULL);
|
assert(socket != nullptr);
|
||||||
|
|
||||||
// prevent other threads from locking the job list
|
// prevent other threads from locking the job list
|
||||||
lockJobListLock();
|
lockJobListLock();
|
||||||
|
|
@ -111,14 +111,14 @@ void SocketMultiplexer::removeSocket(ISocket *socket)
|
||||||
// lock the job list
|
// lock the job list
|
||||||
lockJobList();
|
lockJobList();
|
||||||
|
|
||||||
// remove job. rather than removing it from the map we put NULL
|
// remove job. rather than removing it from the map we put nullptr
|
||||||
// in the list instead so the order of jobs in the list continues
|
// in the list instead so the order of jobs in the list continues
|
||||||
// to match the order of jobs in pfds in serviceThread().
|
// to match the order of jobs in pfds in serviceThread().
|
||||||
SocketJobMap::iterator i = m_socketJobMap.find(socket);
|
SocketJobMap::iterator i = m_socketJobMap.find(socket);
|
||||||
if (i != m_socketJobMap.end()) {
|
if (i != m_socketJobMap.end()) {
|
||||||
if (*(i->second) != NULL) {
|
if (*(i->second) != nullptr) {
|
||||||
delete *(i->second);
|
delete *(i->second);
|
||||||
*(i->second) = NULL;
|
*(i->second) = nullptr;
|
||||||
m_update = true;
|
m_update = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -158,7 +158,7 @@ void SocketMultiplexer::serviceThread(void *)
|
||||||
JobCursor jobCursor = nextCursor(cursor);
|
JobCursor jobCursor = nextCursor(cursor);
|
||||||
while (jobCursor != m_socketJobs.end()) {
|
while (jobCursor != m_socketJobs.end()) {
|
||||||
ISocketMultiplexerJob *job = *jobCursor;
|
ISocketMultiplexerJob *job = *jobCursor;
|
||||||
if (job != NULL) {
|
if (job != nullptr) {
|
||||||
pfd.m_socket = job->getSocket();
|
pfd.m_socket = job->getSocket();
|
||||||
pfd.m_events = 0;
|
pfd.m_events = 0;
|
||||||
if (job->isReadable()) {
|
if (job->isReadable()) {
|
||||||
|
|
@ -194,7 +194,7 @@ void SocketMultiplexer::serviceThread(void *)
|
||||||
JobCursor cursor = newCursor();
|
JobCursor cursor = newCursor();
|
||||||
JobCursor jobCursor = nextCursor(cursor);
|
JobCursor jobCursor = nextCursor(cursor);
|
||||||
while (i < pfds.size() && jobCursor != m_socketJobs.end()) {
|
while (i < pfds.size() && jobCursor != m_socketJobs.end()) {
|
||||||
if (*jobCursor != NULL) {
|
if (*jobCursor != nullptr) {
|
||||||
// get poll state
|
// get poll state
|
||||||
unsigned short revents = pfds[i].m_revents;
|
unsigned short revents = pfds[i].m_revents;
|
||||||
bool read = ((revents & IArchNetwork::kPOLLIN) != 0);
|
bool read = ((revents & IArchNetwork::kPOLLIN) != 0);
|
||||||
|
|
@ -223,7 +223,7 @@ void SocketMultiplexer::serviceThread(void *)
|
||||||
|
|
||||||
// delete any removed socket jobs
|
// delete any removed socket jobs
|
||||||
for (SocketJobMap::iterator i = m_socketJobMap.begin(); i != m_socketJobMap.end();) {
|
for (SocketJobMap::iterator i = m_socketJobMap.begin(); i != m_socketJobMap.end();) {
|
||||||
if (*(i->second) == NULL) {
|
if (*(i->second) == nullptr) {
|
||||||
m_socketJobs.erase(i->second);
|
m_socketJobs.erase(i->second);
|
||||||
m_socketJobMap.erase(i++);
|
m_socketJobMap.erase(i++);
|
||||||
m_update = true;
|
m_update = true;
|
||||||
|
|
@ -296,7 +296,7 @@ void SocketMultiplexer::lockJobList()
|
||||||
// take ownership of the lock
|
// take ownership of the lock
|
||||||
*m_jobListLock = true;
|
*m_jobListLock = true;
|
||||||
m_jobListLocker = m_jobListLockLocker;
|
m_jobListLocker = m_jobListLockLocker;
|
||||||
m_jobListLockLocker = NULL;
|
m_jobListLockLocker = nullptr;
|
||||||
|
|
||||||
// release the lock on the lock
|
// release the lock on the lock
|
||||||
*m_jobListLockLocked = false;
|
*m_jobListLockLocked = false;
|
||||||
|
|
@ -312,7 +312,7 @@ void SocketMultiplexer::unlockJobList()
|
||||||
|
|
||||||
// release the lock
|
// release the lock
|
||||||
delete m_jobListLocker;
|
delete m_jobListLocker;
|
||||||
m_jobListLocker = NULL;
|
m_jobListLocker = nullptr;
|
||||||
*m_jobListLock = false;
|
*m_jobListLock = false;
|
||||||
m_jobListLock->signal();
|
m_jobListLock->signal();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ TCPListenSocket::TCPListenSocket(
|
||||||
TCPListenSocket::~TCPListenSocket()
|
TCPListenSocket::~TCPListenSocket()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
if (m_socket != NULL) {
|
if (m_socket != nullptr) {
|
||||||
m_socketMultiplexer->removeSocket(this);
|
m_socketMultiplexer->removeSocket(this);
|
||||||
ARCH->closeSocket(m_socket);
|
ARCH->closeSocket(m_socket);
|
||||||
}
|
}
|
||||||
|
|
@ -74,13 +74,13 @@ void TCPListenSocket::bind(const NetworkAddress &addr)
|
||||||
void TCPListenSocket::close()
|
void TCPListenSocket::close()
|
||||||
{
|
{
|
||||||
Lock lock(m_mutex);
|
Lock lock(m_mutex);
|
||||||
if (m_socket == NULL) {
|
if (m_socket == nullptr) {
|
||||||
throw XIOClosed();
|
throw XIOClosed();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
m_socketMultiplexer->removeSocket(this);
|
m_socketMultiplexer->removeSocket(this);
|
||||||
ARCH->closeSocket(m_socket);
|
ARCH->closeSocket(m_socket);
|
||||||
m_socket = NULL;
|
m_socket = nullptr;
|
||||||
} catch (XArchNetwork &e) {
|
} catch (XArchNetwork &e) {
|
||||||
throw XSocketIOClose(e.what());
|
throw XSocketIOClose(e.what());
|
||||||
}
|
}
|
||||||
|
|
@ -93,21 +93,21 @@ void *TCPListenSocket::getEventTarget() const
|
||||||
|
|
||||||
IDataSocket *TCPListenSocket::accept()
|
IDataSocket *TCPListenSocket::accept()
|
||||||
{
|
{
|
||||||
IDataSocket *socket = NULL;
|
IDataSocket *socket = nullptr;
|
||||||
try {
|
try {
|
||||||
socket = new TCPSocket(m_events, m_socketMultiplexer, ARCH->acceptSocket(m_socket, NULL));
|
socket = new TCPSocket(m_events, m_socketMultiplexer, ARCH->acceptSocket(m_socket, nullptr));
|
||||||
if (socket != NULL) {
|
if (socket != nullptr) {
|
||||||
setListeningJob();
|
setListeningJob();
|
||||||
}
|
}
|
||||||
return socket;
|
return socket;
|
||||||
} catch (XArchNetwork &) {
|
} catch (XArchNetwork &) {
|
||||||
if (socket != NULL) {
|
if (socket != nullptr) {
|
||||||
delete socket;
|
delete socket;
|
||||||
setListeningJob();
|
setListeningJob();
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
} catch (std::exception &ex) {
|
} catch (std::exception &ex) {
|
||||||
if (socket != NULL) {
|
if (socket != nullptr) {
|
||||||
delete socket;
|
delete socket;
|
||||||
setListeningJob();
|
setListeningJob();
|
||||||
}
|
}
|
||||||
|
|
@ -127,12 +127,12 @@ ISocketMultiplexerJob *TCPListenSocket::serviceListening(ISocketMultiplexerJob *
|
||||||
{
|
{
|
||||||
if (error) {
|
if (error) {
|
||||||
close();
|
close();
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (read) {
|
if (read) {
|
||||||
m_events->addEvent(Event(m_events->forIListenSocket().connecting(), this));
|
m_events->addEvent(Event(m_events->forIListenSocket().connecting(), this));
|
||||||
// stop polling on this socket until the client accepts
|
// stop polling on this socket until the client accepts
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return job;
|
return job;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ IDataSocket *TCPSocketFactory::create(IArchNetwork::EAddressFamily family, Secur
|
||||||
|
|
||||||
IListenSocket *TCPSocketFactory::createListen(IArchNetwork::EAddressFamily family, SecurityLevel securityLevel) const
|
IListenSocket *TCPSocketFactory::createListen(IArchNetwork::EAddressFamily family, SecurityLevel securityLevel) const
|
||||||
{
|
{
|
||||||
IListenSocket *socket = NULL;
|
IListenSocket *socket = nullptr;
|
||||||
if (securityLevel != SecurityLevel::PlainText) {
|
if (securityLevel != SecurityLevel::PlainText) {
|
||||||
socket = new SecureListenSocket(m_events, m_socketMultiplexer, family, securityLevel);
|
socket = new SecureListenSocket(m_events, m_socketMultiplexer, family, securityLevel);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -63,10 +63,10 @@ template <class T> inline TSocketMultiplexerMethodJob<T>::~TSocketMultiplexerMet
|
||||||
|
|
||||||
template <class T> inline ISocketMultiplexerJob *TSocketMultiplexerMethodJob<T>::run(bool read, bool write, bool error)
|
template <class T> inline ISocketMultiplexerJob *TSocketMultiplexerMethodJob<T>::run(bool read, bool write, bool error)
|
||||||
{
|
{
|
||||||
if (m_object != NULL) {
|
if (m_object != nullptr) {
|
||||||
return (m_object->*m_method)(this, read, write, error);
|
return (m_object->*m_method)(this, read, write, error);
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T> inline ArchSocket TSocketMultiplexerMethodJob<T>::getSocket() const
|
template <class T> inline ArchSocket TSocketMultiplexerMethodJob<T>::getSocket() const
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ void EiEventQueueBuffer::waitForEvent(double timeout_in_ms)
|
||||||
std::lock_guard lock(mutex_);
|
std::lock_guard lock(mutex_);
|
||||||
|
|
||||||
// libei doesn't allow ei_event_ref() because events are
|
// libei doesn't allow ei_event_ref() because events are
|
||||||
// supposed to be short-lived only. So instead, we create an NULL-data
|
// supposed to be short-lived only. So instead, we create an nullptr-data
|
||||||
// kSystemEvent whenever there's data on the fd, shove that event
|
// kSystemEvent whenever there's data on the fd, shove that event
|
||||||
// into our event queue and once we process the event (see
|
// into our event queue and once we process the event (see
|
||||||
// getEvent()), the EiScreen will call ei_dispatch() and process
|
// getEvent()), the EiScreen will call ei_dispatch() and process
|
||||||
|
|
|
||||||
|
|
@ -107,10 +107,10 @@ KeyID IOSXKeyResource::getKeyID(uint8_t c)
|
||||||
// convert to unicode
|
// convert to unicode
|
||||||
CFStringRef cfString = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, str, encoding, kCFAllocatorNull);
|
CFStringRef cfString = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, str, encoding, kCFAllocatorNull);
|
||||||
|
|
||||||
// sometimes CFStringCreate...() returns NULL (e.g. Apple Korean
|
// sometimes CFStringCreate...() returns nullptr (e.g. Apple Korean
|
||||||
// encoding with char value 214). if it did then make no key,
|
// encoding with char value 214). if it did then make no key,
|
||||||
// otherwise CFStringCreateMutableCopy() will crash.
|
// otherwise CFStringCreateMutableCopy() will crash.
|
||||||
if (cfString == NULL) {
|
if (cfString == nullptr) {
|
||||||
return kKeyNone;
|
return kKeyNone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ bool MSWindowsClipboard::empty()
|
||||||
|
|
||||||
// mark clipboard as being owned by deskflow
|
// mark clipboard as being owned by deskflow
|
||||||
HGLOBAL data = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, 1);
|
HGLOBAL data = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, 1);
|
||||||
if (NULL == SetClipboardData(getOwnershipFormat(), data)) {
|
if (nullptr == SetClipboardData(getOwnershipFormat(), data)) {
|
||||||
LOG((CLOG_WARN "failed to set clipboard data"));
|
LOG((CLOG_WARN "failed to set clipboard data"));
|
||||||
GlobalFree(data);
|
GlobalFree(data);
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -98,7 +98,7 @@ void MSWindowsClipboard::add(EFormat format, const std::string &data)
|
||||||
// skip converters for other formats
|
// skip converters for other formats
|
||||||
if (converter->getFormat() == format) {
|
if (converter->getFormat() == format) {
|
||||||
HANDLE win32Data = converter->fromIClipboard(data);
|
HANDLE win32Data = converter->fromIClipboard(data);
|
||||||
if (win32Data != NULL) {
|
if (win32Data != nullptr) {
|
||||||
LOG((CLOG_DEBUG "add %d bytes to clipboard format: %d", data.size(), format));
|
LOG((CLOG_DEBUG "add %d bytes to clipboard format: %d", data.size(), format));
|
||||||
m_facade->write(win32Data, converter->getWin32Format());
|
m_facade->write(win32Data, converter->getWin32Format());
|
||||||
isSucceeded = true;
|
isSucceeded = true;
|
||||||
|
|
@ -155,25 +155,25 @@ bool MSWindowsClipboard::has(EFormat format) const
|
||||||
std::string MSWindowsClipboard::get(EFormat format) const
|
std::string MSWindowsClipboard::get(EFormat format) const
|
||||||
{
|
{
|
||||||
// find the converter for the first clipboard format we can handle
|
// find the converter for the first clipboard format we can handle
|
||||||
IMSWindowsClipboardConverter *converter = NULL;
|
IMSWindowsClipboardConverter *converter = nullptr;
|
||||||
for (ConverterList::const_iterator index = m_converters.begin(); index != m_converters.end(); ++index) {
|
for (ConverterList::const_iterator index = m_converters.begin(); index != m_converters.end(); ++index) {
|
||||||
|
|
||||||
converter = *index;
|
converter = *index;
|
||||||
if (converter->getFormat() == format) {
|
if (converter->getFormat() == format) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
converter = NULL;
|
converter = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no converter then we don't recognize any formats
|
// if no converter then we don't recognize any formats
|
||||||
if (converter == NULL) {
|
if (converter == nullptr) {
|
||||||
LOG((CLOG_WARN "no converter for format %d", format));
|
LOG((CLOG_WARN "no converter for format %d", format));
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
// get a handle to the clipboard data
|
// get a handle to the clipboard data
|
||||||
HANDLE win32Data = GetClipboardData(converter->getWin32Format());
|
HANDLE win32Data = GetClipboardData(converter->getWin32Format());
|
||||||
if (win32Data == NULL) {
|
if (win32Data == nullptr) {
|
||||||
// nb: can't cause this using integ tests; this is only caused when
|
// nb: can't cause this using integ tests; this is only caused when
|
||||||
// the selected converter returns an invalid format -- which you
|
// the selected converter returns an invalid format -- which you
|
||||||
// cannot cause using public functions.
|
// cannot cause using public functions.
|
||||||
|
|
|
||||||
|
|
@ -35,15 +35,15 @@ MSWindowsClipboardAnyTextConverter::fromIClipboard(const std::string &data) cons
|
||||||
|
|
||||||
// copy to memory handle
|
// copy to memory handle
|
||||||
HGLOBAL gData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, size);
|
HGLOBAL gData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, size);
|
||||||
if (gData != NULL) {
|
if (gData != nullptr) {
|
||||||
// get a pointer to the allocated memory
|
// get a pointer to the allocated memory
|
||||||
char *dst = (char *)GlobalLock(gData);
|
char *dst = (char *)GlobalLock(gData);
|
||||||
if (dst != NULL) {
|
if (dst != nullptr) {
|
||||||
memcpy(dst, text.data(), size);
|
memcpy(dst, text.data(), size);
|
||||||
GlobalUnlock(gData);
|
GlobalUnlock(gData);
|
||||||
} else {
|
} else {
|
||||||
GlobalFree(gData);
|
GlobalFree(gData);
|
||||||
gData = NULL;
|
gData = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -55,7 +55,7 @@ std::string MSWindowsClipboardAnyTextConverter::toIClipboard(HANDLE data) const
|
||||||
// get datator
|
// get datator
|
||||||
const char *src = (const char *)GlobalLock(data);
|
const char *src = (const char *)GlobalLock(data);
|
||||||
uint32_t srcSize = (uint32_t)GlobalSize(data);
|
uint32_t srcSize = (uint32_t)GlobalSize(data);
|
||||||
if (src == NULL || srcSize <= 1) {
|
if (src == nullptr || srcSize <= 1) {
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,15 +38,15 @@ MSWindowsClipboardBitmapConverter::fromIClipboard(const std::string &data) const
|
||||||
{
|
{
|
||||||
// copy to memory handle
|
// copy to memory handle
|
||||||
HGLOBAL gData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, data.size());
|
HGLOBAL gData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, data.size());
|
||||||
if (gData != NULL) {
|
if (gData != nullptr) {
|
||||||
// get a pointer to the allocated memory
|
// get a pointer to the allocated memory
|
||||||
char *dst = (char *)GlobalLock(gData);
|
char *dst = (char *)GlobalLock(gData);
|
||||||
if (dst != NULL) {
|
if (dst != nullptr) {
|
||||||
memcpy(dst, data.data(), data.size());
|
memcpy(dst, data.data(), data.size());
|
||||||
GlobalUnlock(gData);
|
GlobalUnlock(gData);
|
||||||
} else {
|
} else {
|
||||||
GlobalFree(gData);
|
GlobalFree(gData);
|
||||||
gData = NULL;
|
gData = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -57,7 +57,7 @@ std::string MSWindowsClipboardBitmapConverter::toIClipboard(HANDLE data) const
|
||||||
{
|
{
|
||||||
// get datator
|
// get datator
|
||||||
LPVOID src = GlobalLock(data);
|
LPVOID src = GlobalLock(data);
|
||||||
if (src == NULL) {
|
if (src == nullptr) {
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
uint32_t srcSize = (uint32_t)GlobalSize(data);
|
uint32_t srcSize = (uint32_t)GlobalSize(data);
|
||||||
|
|
@ -94,8 +94,8 @@ std::string MSWindowsClipboardBitmapConverter::toIClipboard(HANDLE data) const
|
||||||
info.biYPelsPerMeter = 1000;
|
info.biYPelsPerMeter = 1000;
|
||||||
info.biClrUsed = 0;
|
info.biClrUsed = 0;
|
||||||
info.biClrImportant = 0;
|
info.biClrImportant = 0;
|
||||||
HDC dc = GetDC(NULL);
|
HDC dc = GetDC(nullptr);
|
||||||
HBITMAP dst = CreateDIBSection(dc, (BITMAPINFO *)&info, DIB_RGB_COLORS, &raw, NULL, 0);
|
HBITMAP dst = CreateDIBSection(dc, (BITMAPINFO *)&info, DIB_RGB_COLORS, &raw, nullptr, 0);
|
||||||
|
|
||||||
// find the start of the pixel data
|
// find the start of the pixel data
|
||||||
const char *srcBits = (const char *)bitmap + bitmap->bmiHeader.biSize;
|
const char *srcBits = (const char *)bitmap + bitmap->bmiHeader.biSize;
|
||||||
|
|
@ -125,7 +125,7 @@ std::string MSWindowsClipboardBitmapConverter::toIClipboard(HANDLE data) const
|
||||||
|
|
||||||
// clean up GDI
|
// clean up GDI
|
||||||
DeleteObject(dst);
|
DeleteObject(dst);
|
||||||
ReleaseDC(NULL, dc);
|
ReleaseDC(nullptr, dc);
|
||||||
|
|
||||||
// release handle
|
// release handle
|
||||||
GlobalUnlock(data);
|
GlobalUnlock(data);
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
void MSWindowsClipboardFacade::write(HANDLE win32Data, UINT win32Format)
|
void MSWindowsClipboardFacade::write(HANDLE win32Data, UINT win32Format)
|
||||||
{
|
{
|
||||||
if (SetClipboardData(win32Format, win32Data) == NULL) {
|
if (SetClipboardData(win32Format, win32Data) == nullptr) {
|
||||||
// free converted data if we couldn't put it on
|
// free converted data if we couldn't put it on
|
||||||
// the clipboard.
|
// the clipboard.
|
||||||
// nb: couldn't cause this in integ tests.
|
// nb: couldn't cause this in integ tests.
|
||||||
|
|
|
||||||
|
|
@ -119,10 +119,10 @@ MSWindowsDesks::MSWindowsDesks(
|
||||||
m_xCenter(0),
|
m_xCenter(0),
|
||||||
m_yCenter(0),
|
m_yCenter(0),
|
||||||
m_multimon(false),
|
m_multimon(false),
|
||||||
m_timer(NULL),
|
m_timer(nullptr),
|
||||||
m_screensaver(screensaver),
|
m_screensaver(screensaver),
|
||||||
m_screensaverNotify(false),
|
m_screensaverNotify(false),
|
||||||
m_activeDesk(NULL),
|
m_activeDesk(nullptr),
|
||||||
m_activeDeskName(),
|
m_activeDeskName(),
|
||||||
m_mutex(),
|
m_mutex(),
|
||||||
m_deskReady(&m_mutex, false),
|
m_deskReady(&m_mutex, false),
|
||||||
|
|
@ -155,7 +155,7 @@ void MSWindowsDesks::enable()
|
||||||
// which desk is active and reinstalls the hooks as necessary.
|
// which desk is active and reinstalls the hooks as necessary.
|
||||||
// we wouldn't need this if windows notified us of a desktop
|
// we wouldn't need this if windows notified us of a desktop
|
||||||
// change but as far as i can tell it doesn't.
|
// change but as far as i can tell it doesn't.
|
||||||
m_timer = m_events->newTimer(0.2, NULL);
|
m_timer = m_events->newTimer(0.2, nullptr);
|
||||||
m_events->adoptHandler(
|
m_events->adoptHandler(
|
||||||
Event::kTimer, m_timer, new TMethodEventJob<MSWindowsDesks>(this, &MSWindowsDesks::handleCheckDesk)
|
Event::kTimer, m_timer, new TMethodEventJob<MSWindowsDesks>(this, &MSWindowsDesks::handleCheckDesk)
|
||||||
);
|
);
|
||||||
|
|
@ -166,10 +166,10 @@ void MSWindowsDesks::enable()
|
||||||
void MSWindowsDesks::disable()
|
void MSWindowsDesks::disable()
|
||||||
{
|
{
|
||||||
// remove timer
|
// remove timer
|
||||||
if (m_timer != NULL) {
|
if (m_timer != nullptr) {
|
||||||
m_events->removeHandler(Event::kTimer, m_timer);
|
m_events->removeHandler(Event::kTimer, m_timer);
|
||||||
m_events->deleteTimer(m_timer);
|
m_events->deleteTimer(m_timer);
|
||||||
m_timer = NULL;
|
m_timer = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// destroy desks
|
// destroy desks
|
||||||
|
|
@ -321,7 +321,7 @@ void MSWindowsDesks::fakeMouseWheel(int32_t xDelta, int32_t yDelta) const
|
||||||
|
|
||||||
void MSWindowsDesks::sendMessage(UINT msg, WPARAM wParam, LPARAM lParam) const
|
void MSWindowsDesks::sendMessage(UINT msg, WPARAM wParam, LPARAM lParam) const
|
||||||
{
|
{
|
||||||
if (m_activeDesk != NULL && m_activeDesk->m_window != NULL) {
|
if (m_activeDesk != nullptr && m_activeDesk->m_window != nullptr) {
|
||||||
PostThreadMessage(m_activeDesk->m_threadID, msg, wParam, lParam);
|
PostThreadMessage(m_activeDesk->m_threadID, msg, wParam, lParam);
|
||||||
waitForDesk();
|
waitForDesk();
|
||||||
}
|
}
|
||||||
|
|
@ -345,7 +345,7 @@ MSWindowsDesks::createBlankCursor() const
|
||||||
|
|
||||||
void MSWindowsDesks::destroyCursor(HCURSOR cursor) const
|
void MSWindowsDesks::destroyCursor(HCURSOR cursor) const
|
||||||
{
|
{
|
||||||
if (cursor != NULL) {
|
if (cursor != nullptr) {
|
||||||
DestroyCursor(cursor);
|
DestroyCursor(cursor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -359,12 +359,12 @@ ATOM MSWindowsDesks::createDeskWindowClass(bool isPrimary) const
|
||||||
classInfo.cbClsExtra = 0;
|
classInfo.cbClsExtra = 0;
|
||||||
classInfo.cbWndExtra = 0;
|
classInfo.cbWndExtra = 0;
|
||||||
classInfo.hInstance = MSWindowsScreen::getWindowInstance();
|
classInfo.hInstance = MSWindowsScreen::getWindowInstance();
|
||||||
classInfo.hIcon = NULL;
|
classInfo.hIcon = nullptr;
|
||||||
classInfo.hCursor = m_cursor;
|
classInfo.hCursor = m_cursor;
|
||||||
classInfo.hbrBackground = NULL;
|
classInfo.hbrBackground = nullptr;
|
||||||
classInfo.lpszMenuName = NULL;
|
classInfo.lpszMenuName = nullptr;
|
||||||
classInfo.lpszClassName = "DeskflowDesk";
|
classInfo.lpszClassName = "DeskflowDesk";
|
||||||
classInfo.hIconSm = NULL;
|
classInfo.hIconSm = nullptr;
|
||||||
return RegisterClassEx(&classInfo);
|
return RegisterClassEx(&classInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -378,10 +378,10 @@ void MSWindowsDesks::destroyClass(ATOM windowClass) const
|
||||||
HWND MSWindowsDesks::createWindow(ATOM windowClass, const char *name) const
|
HWND MSWindowsDesks::createWindow(ATOM windowClass, const char *name) const
|
||||||
{
|
{
|
||||||
HWND window = CreateWindowEx(
|
HWND window = CreateWindowEx(
|
||||||
WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW, MAKEINTATOM(windowClass), name, WS_POPUP, 0, 0, 1, 1, NULL, NULL,
|
WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW, MAKEINTATOM(windowClass), name, WS_POPUP, 0, 0, 1, 1, nullptr, nullptr,
|
||||||
MSWindowsScreen::getWindowInstance(), NULL
|
MSWindowsScreen::getWindowInstance(), nullptr
|
||||||
);
|
);
|
||||||
if (window == NULL) {
|
if (window == nullptr) {
|
||||||
LOG((CLOG_ERR "failed to create window: %d", GetLastError()));
|
LOG((CLOG_ERR "failed to create window: %d", GetLastError()));
|
||||||
throw XScreenOpenFailure();
|
throw XScreenOpenFailure();
|
||||||
}
|
}
|
||||||
|
|
@ -390,7 +390,7 @@ HWND MSWindowsDesks::createWindow(ATOM windowClass, const char *name) const
|
||||||
|
|
||||||
void MSWindowsDesks::destroyWindow(HWND hwnd) const
|
void MSWindowsDesks::destroyWindow(HWND hwnd) const
|
||||||
{
|
{
|
||||||
if (hwnd != NULL) {
|
if (hwnd != nullptr) {
|
||||||
DestroyWindow(hwnd);
|
DestroyWindow(hwnd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -481,13 +481,13 @@ void MSWindowsDesks::deskEnter(Desk *desk)
|
||||||
// (mouse over activation) but i've no idea how to do that.
|
// (mouse over activation) but i've no idea how to do that.
|
||||||
// the obvious workaround of using SetWindowPos() to move it back
|
// the obvious workaround of using SetWindowPos() to move it back
|
||||||
// after being raised doesn't work.
|
// after being raised doesn't work.
|
||||||
DWORD thisThread = GetWindowThreadProcessId(desk->m_window, NULL);
|
DWORD thisThread = GetWindowThreadProcessId(desk->m_window, nullptr);
|
||||||
DWORD thatThread = GetWindowThreadProcessId(desk->m_foregroundWindow, NULL);
|
DWORD thatThread = GetWindowThreadProcessId(desk->m_foregroundWindow, nullptr);
|
||||||
AttachThreadInput(thatThread, thisThread, TRUE);
|
AttachThreadInput(thatThread, thisThread, TRUE);
|
||||||
SetForegroundWindow(desk->m_foregroundWindow);
|
SetForegroundWindow(desk->m_foregroundWindow);
|
||||||
AttachThreadInput(thatThread, thisThread, FALSE);
|
AttachThreadInput(thatThread, thisThread, FALSE);
|
||||||
EnableWindow(desk->m_window, desk->m_lowLevel ? FALSE : TRUE);
|
EnableWindow(desk->m_window, desk->m_lowLevel ? FALSE : TRUE);
|
||||||
desk->m_foregroundWindow = NULL;
|
desk->m_foregroundWindow = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MSWindowsDesks::deskLeave(Desk *desk, HKL keyLayout)
|
void MSWindowsDesks::deskLeave(Desk *desk, HKL keyLayout)
|
||||||
|
|
@ -537,11 +537,11 @@ void MSWindowsDesks::deskLeave(Desk *desk, HKL keyLayout)
|
||||||
// need to disable the window on deskEnter.
|
// need to disable the window on deskEnter.
|
||||||
else {
|
else {
|
||||||
desk->m_foregroundWindow = getForegroundWindow();
|
desk->m_foregroundWindow = getForegroundWindow();
|
||||||
if (desk->m_foregroundWindow != NULL) {
|
if (desk->m_foregroundWindow != nullptr) {
|
||||||
EnableWindow(desk->m_window, TRUE);
|
EnableWindow(desk->m_window, TRUE);
|
||||||
SetActiveWindow(desk->m_window);
|
SetActiveWindow(desk->m_window);
|
||||||
DWORD thisThread = GetWindowThreadProcessId(desk->m_window, NULL);
|
DWORD thisThread = GetWindowThreadProcessId(desk->m_window, nullptr);
|
||||||
DWORD thatThread = GetWindowThreadProcessId(desk->m_foregroundWindow, NULL);
|
DWORD thatThread = GetWindowThreadProcessId(desk->m_foregroundWindow, nullptr);
|
||||||
|
|
||||||
AttachThreadInput(thatThread, thisThread, TRUE);
|
AttachThreadInput(thatThread, thisThread, TRUE);
|
||||||
SetForegroundWindow(desk->m_window);
|
SetForegroundWindow(desk->m_window);
|
||||||
|
|
@ -571,11 +571,11 @@ void MSWindowsDesks::deskThread(void *vdesk)
|
||||||
// use given desktop for this thread
|
// use given desktop for this thread
|
||||||
Desk *desk = static_cast<Desk *>(vdesk);
|
Desk *desk = static_cast<Desk *>(vdesk);
|
||||||
desk->m_threadID = GetCurrentThreadId();
|
desk->m_threadID = GetCurrentThreadId();
|
||||||
desk->m_window = NULL;
|
desk->m_window = nullptr;
|
||||||
desk->m_foregroundWindow = NULL;
|
desk->m_foregroundWindow = nullptr;
|
||||||
if (desk->m_desk != NULL && SetThreadDesktop(desk->m_desk) != 0) {
|
if (desk->m_desk != nullptr && SetThreadDesktop(desk->m_desk) != 0) {
|
||||||
// create a message queue
|
// create a message queue
|
||||||
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
|
PeekMessage(&msg, nullptr, 0, 0, PM_NOREMOVE);
|
||||||
|
|
||||||
// create a window. we use this window to hide the cursor.
|
// create a window. we use this window to hide the cursor.
|
||||||
try {
|
try {
|
||||||
|
|
@ -594,7 +594,7 @@ void MSWindowsDesks::deskThread(void *vdesk)
|
||||||
m_deskReady.broadcast();
|
m_deskReady.broadcast();
|
||||||
}
|
}
|
||||||
|
|
||||||
while (GetMessage(&msg, NULL, 0, 0)) {
|
while (GetMessage(&msg, nullptr, 0, 0)) {
|
||||||
switch (msg.message) {
|
switch (msg.message) {
|
||||||
default:
|
default:
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
|
|
@ -705,10 +705,10 @@ void MSWindowsDesks::deskThread(void *vdesk)
|
||||||
|
|
||||||
// clean up
|
// clean up
|
||||||
deskEnter(desk);
|
deskEnter(desk);
|
||||||
if (desk->m_window != NULL) {
|
if (desk->m_window != nullptr) {
|
||||||
DestroyWindow(desk->m_window);
|
DestroyWindow(desk->m_window);
|
||||||
}
|
}
|
||||||
if (desk->m_desk != NULL) {
|
if (desk->m_desk != nullptr) {
|
||||||
closeDesktop(desk->m_desk);
|
closeDesktop(desk->m_desk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -735,7 +735,7 @@ void MSWindowsDesks::removeDesks()
|
||||||
delete desk;
|
delete desk;
|
||||||
}
|
}
|
||||||
m_desks.clear();
|
m_desks.clear();
|
||||||
m_activeDesk = NULL;
|
m_activeDesk = nullptr;
|
||||||
m_activeDeskName = "";
|
m_activeDeskName = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -805,7 +805,7 @@ void MSWindowsDesks::checkDesk()
|
||||||
|
|
||||||
bool MSWindowsDesks::isDeskAccessible(const Desk *desk) const
|
bool MSWindowsDesks::isDeskAccessible(const Desk *desk) const
|
||||||
{
|
{
|
||||||
return (desk != NULL && desk->m_desk != NULL);
|
return (desk != nullptr && desk->m_desk != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MSWindowsDesks::waitForDesk() const
|
void MSWindowsDesks::waitForDesk() const
|
||||||
|
|
@ -840,18 +840,18 @@ MSWindowsDesks::openInputDesktop()
|
||||||
|
|
||||||
void MSWindowsDesks::closeDesktop(HDESK desk)
|
void MSWindowsDesks::closeDesktop(HDESK desk)
|
||||||
{
|
{
|
||||||
if (desk != NULL) {
|
if (desk != nullptr) {
|
||||||
CloseDesktop(desk);
|
CloseDesktop(desk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string MSWindowsDesks::getDesktopName(HDESK desk)
|
std::string MSWindowsDesks::getDesktopName(HDESK desk)
|
||||||
{
|
{
|
||||||
if (desk == NULL) {
|
if (desk == nullptr) {
|
||||||
return std::string();
|
return std::string();
|
||||||
} else {
|
} else {
|
||||||
DWORD size;
|
DWORD size;
|
||||||
GetUserObjectInformation(desk, UOI_NAME, NULL, 0, &size);
|
GetUserObjectInformation(desk, UOI_NAME, nullptr, 0, &size);
|
||||||
TCHAR *name = (TCHAR *)alloca(size + sizeof(TCHAR));
|
TCHAR *name = (TCHAR *)alloca(size + sizeof(TCHAR));
|
||||||
GetUserObjectInformation(desk, UOI_NAME, name, size, &size);
|
GetUserObjectInformation(desk, UOI_NAME, name, size, &size);
|
||||||
std::string result(name);
|
std::string result(name);
|
||||||
|
|
@ -861,12 +861,12 @@ std::string MSWindowsDesks::getDesktopName(HDESK desk)
|
||||||
|
|
||||||
HWND MSWindowsDesks::getForegroundWindow() const
|
HWND MSWindowsDesks::getForegroundWindow() const
|
||||||
{
|
{
|
||||||
// Ideally we'd return NULL as much as possible, only returning
|
// Ideally we'd return nullptr as much as possible, only returning
|
||||||
// the actual foreground window when we know it's going to mess
|
// the actual foreground window when we know it's going to mess
|
||||||
// up our keyboard input. For now we'll just let the user
|
// up our keyboard input. For now we'll just let the user
|
||||||
// decide.
|
// decide.
|
||||||
if (m_leaveForegroundOption) {
|
if (m_leaveForegroundOption) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return GetForegroundWindow();
|
return GetForegroundWindow();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
void getDropData(IDataObject *pDataObject);
|
void getDropData(IDataObject *pDataObject);
|
||||||
|
|
||||||
MSWindowsDropTarget *MSWindowsDropTarget::s_instance = NULL;
|
MSWindowsDropTarget *MSWindowsDropTarget::s_instance = nullptr;
|
||||||
|
|
||||||
MSWindowsDropTarget::MSWindowsDropTarget() : m_refCount(1), m_allowDrop(false)
|
MSWindowsDropTarget::MSWindowsDropTarget() : m_refCount(1), m_allowDrop(false)
|
||||||
{
|
{
|
||||||
|
|
@ -27,7 +27,7 @@ MSWindowsDropTarget::~MSWindowsDropTarget()
|
||||||
|
|
||||||
MSWindowsDropTarget &MSWindowsDropTarget::instance()
|
MSWindowsDropTarget &MSWindowsDropTarget::instance()
|
||||||
{
|
{
|
||||||
assert(s_instance != NULL);
|
assert(s_instance != nullptr);
|
||||||
return *s_instance;
|
return *s_instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ MSWindowsEventQueueBuffer::MSWindowsEventQueueBuffer(IEventQueue *events) : m_ev
|
||||||
|
|
||||||
// make sure this thread has a message queue
|
// make sure this thread has a message queue
|
||||||
MSG dummy;
|
MSG dummy;
|
||||||
PeekMessage(&dummy, NULL, WM_USER, WM_USER, PM_NOREMOVE);
|
PeekMessage(&dummy, nullptr, WM_USER, WM_USER, PM_NOREMOVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
MSWindowsEventQueueBuffer::~MSWindowsEventQueueBuffer()
|
MSWindowsEventQueueBuffer::~MSWindowsEventQueueBuffer()
|
||||||
|
|
@ -77,12 +77,12 @@ IEventQueueBuffer::Type MSWindowsEventQueueBuffer::getEvent(Event &event, uint32
|
||||||
// if a message has been sent to our window but GetMessage will
|
// if a message has been sent to our window but GetMessage will
|
||||||
// dispatch that message behind our backs and block. PeekMessage
|
// dispatch that message behind our backs and block. PeekMessage
|
||||||
// will also dispatch behind our backs but won't block.
|
// will also dispatch behind our backs but won't block.
|
||||||
if (!PeekMessage(&m_event, NULL, 0, 0, PM_NOREMOVE) && !PeekMessage(&m_event, (HWND)-1, 0, 0, PM_NOREMOVE)) {
|
if (!PeekMessage(&m_event, nullptr, 0, 0, PM_NOREMOVE) && !PeekMessage(&m_event, (HWND)-1, 0, 0, PM_NOREMOVE)) {
|
||||||
return kNone;
|
return kNone;
|
||||||
}
|
}
|
||||||
|
|
||||||
// BOOL. yeah, right.
|
// BOOL. yeah, right.
|
||||||
BOOL result = GetMessage(&m_event, NULL, 0, 0);
|
BOOL result = GetMessage(&m_event, nullptr, 0, 0);
|
||||||
if (result == -1) {
|
if (result == -1) {
|
||||||
return kNone;
|
return kNone;
|
||||||
} else if (result == 0) {
|
} else if (result == 0) {
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ static const char *g_name = "dfwhook";
|
||||||
|
|
||||||
static DWORD g_processID = 0;
|
static DWORD g_processID = 0;
|
||||||
static DWORD g_threadID = 0;
|
static DWORD g_threadID = 0;
|
||||||
static HHOOK g_getMessage = NULL;
|
static HHOOK g_getMessage = nullptr;
|
||||||
static HHOOK g_keyboardLL = NULL;
|
static HHOOK g_keyboardLL = nullptr;
|
||||||
static HHOOK g_mouseLL = NULL;
|
static HHOOK g_mouseLL = nullptr;
|
||||||
static bool g_screenSaver = false;
|
static bool g_screenSaver = false;
|
||||||
static EHookMode g_mode = kHOOK_DISABLE;
|
static EHookMode g_mode = kHOOK_DISABLE;
|
||||||
static uint32_t g_zoneSides = 0;
|
static uint32_t g_zoneSides = 0;
|
||||||
|
|
@ -69,7 +69,7 @@ int MSWindowsHook::init(DWORD threadID)
|
||||||
// still running or if it died without cleaning up.
|
// still running or if it died without cleaning up.
|
||||||
if (g_processID != 0 && g_processID != GetCurrentProcessId()) {
|
if (g_processID != 0 && g_processID != GetCurrentProcessId()) {
|
||||||
HANDLE process = OpenProcess(STANDARD_RIGHTS_REQUIRED, FALSE, g_processID);
|
HANDLE process = OpenProcess(STANDARD_RIGHTS_REQUIRED, FALSE, g_processID);
|
||||||
if (process != NULL) {
|
if (process != nullptr) {
|
||||||
// old process (probably) still exists so refuse to
|
// old process (probably) still exists so refuse to
|
||||||
// reinitialize this DLL (and thus steal it from the
|
// reinitialize this DLL (and thus steal it from the
|
||||||
// old process).
|
// old process).
|
||||||
|
|
@ -83,9 +83,9 @@ int MSWindowsHook::init(DWORD threadID)
|
||||||
// removed the hooks so we just need to reset our state.
|
// removed the hooks so we just need to reset our state.
|
||||||
g_processID = GetCurrentProcessId();
|
g_processID = GetCurrentProcessId();
|
||||||
g_threadID = 0;
|
g_threadID = 0;
|
||||||
g_getMessage = NULL;
|
g_getMessage = nullptr;
|
||||||
g_keyboardLL = NULL;
|
g_keyboardLL = nullptr;
|
||||||
g_mouseLL = NULL;
|
g_mouseLL = nullptr;
|
||||||
g_screenSaver = false;
|
g_screenSaver = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -589,7 +589,7 @@ static LRESULT CALLBACK mouseLLHook(int code, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
EHookResult MSWindowsHook::install()
|
EHookResult MSWindowsHook::install()
|
||||||
{
|
{
|
||||||
assert(g_getMessage == NULL || g_screenSaver);
|
assert(g_getMessage == nullptr || g_screenSaver);
|
||||||
|
|
||||||
// must be initialized
|
// must be initialized
|
||||||
if (g_threadID == 0) {
|
if (g_threadID == 0) {
|
||||||
|
|
@ -604,32 +604,32 @@ EHookResult MSWindowsHook::install()
|
||||||
g_fakeServerInput = false;
|
g_fakeServerInput = false;
|
||||||
|
|
||||||
// install low-level hooks. we require that they both get installed.
|
// install low-level hooks. we require that they both get installed.
|
||||||
g_mouseLL = SetWindowsHookEx(WH_MOUSE_LL, &mouseLLHook, NULL, 0);
|
g_mouseLL = SetWindowsHookEx(WH_MOUSE_LL, &mouseLLHook, nullptr, 0);
|
||||||
#if !NO_GRAB_KEYBOARD
|
#if !NO_GRAB_KEYBOARD
|
||||||
g_keyboardLL = SetWindowsHookEx(WH_KEYBOARD_LL, &keyboardLLHook, NULL, 0);
|
g_keyboardLL = SetWindowsHookEx(WH_KEYBOARD_LL, &keyboardLLHook, nullptr, 0);
|
||||||
if (g_mouseLL == NULL || g_keyboardLL == NULL) {
|
if (g_mouseLL == nullptr || g_keyboardLL == nullptr) {
|
||||||
if (g_keyboardLL != NULL) {
|
if (g_keyboardLL != nullptr) {
|
||||||
UnhookWindowsHookEx(g_keyboardLL);
|
UnhookWindowsHookEx(g_keyboardLL);
|
||||||
g_keyboardLL = NULL;
|
g_keyboardLL = nullptr;
|
||||||
}
|
}
|
||||||
if (g_mouseLL != NULL) {
|
if (g_mouseLL != nullptr) {
|
||||||
UnhookWindowsHookEx(g_mouseLL);
|
UnhookWindowsHookEx(g_mouseLL);
|
||||||
g_mouseLL = NULL;
|
g_mouseLL = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// check that we got all the hooks we wanted
|
// check that we got all the hooks we wanted
|
||||||
if ((g_mouseLL == NULL) ||
|
if ((g_mouseLL == nullptr) ||
|
||||||
#if !NO_GRAB_KEYBOARD
|
#if !NO_GRAB_KEYBOARD
|
||||||
(g_keyboardLL == NULL)
|
(g_keyboardLL == nullptr)
|
||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
uninstall();
|
uninstall();
|
||||||
return kHOOK_FAILED;
|
return kHOOK_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_keyboardLL != NULL || g_mouseLL != NULL) {
|
if (g_keyboardLL != nullptr || g_mouseLL != nullptr) {
|
||||||
g_hookThread = GetCurrentThreadId();
|
g_hookThread = GetCurrentThreadId();
|
||||||
return kHOOK_OKAY_LL;
|
return kHOOK_OKAY_LL;
|
||||||
}
|
}
|
||||||
|
|
@ -644,17 +644,17 @@ int MSWindowsHook::uninstall()
|
||||||
g_deadLParam = 0;
|
g_deadLParam = 0;
|
||||||
|
|
||||||
// uninstall hooks
|
// uninstall hooks
|
||||||
if (g_keyboardLL != NULL) {
|
if (g_keyboardLL != nullptr) {
|
||||||
UnhookWindowsHookEx(g_keyboardLL);
|
UnhookWindowsHookEx(g_keyboardLL);
|
||||||
g_keyboardLL = NULL;
|
g_keyboardLL = nullptr;
|
||||||
}
|
}
|
||||||
if (g_mouseLL != NULL) {
|
if (g_mouseLL != nullptr) {
|
||||||
UnhookWindowsHookEx(g_mouseLL);
|
UnhookWindowsHookEx(g_mouseLL);
|
||||||
g_mouseLL = NULL;
|
g_mouseLL = nullptr;
|
||||||
}
|
}
|
||||||
if (g_getMessage != NULL && !g_screenSaver) {
|
if (g_getMessage != nullptr && !g_screenSaver) {
|
||||||
UnhookWindowsHookEx(g_getMessage);
|
UnhookWindowsHookEx(g_getMessage);
|
||||||
g_getMessage = NULL;
|
g_getMessage = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -686,19 +686,19 @@ int MSWindowsHook::installScreenSaver()
|
||||||
g_screenSaver = true;
|
g_screenSaver = true;
|
||||||
|
|
||||||
// install hook unless it's already installed
|
// install hook unless it's already installed
|
||||||
if (g_getMessage == NULL) {
|
if (g_getMessage == nullptr) {
|
||||||
g_getMessage = SetWindowsHookEx(WH_GETMESSAGE, &getMessageHook, NULL, 0);
|
g_getMessage = SetWindowsHookEx(WH_GETMESSAGE, &getMessageHook, nullptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (g_getMessage != NULL) ? 1 : 0;
|
return (g_getMessage != nullptr) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MSWindowsHook::uninstallScreenSaver()
|
int MSWindowsHook::uninstallScreenSaver()
|
||||||
{
|
{
|
||||||
// uninstall hook unless the mouse wheel hook is installed
|
// uninstall hook unless the mouse wheel hook is installed
|
||||||
if (g_getMessage != NULL) {
|
if (g_getMessage != nullptr) {
|
||||||
UnhookWindowsHookEx(g_getMessage);
|
UnhookWindowsHookEx(g_getMessage);
|
||||||
g_getMessage = NULL;
|
g_getMessage = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// screen saver hook is no longer installed
|
// screen saver hook is no longer installed
|
||||||
|
|
|
||||||
|
|
@ -562,7 +562,7 @@ MSWindowsKeyState::MSWindowsKeyState(
|
||||||
m_eventTarget(eventTarget),
|
m_eventTarget(eventTarget),
|
||||||
m_desks(desks),
|
m_desks(desks),
|
||||||
m_keyLayout(GetKeyboardLayout(0)),
|
m_keyLayout(GetKeyboardLayout(0)),
|
||||||
m_fixTimer(NULL),
|
m_fixTimer(nullptr),
|
||||||
m_lastDown(0),
|
m_lastDown(0),
|
||||||
m_useSavedModifiers(false),
|
m_useSavedModifiers(false),
|
||||||
m_savedModifiers(0),
|
m_savedModifiers(0),
|
||||||
|
|
@ -580,7 +580,7 @@ MSWindowsKeyState::MSWindowsKeyState(
|
||||||
m_eventTarget(eventTarget),
|
m_eventTarget(eventTarget),
|
||||||
m_desks(desks),
|
m_desks(desks),
|
||||||
m_keyLayout(GetKeyboardLayout(0)),
|
m_keyLayout(GetKeyboardLayout(0)),
|
||||||
m_fixTimer(NULL),
|
m_fixTimer(nullptr),
|
||||||
m_lastDown(0),
|
m_lastDown(0),
|
||||||
m_useSavedModifiers(false),
|
m_useSavedModifiers(false),
|
||||||
m_savedModifiers(0),
|
m_savedModifiers(0),
|
||||||
|
|
@ -604,10 +604,10 @@ void MSWindowsKeyState::init()
|
||||||
|
|
||||||
void MSWindowsKeyState::disable()
|
void MSWindowsKeyState::disable()
|
||||||
{
|
{
|
||||||
if (m_fixTimer != NULL) {
|
if (m_fixTimer != nullptr) {
|
||||||
m_events->removeHandler(Event::kTimer, m_fixTimer);
|
m_events->removeHandler(Event::kTimer, m_fixTimer);
|
||||||
m_events->deleteTimer(m_fixTimer);
|
m_events->deleteTimer(m_fixTimer);
|
||||||
m_fixTimer = NULL;
|
m_fixTimer = nullptr;
|
||||||
}
|
}
|
||||||
m_lastDown = 0;
|
m_lastDown = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -672,7 +672,7 @@ KeyID MSWindowsKeyState::mapKeyFromEvent(WPARAM charAndVirtKey, LPARAM info, Key
|
||||||
}
|
}
|
||||||
|
|
||||||
// set modifier mask
|
// set modifier mask
|
||||||
if (maskOut != NULL) {
|
if (maskOut != nullptr) {
|
||||||
KeyModifierMask active = getActiveModifiers();
|
KeyModifierMask active = getActiveModifiers();
|
||||||
if (!noAltGr && (active & s_controlAlt) == s_controlAlt) {
|
if (!noAltGr && (active & s_controlAlt) == s_controlAlt) {
|
||||||
// if !noAltGr then we're only interested in matching the
|
// if !noAltGr then we're only interested in matching the
|
||||||
|
|
@ -813,7 +813,7 @@ int32_t MSWindowsKeyState::pollActiveGroup() const
|
||||||
{
|
{
|
||||||
// determine the thread that'll receive this event
|
// determine the thread that'll receive this event
|
||||||
HWND targetWindow = GetForegroundWindow();
|
HWND targetWindow = GetForegroundWindow();
|
||||||
DWORD targetThread = GetWindowThreadProcessId(targetWindow, NULL);
|
DWORD targetThread = GetWindowThreadProcessId(targetWindow, nullptr);
|
||||||
|
|
||||||
// get keyboard layout for the thread
|
// get keyboard layout for the thread
|
||||||
HKL hkl = GetKeyboardLayout(targetThread);
|
HKL hkl = GetKeyboardLayout(targetThread);
|
||||||
|
|
@ -822,7 +822,7 @@ int32_t MSWindowsKeyState::pollActiveGroup() const
|
||||||
// GetKeyboardLayout failed. Maybe targetWindow is a console window.
|
// GetKeyboardLayout failed. Maybe targetWindow is a console window.
|
||||||
// We're getting the keyboard layout of the desktop instead.
|
// We're getting the keyboard layout of the desktop instead.
|
||||||
targetWindow = GetDesktopWindow();
|
targetWindow = GetDesktopWindow();
|
||||||
targetThread = GetWindowThreadProcessId(targetWindow, NULL);
|
targetThread = GetWindowThreadProcessId(targetWindow, nullptr);
|
||||||
hkl = GetKeyboardLayout(targetThread);
|
hkl = GetKeyboardLayout(targetThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1225,7 +1225,7 @@ KeyModifierMask &MSWindowsKeyState::getActiveModifiersRValue()
|
||||||
bool MSWindowsKeyState::getGroups(GroupList &groups) const
|
bool MSWindowsKeyState::getGroups(GroupList &groups) const
|
||||||
{
|
{
|
||||||
// get keyboard layouts
|
// get keyboard layouts
|
||||||
uint32_t newNumLayouts = GetKeyboardLayoutList(0, NULL);
|
uint32_t newNumLayouts = GetKeyboardLayoutList(0, nullptr);
|
||||||
if (newNumLayouts == 0) {
|
if (newNumLayouts == 0) {
|
||||||
LOG((CLOG_DEBUG1 "can't get keyboard layouts"));
|
LOG((CLOG_DEBUG1 "can't get keyboard layouts"));
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -216,7 +216,7 @@ private:
|
||||||
KeyModifierMask m_savedModifiers;
|
KeyModifierMask m_savedModifiers;
|
||||||
KeyModifierMask m_originalSavedModifiers;
|
KeyModifierMask m_originalSavedModifiers;
|
||||||
|
|
||||||
// pointer to ToUnicodeEx. on win95 family this will be NULL.
|
// pointer to ToUnicodeEx. on win95 family this will be nullptr.
|
||||||
typedef int(WINAPI *ToUnicodeEx_t)(
|
typedef int(WINAPI *ToUnicodeEx_t)(
|
||||||
UINT wVirtKey, UINT wScanCode, PBYTE lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags, HKL dwhkl
|
UINT wVirtKey, UINT wScanCode, PBYTE lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags, HKL dwhkl
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -78,8 +78,8 @@
|
||||||
// MSWindowsScreen
|
// MSWindowsScreen
|
||||||
//
|
//
|
||||||
|
|
||||||
HINSTANCE MSWindowsScreen::s_windowInstance = NULL;
|
HINSTANCE MSWindowsScreen::s_windowInstance = nullptr;
|
||||||
MSWindowsScreen *MSWindowsScreen::s_screen = NULL;
|
MSWindowsScreen *MSWindowsScreen::s_screen = nullptr;
|
||||||
|
|
||||||
MSWindowsScreen::MSWindowsScreen(
|
MSWindowsScreen::MSWindowsScreen(
|
||||||
bool isPrimary, bool noHooks, IEventQueue *events, bool enableLangSync,
|
bool isPrimary, bool noHooks, IEventQueue *events, bool enableLangSync,
|
||||||
|
|
@ -102,24 +102,24 @@ MSWindowsScreen::MSWindowsScreen(
|
||||||
m_sequenceNumber(0),
|
m_sequenceNumber(0),
|
||||||
m_mark(0),
|
m_mark(0),
|
||||||
m_markReceived(0),
|
m_markReceived(0),
|
||||||
m_fixTimer(NULL),
|
m_fixTimer(nullptr),
|
||||||
m_keyLayout(NULL),
|
m_keyLayout(nullptr),
|
||||||
m_screensaver(NULL),
|
m_screensaver(nullptr),
|
||||||
m_screensaverNotify(false),
|
m_screensaverNotify(false),
|
||||||
m_screensaverActive(false),
|
m_screensaverActive(false),
|
||||||
m_window(NULL),
|
m_window(nullptr),
|
||||||
m_clipboardSequenceNumber(0),
|
m_clipboardSequenceNumber(0),
|
||||||
m_ownClipboard(false),
|
m_ownClipboard(false),
|
||||||
m_desks(NULL),
|
m_desks(nullptr),
|
||||||
m_keyState(NULL),
|
m_keyState(nullptr),
|
||||||
m_hasMouse(GetSystemMetrics(SM_MOUSEPRESENT) != 0),
|
m_hasMouse(GetSystemMetrics(SM_MOUSEPRESENT) != 0),
|
||||||
m_showingMouse(false),
|
m_showingMouse(false),
|
||||||
m_events(events),
|
m_events(events),
|
||||||
m_dropWindow(NULL),
|
m_dropWindow(nullptr),
|
||||||
m_dropWindowSize(20)
|
m_dropWindowSize(20)
|
||||||
{
|
{
|
||||||
assert(s_windowInstance != NULL);
|
assert(s_windowInstance != nullptr);
|
||||||
assert(s_screen == NULL);
|
assert(s_screen == nullptr);
|
||||||
|
|
||||||
s_screen = this;
|
s_screen = this;
|
||||||
try {
|
try {
|
||||||
|
|
@ -145,7 +145,7 @@ MSWindowsScreen::MSWindowsScreen(
|
||||||
|
|
||||||
// SHGetFolderPath is deprecated in vista, but use it for xp support.
|
// SHGetFolderPath is deprecated in vista, but use it for xp support.
|
||||||
char desktopPath[MAX_PATH];
|
char desktopPath[MAX_PATH];
|
||||||
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_DESKTOP, NULL, 0, desktopPath))) {
|
if (SUCCEEDED(SHGetFolderPath(nullptr, CSIDL_DESKTOP, nullptr, 0, desktopPath))) {
|
||||||
m_desktopPath = std::string(desktopPath);
|
m_desktopPath = std::string(desktopPath);
|
||||||
LOG((CLOG_DEBUG "using desktop for file drag-drop target: %s", m_desktopPath.c_str()));
|
LOG((CLOG_DEBUG "using desktop for file drag-drop target: %s", m_desktopPath.c_str()));
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -166,7 +166,7 @@ MSWindowsScreen::MSWindowsScreen(
|
||||||
delete m_screensaver;
|
delete m_screensaver;
|
||||||
destroyWindow(m_window);
|
destroyWindow(m_window);
|
||||||
destroyClass(m_class);
|
destroyClass(m_class);
|
||||||
s_screen = NULL;
|
s_screen = nullptr;
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -182,10 +182,10 @@ MSWindowsScreen::MSWindowsScreen(
|
||||||
|
|
||||||
MSWindowsScreen::~MSWindowsScreen()
|
MSWindowsScreen::~MSWindowsScreen()
|
||||||
{
|
{
|
||||||
assert(s_screen != NULL);
|
assert(s_screen != nullptr);
|
||||||
|
|
||||||
disable();
|
disable();
|
||||||
m_events->adoptBuffer(NULL);
|
m_events->adoptBuffer(nullptr);
|
||||||
m_events->removeHandler(Event::kSystem, m_events->getSystemTarget());
|
m_events->removeHandler(Event::kSystem, m_events->getSystemTarget());
|
||||||
delete m_keyState;
|
delete m_keyState;
|
||||||
delete m_desks;
|
delete m_desks;
|
||||||
|
|
@ -198,13 +198,13 @@ MSWindowsScreen::~MSWindowsScreen()
|
||||||
OleUninitialize();
|
OleUninitialize();
|
||||||
destroyWindow(m_dropWindow);
|
destroyWindow(m_dropWindow);
|
||||||
|
|
||||||
s_screen = NULL;
|
s_screen = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MSWindowsScreen::init(HINSTANCE windowInstance)
|
void MSWindowsScreen::init(HINSTANCE windowInstance)
|
||||||
{
|
{
|
||||||
assert(s_windowInstance == NULL);
|
assert(s_windowInstance == nullptr);
|
||||||
assert(windowInstance != NULL);
|
assert(windowInstance != nullptr);
|
||||||
|
|
||||||
s_windowInstance = windowInstance;
|
s_windowInstance = windowInstance;
|
||||||
}
|
}
|
||||||
|
|
@ -220,7 +220,7 @@ void MSWindowsScreen::enable()
|
||||||
assert(m_isOnScreen == m_isPrimary);
|
assert(m_isOnScreen == m_isPrimary);
|
||||||
|
|
||||||
// we need to poll some things to fix them
|
// we need to poll some things to fix them
|
||||||
m_fixTimer = m_events->newTimer(1.0, NULL);
|
m_fixTimer = m_events->newTimer(1.0, nullptr);
|
||||||
m_events->adoptHandler(
|
m_events->adoptHandler(
|
||||||
Event::kTimer, m_fixTimer, new TMethodEventJob<MSWindowsScreen>(this, &MSWindowsScreen::handleFixes)
|
Event::kTimer, m_fixTimer, new TMethodEventJob<MSWindowsScreen>(this, &MSWindowsScreen::handleFixes)
|
||||||
);
|
);
|
||||||
|
|
@ -264,10 +264,10 @@ void MSWindowsScreen::disable()
|
||||||
}
|
}
|
||||||
|
|
||||||
// uninstall fix timer
|
// uninstall fix timer
|
||||||
if (m_fixTimer != NULL) {
|
if (m_fixTimer != nullptr) {
|
||||||
m_events->removeHandler(Event::kTimer, m_fixTimer);
|
m_events->removeHandler(Event::kTimer, m_fixTimer);
|
||||||
m_events->deleteTimer(m_fixTimer);
|
m_events->deleteTimer(m_fixTimer);
|
||||||
m_fixTimer = NULL;
|
m_fixTimer = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_isOnScreen = m_isPrimary;
|
m_isOnScreen = m_isPrimary;
|
||||||
|
|
@ -293,7 +293,7 @@ void MSWindowsScreen::enter()
|
||||||
// and that the screen is not in powersave mode.
|
// and that the screen is not in powersave mode.
|
||||||
ArchMiscWindows::wakeupDisplay();
|
ArchMiscWindows::wakeupDisplay();
|
||||||
|
|
||||||
if (m_screensaver != NULL && m_screensaverActive) {
|
if (m_screensaver != nullptr && m_screensaverActive) {
|
||||||
m_screensaver->deactivate();
|
m_screensaver->deactivate();
|
||||||
m_screensaverActive = 0;
|
m_screensaverActive = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -386,7 +386,7 @@ void MSWindowsScreen::sendDragThread(void *)
|
||||||
bool MSWindowsScreen::setClipboard(ClipboardID, const IClipboard *src)
|
bool MSWindowsScreen::setClipboard(ClipboardID, const IClipboard *src)
|
||||||
{
|
{
|
||||||
MSWindowsClipboard dst(m_window);
|
MSWindowsClipboard dst(m_window);
|
||||||
if (src != NULL) {
|
if (src != nullptr) {
|
||||||
// save clipboard data
|
// save clipboard data
|
||||||
return Clipboard::copy(&dst, src);
|
return Clipboard::copy(&dst, src);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -423,7 +423,7 @@ void MSWindowsScreen::checkClipboards()
|
||||||
|
|
||||||
void MSWindowsScreen::openScreensaver(bool notify)
|
void MSWindowsScreen::openScreensaver(bool notify)
|
||||||
{
|
{
|
||||||
assert(m_screensaver != NULL);
|
assert(m_screensaver != nullptr);
|
||||||
|
|
||||||
m_screensaverNotify = notify;
|
m_screensaverNotify = notify;
|
||||||
if (m_screensaverNotify) {
|
if (m_screensaverNotify) {
|
||||||
|
|
@ -435,7 +435,7 @@ void MSWindowsScreen::openScreensaver(bool notify)
|
||||||
|
|
||||||
void MSWindowsScreen::closeScreensaver()
|
void MSWindowsScreen::closeScreensaver()
|
||||||
{
|
{
|
||||||
if (m_screensaver != NULL) {
|
if (m_screensaver != nullptr) {
|
||||||
if (m_screensaverNotify) {
|
if (m_screensaverNotify) {
|
||||||
m_desks->installScreensaverHooks(false);
|
m_desks->installScreensaverHooks(false);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -447,8 +447,8 @@ void MSWindowsScreen::closeScreensaver()
|
||||||
|
|
||||||
void MSWindowsScreen::screensaver(bool activate)
|
void MSWindowsScreen::screensaver(bool activate)
|
||||||
{
|
{
|
||||||
assert(m_screensaver != NULL);
|
assert(m_screensaver != nullptr);
|
||||||
if (m_screensaver == NULL)
|
if (m_screensaver == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (activate) {
|
if (activate) {
|
||||||
|
|
@ -557,7 +557,7 @@ void MSWindowsScreen::updateDesktopThread()
|
||||||
LOG_DEBUG("updating desktop thread");
|
LOG_DEBUG("updating desktop thread");
|
||||||
|
|
||||||
HDESK hDesk = OpenInputDesktop(0, true, GENERIC_ALL);
|
HDESK hDesk = OpenInputDesktop(0, true, GENERIC_ALL);
|
||||||
if (hDesk == NULL) {
|
if (hDesk == nullptr) {
|
||||||
XArchEvalWindows error1;
|
XArchEvalWindows error1;
|
||||||
LOG_DEBUG("could not open input desktop, error: %s", error1.eval().c_str());
|
LOG_DEBUG("could not open input desktop, error: %s", error1.eval().c_str());
|
||||||
return;
|
return;
|
||||||
|
|
@ -589,7 +589,7 @@ void MSWindowsScreen::warpCursor(int32_t x, int32_t y)
|
||||||
|
|
||||||
// remove all input events before and including warp
|
// remove all input events before and including warp
|
||||||
MSG msg;
|
MSG msg;
|
||||||
while (PeekMessage(&msg, NULL, DESKFLOW_MSG_INPUT_FIRST, DESKFLOW_MSG_INPUT_LAST, PM_REMOVE)) {
|
while (PeekMessage(&msg, nullptr, DESKFLOW_MSG_INPUT_FIRST, DESKFLOW_MSG_INPUT_LAST, PM_REMOVE)) {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -660,7 +660,7 @@ uint32_t MSWindowsScreen::registerHotKey(KeyID key, KeyModifierMask mask)
|
||||||
err = (m_hotKeyToIDMap.count(HotKeyItem(vk, modifiers)) > 0);
|
err = (m_hotKeyToIDMap.count(HotKeyItem(vk, modifiers)) > 0);
|
||||||
} else {
|
} else {
|
||||||
// register with OS
|
// register with OS
|
||||||
err = (RegisterHotKey(NULL, id, modifiers, vk) == 0);
|
err = (RegisterHotKey(nullptr, id, modifiers, vk) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!err) {
|
if (!err) {
|
||||||
|
|
@ -694,7 +694,7 @@ void MSWindowsScreen::unregisterHotKey(uint32_t id)
|
||||||
// unregister with OS
|
// unregister with OS
|
||||||
bool err;
|
bool err;
|
||||||
if (i->second.getVirtualKey() != 0) {
|
if (i->second.getVirtualKey() != 0) {
|
||||||
err = !UnregisterHotKey(NULL, id);
|
err = !UnregisterHotKey(nullptr, id);
|
||||||
} else {
|
} else {
|
||||||
err = false;
|
err = false;
|
||||||
}
|
}
|
||||||
|
|
@ -844,7 +844,7 @@ MSWindowsScreen::createBlankCursor() const
|
||||||
|
|
||||||
void MSWindowsScreen::destroyCursor(HCURSOR cursor) const
|
void MSWindowsScreen::destroyCursor(HCURSOR cursor) const
|
||||||
{
|
{
|
||||||
if (cursor != NULL) {
|
if (cursor != nullptr) {
|
||||||
DestroyCursor(cursor);
|
DestroyCursor(cursor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -858,12 +858,12 @@ ATOM MSWindowsScreen::createWindowClass() const
|
||||||
classInfo.cbClsExtra = 0;
|
classInfo.cbClsExtra = 0;
|
||||||
classInfo.cbWndExtra = 0;
|
classInfo.cbWndExtra = 0;
|
||||||
classInfo.hInstance = s_windowInstance;
|
classInfo.hInstance = s_windowInstance;
|
||||||
classInfo.hIcon = NULL;
|
classInfo.hIcon = nullptr;
|
||||||
classInfo.hCursor = NULL;
|
classInfo.hCursor = nullptr;
|
||||||
classInfo.hbrBackground = NULL;
|
classInfo.hbrBackground = nullptr;
|
||||||
classInfo.lpszMenuName = NULL;
|
classInfo.lpszMenuName = nullptr;
|
||||||
classInfo.lpszClassName = kAppName;
|
classInfo.lpszClassName = kAppName;
|
||||||
classInfo.hIconSm = NULL;
|
classInfo.hIconSm = nullptr;
|
||||||
return RegisterClassEx(&classInfo);
|
return RegisterClassEx(&classInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -877,10 +877,10 @@ void MSWindowsScreen::destroyClass(ATOM windowClass) const
|
||||||
HWND MSWindowsScreen::createWindow(ATOM windowClass, const char *name) const
|
HWND MSWindowsScreen::createWindow(ATOM windowClass, const char *name) const
|
||||||
{
|
{
|
||||||
HWND window = CreateWindowEx(
|
HWND window = CreateWindowEx(
|
||||||
WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW, MAKEINTATOM(windowClass), name, WS_POPUP, 0, 0, 1, 1, NULL,
|
WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW, MAKEINTATOM(windowClass), name, WS_POPUP, 0, 0, 1, 1,
|
||||||
NULL, s_windowInstance, NULL
|
nullptr, nullptr, s_windowInstance, nullptr
|
||||||
);
|
);
|
||||||
if (window == NULL) {
|
if (window == nullptr) {
|
||||||
LOG((CLOG_ERR "failed to create window: %d", GetLastError()));
|
LOG((CLOG_ERR "failed to create window: %d", GetLastError()));
|
||||||
throw XScreenOpenFailure();
|
throw XScreenOpenFailure();
|
||||||
}
|
}
|
||||||
|
|
@ -891,10 +891,10 @@ HWND MSWindowsScreen::createDropWindow(ATOM windowClass, const char *name) const
|
||||||
{
|
{
|
||||||
HWND window = CreateWindowEx(
|
HWND window = CreateWindowEx(
|
||||||
WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_ACCEPTFILES, MAKEINTATOM(m_class), name, WS_POPUP, 0, 0,
|
WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_ACCEPTFILES, MAKEINTATOM(m_class), name, WS_POPUP, 0, 0,
|
||||||
m_dropWindowSize, m_dropWindowSize, NULL, NULL, s_windowInstance, NULL
|
m_dropWindowSize, m_dropWindowSize, nullptr, nullptr, s_windowInstance, nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
if (window == NULL) {
|
if (window == nullptr) {
|
||||||
LOG((CLOG_ERR "failed to create drop window: %d", GetLastError()));
|
LOG((CLOG_ERR "failed to create drop window: %d", GetLastError()));
|
||||||
throw XScreenOpenFailure();
|
throw XScreenOpenFailure();
|
||||||
}
|
}
|
||||||
|
|
@ -904,7 +904,7 @@ HWND MSWindowsScreen::createDropWindow(ATOM windowClass, const char *name) const
|
||||||
|
|
||||||
void MSWindowsScreen::destroyWindow(HWND hwnd) const
|
void MSWindowsScreen::destroyWindow(HWND hwnd) const
|
||||||
{
|
{
|
||||||
if (hwnd != NULL) {
|
if (hwnd != nullptr) {
|
||||||
DestroyWindow(hwnd);
|
DestroyWindow(hwnd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -917,7 +917,7 @@ void MSWindowsScreen::sendEvent(Event::Type type, void *data)
|
||||||
void MSWindowsScreen::sendClipboardEvent(Event::Type type, ClipboardID id)
|
void MSWindowsScreen::sendClipboardEvent(Event::Type type, ClipboardID id)
|
||||||
{
|
{
|
||||||
ClipboardInfo *info = (ClipboardInfo *)malloc(sizeof(ClipboardInfo));
|
ClipboardInfo *info = (ClipboardInfo *)malloc(sizeof(ClipboardInfo));
|
||||||
if (info == NULL) {
|
if (info == nullptr) {
|
||||||
LOG((CLOG_ERR "malloc failed on %s:%s", __FILE__, __LINE__));
|
LOG((CLOG_ERR "malloc failed on %s:%s", __FILE__, __LINE__));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -929,7 +929,7 @@ void MSWindowsScreen::sendClipboardEvent(Event::Type type, ClipboardID id)
|
||||||
void MSWindowsScreen::handleSystemEvent(const Event &event, void *)
|
void MSWindowsScreen::handleSystemEvent(const Event &event, void *)
|
||||||
{
|
{
|
||||||
MSG *msg = static_cast<MSG *>(event.getData());
|
MSG *msg = static_cast<MSG *>(event.getData());
|
||||||
assert(msg != NULL);
|
assert(msg != nullptr);
|
||||||
|
|
||||||
if (onPreDispatch(msg->hwnd, msg->message, msg->wParam, msg->lParam)) {
|
if (onPreDispatch(msg->hwnd, msg->message, msg->wParam, msg->lParam)) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -1006,7 +1006,7 @@ bool MSWindowsScreen::onPreDispatchPrimary(HWND, UINT message, WPARAM wParam, LP
|
||||||
// event.
|
// event.
|
||||||
MSG msg;
|
MSG msg;
|
||||||
do {
|
do {
|
||||||
GetMessage(&msg, NULL, DESKFLOW_MSG_MOUSE_MOVE, DESKFLOW_MSG_POST_WARP);
|
GetMessage(&msg, nullptr, DESKFLOW_MSG_MOUSE_MOVE, DESKFLOW_MSG_POST_WARP);
|
||||||
} while (msg.message != DESKFLOW_MSG_POST_WARP);
|
} while (msg.message != DESKFLOW_MSG_POST_WARP);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -1050,7 +1050,7 @@ bool MSWindowsScreen::onEvent(HWND, UINT msg, WPARAM wParam, LPARAM lParam, LRES
|
||||||
/* On windows 10 we don't receive WM_POWERBROADCAST after sleep.
|
/* On windows 10 we don't receive WM_POWERBROADCAST after sleep.
|
||||||
We receive only WM_TIMECHANGE hence this message is used to resume.*/
|
We receive only WM_TIMECHANGE hence this message is used to resume.*/
|
||||||
case WM_TIMECHANGE:
|
case WM_TIMECHANGE:
|
||||||
m_events->addEvent(Event(m_events->forIScreen().resume(), getEventTarget(), NULL, Event::kDeliverImmediately));
|
m_events->addEvent(Event(m_events->forIScreen().resume(), getEventTarget(), nullptr, Event::kDeliverImmediately));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_POWERBROADCAST:
|
case WM_POWERBROADCAST:
|
||||||
|
|
@ -1058,11 +1058,12 @@ bool MSWindowsScreen::onEvent(HWND, UINT msg, WPARAM wParam, LPARAM lParam, LRES
|
||||||
case PBT_APMRESUMEAUTOMATIC:
|
case PBT_APMRESUMEAUTOMATIC:
|
||||||
case PBT_APMRESUMECRITICAL:
|
case PBT_APMRESUMECRITICAL:
|
||||||
case PBT_APMRESUMESUSPEND:
|
case PBT_APMRESUMESUSPEND:
|
||||||
m_events->addEvent(Event(m_events->forIScreen().resume(), getEventTarget(), NULL, Event::kDeliverImmediately));
|
m_events->addEvent(Event(m_events->forIScreen().resume(), getEventTarget(), nullptr, Event::kDeliverImmediately));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PBT_APMSUSPEND:
|
case PBT_APMSUSPEND:
|
||||||
m_events->addEvent(Event(m_events->forIScreen().suspend(), getEventTarget(), NULL, Event::kDeliverImmediately));
|
m_events->addEvent(Event(m_events->forIScreen().suspend(), getEventTarget(), nullptr, Event::kDeliverImmediately)
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*result = TRUE;
|
*result = TRUE;
|
||||||
|
|
@ -1383,7 +1384,7 @@ bool MSWindowsScreen::onScreensaver(bool activated)
|
||||||
// send SC_SCREENSAVE until the screen saver starts, even if
|
// send SC_SCREENSAVE until the screen saver starts, even if
|
||||||
// the screen saver is disabled!
|
// the screen saver is disabled!
|
||||||
MSG msg;
|
MSG msg;
|
||||||
if (PeekMessage(&msg, NULL, DESKFLOW_MSG_SCREEN_SAVER, DESKFLOW_MSG_SCREEN_SAVER, PM_NOREMOVE)) {
|
if (PeekMessage(&msg, nullptr, DESKFLOW_MSG_SCREEN_SAVER, DESKFLOW_MSG_SCREEN_SAVER, PM_NOREMOVE)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1553,12 +1554,12 @@ void MSWindowsScreen::fixClipboardViewer()
|
||||||
// recursion in the WM_DRAWCLIPBOARD handler. either we're sending
|
// recursion in the WM_DRAWCLIPBOARD handler. either we're sending
|
||||||
// the message to our own window or some window farther down the chain
|
// the message to our own window or some window farther down the chain
|
||||||
// forwards the message to our window or a window farther up the chain.
|
// forwards the message to our window or a window farther up the chain.
|
||||||
// i'm not sure how that could happen. the m_nextClipboardWindow = NULL
|
// i'm not sure how that could happen. the m_nextClipboardWindow = nullptr
|
||||||
// was not in the code that infinite loops and may fix the bug but i
|
// was not in the code that infinite loops and may fix the bug but i
|
||||||
// doubt it.
|
// doubt it.
|
||||||
/*
|
/*
|
||||||
ChangeClipboardChain(m_window, m_nextClipboardWindow);
|
ChangeClipboardChain(m_window, m_nextClipboardWindow);
|
||||||
m_nextClipboardWindow = NULL;
|
m_nextClipboardWindow = nullptr;
|
||||||
m_nextClipboardWindow = SetClipboardViewer(m_window);
|
m_nextClipboardWindow = SetClipboardViewer(m_window);
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
@ -1735,7 +1736,7 @@ void MSWindowsScreen::updateForceShowCursor()
|
||||||
|
|
||||||
LRESULT CALLBACK MSWindowsScreen::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
LRESULT CALLBACK MSWindowsScreen::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
assert(s_screen != NULL);
|
assert(s_screen != nullptr);
|
||||||
|
|
||||||
LRESULT result = 0;
|
LRESULT result = 0;
|
||||||
if (!s_screen->onEvent(hwnd, msg, wParam, lParam, &result)) {
|
if (!s_screen->onEvent(hwnd, msg, wParam, lParam, &result)) {
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ private:
|
||||||
|
|
||||||
// convenience function to send events
|
// convenience function to send events
|
||||||
public: // HACK
|
public: // HACK
|
||||||
void sendEvent(Event::Type type, void * = NULL);
|
void sendEvent(Event::Type type, void * = nullptr);
|
||||||
|
|
||||||
private: // HACK
|
private: // HACK
|
||||||
void sendClipboardEvent(Event::Type type, ClipboardID id);
|
void sendClipboardEvent(Event::Type type, ClipboardID id);
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
static const TCHAR *g_isSecureNT = "ScreenSaverIsSecure";
|
static const TCHAR *g_isSecureNT = "ScreenSaverIsSecure";
|
||||||
static const TCHAR *g_isSecure9x = "ScreenSaveUsePassword";
|
static const TCHAR *g_isSecure9x = "ScreenSaveUsePassword";
|
||||||
static const TCHAR *const g_pathScreenSaverIsSecure[] = {"Control Panel", "Desktop", NULL};
|
static const TCHAR *const g_pathScreenSaverIsSecure[] = {"Control Panel", "Desktop", nullptr};
|
||||||
|
|
||||||
//
|
//
|
||||||
// MSWindowsScreenSaver
|
// MSWindowsScreenSaver
|
||||||
|
|
@ -32,8 +32,8 @@ static const TCHAR *const g_pathScreenSaverIsSecure[] = {"Control Panel", "Deskt
|
||||||
MSWindowsScreenSaver::MSWindowsScreenSaver()
|
MSWindowsScreenSaver::MSWindowsScreenSaver()
|
||||||
: m_wasSecure(false),
|
: m_wasSecure(false),
|
||||||
m_wasSecureAnInt(false),
|
m_wasSecureAnInt(false),
|
||||||
m_process(NULL),
|
m_process(nullptr),
|
||||||
m_watch(NULL),
|
m_watch(nullptr),
|
||||||
m_threadID(0),
|
m_threadID(0),
|
||||||
m_msg(0),
|
m_msg(0),
|
||||||
m_wParam(0),
|
m_wParam(0),
|
||||||
|
|
@ -116,11 +116,11 @@ void MSWindowsScreenSaver::activate()
|
||||||
if (!isActive()) {
|
if (!isActive()) {
|
||||||
// activate
|
// activate
|
||||||
HWND hwnd = GetForegroundWindow();
|
HWND hwnd = GetForegroundWindow();
|
||||||
if (hwnd != NULL) {
|
if (hwnd != nullptr) {
|
||||||
PostMessage(hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
|
PostMessage(hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
|
||||||
} else {
|
} else {
|
||||||
// no foreground window. pretend we got the event instead.
|
// no foreground window. pretend we got the event instead.
|
||||||
DefWindowProc(NULL, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
|
DefWindowProc(nullptr, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -131,7 +131,7 @@ void MSWindowsScreenSaver::deactivate()
|
||||||
|
|
||||||
// NT runs screen saver in another desktop
|
// NT runs screen saver in another desktop
|
||||||
HDESK desktop = OpenDesktop("Screen-saver", 0, FALSE, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS);
|
HDESK desktop = OpenDesktop("Screen-saver", 0, FALSE, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS);
|
||||||
if (desktop != NULL) {
|
if (desktop != nullptr) {
|
||||||
EnumDesktopWindows(desktop, &MSWindowsScreenSaver::killScreenSaverFunc, reinterpret_cast<LPARAM>(&killed));
|
EnumDesktopWindows(desktop, &MSWindowsScreenSaver::killScreenSaverFunc, reinterpret_cast<LPARAM>(&killed));
|
||||||
CloseDesktop(desktop);
|
CloseDesktop(desktop);
|
||||||
}
|
}
|
||||||
|
|
@ -139,12 +139,12 @@ void MSWindowsScreenSaver::deactivate()
|
||||||
// if above failed or wasn't tried, try the windows 95 way
|
// if above failed or wasn't tried, try the windows 95 way
|
||||||
if (!killed) {
|
if (!killed) {
|
||||||
// find screen saver window and close it
|
// find screen saver window and close it
|
||||||
HWND hwnd = FindWindow("WindowsScreenSaverClass", NULL);
|
HWND hwnd = FindWindow("WindowsScreenSaverClass", nullptr);
|
||||||
if (hwnd == NULL) {
|
if (hwnd == nullptr) {
|
||||||
// win2k may use a different class
|
// win2k may use a different class
|
||||||
hwnd = FindWindow("Default Screen Saver", NULL);
|
hwnd = FindWindow("Default Screen Saver", nullptr);
|
||||||
}
|
}
|
||||||
if (hwnd != NULL) {
|
if (hwnd != nullptr) {
|
||||||
PostMessage(hwnd, WM_CLOSE, 0, 0);
|
PostMessage(hwnd, WM_CLOSE, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -191,7 +191,7 @@ void MSWindowsScreenSaver::watchProcess(HANDLE process)
|
||||||
unwatchProcess();
|
unwatchProcess();
|
||||||
|
|
||||||
// watch new process in another thread
|
// watch new process in another thread
|
||||||
if (process != NULL) {
|
if (process != nullptr) {
|
||||||
LOG((CLOG_DEBUG "watching screen saver process"));
|
LOG((CLOG_DEBUG "watching screen saver process"));
|
||||||
m_process = process;
|
m_process = process;
|
||||||
m_active = true;
|
m_active = true;
|
||||||
|
|
@ -201,24 +201,24 @@ void MSWindowsScreenSaver::watchProcess(HANDLE process)
|
||||||
|
|
||||||
void MSWindowsScreenSaver::unwatchProcess()
|
void MSWindowsScreenSaver::unwatchProcess()
|
||||||
{
|
{
|
||||||
if (m_watch != NULL) {
|
if (m_watch != nullptr) {
|
||||||
LOG((CLOG_DEBUG "stopped watching screen saver process/desktop"));
|
LOG((CLOG_DEBUG "stopped watching screen saver process/desktop"));
|
||||||
m_watch->cancel();
|
m_watch->cancel();
|
||||||
m_watch->wait();
|
m_watch->wait();
|
||||||
delete m_watch;
|
delete m_watch;
|
||||||
m_watch = NULL;
|
m_watch = nullptr;
|
||||||
m_active = false;
|
m_active = false;
|
||||||
}
|
}
|
||||||
if (m_process != NULL) {
|
if (m_process != nullptr) {
|
||||||
CloseHandle(m_process);
|
CloseHandle(m_process);
|
||||||
m_process = NULL;
|
m_process = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MSWindowsScreenSaver::watchDesktopThread(void *)
|
void MSWindowsScreenSaver::watchDesktopThread(void *)
|
||||||
{
|
{
|
||||||
DWORD reserved = 0;
|
DWORD reserved = 0;
|
||||||
TCHAR *name = NULL;
|
TCHAR *name = nullptr;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
// wait a bit
|
// wait a bit
|
||||||
|
|
@ -256,7 +256,7 @@ void MSWindowsScreenSaver::watchProcessThread(void *)
|
||||||
void MSWindowsScreenSaver::setSecure(bool secure, bool saveSecureAsInt)
|
void MSWindowsScreenSaver::setSecure(bool secure, bool saveSecureAsInt)
|
||||||
{
|
{
|
||||||
HKEY hkey = ArchMiscWindows::addKey(HKEY_CURRENT_USER, g_pathScreenSaverIsSecure);
|
HKEY hkey = ArchMiscWindows::addKey(HKEY_CURRENT_USER, g_pathScreenSaverIsSecure);
|
||||||
if (hkey == NULL) {
|
if (hkey == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -273,7 +273,7 @@ bool MSWindowsScreenSaver::isSecure(bool *wasSecureFlagAnInt) const
|
||||||
{
|
{
|
||||||
// get the password protection setting key
|
// get the password protection setting key
|
||||||
HKEY hkey = ArchMiscWindows::openKey(HKEY_CURRENT_USER, g_pathScreenSaverIsSecure);
|
HKEY hkey = ArchMiscWindows::openKey(HKEY_CURRENT_USER, g_pathScreenSaverIsSecure);
|
||||||
if (hkey == NULL) {
|
if (hkey == nullptr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ MSWindowsSession::~MSWindowsSession()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MSWindowsSession::isProcessInSession(const char *name, PHANDLE process = NULL)
|
bool MSWindowsSession::isProcessInSession(const char *name, PHANDLE process = nullptr)
|
||||||
{
|
{
|
||||||
// first we need to take a snapshot of the running processes
|
// first we need to take a snapshot of the running processes
|
||||||
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
||||||
|
|
@ -91,7 +91,7 @@ bool MSWindowsSession::isProcessInSession(const char *name, PHANDLE process = NU
|
||||||
CloseHandle(snapshot);
|
CloseHandle(snapshot);
|
||||||
|
|
||||||
if (pid) {
|
if (pid) {
|
||||||
if (process != NULL) {
|
if (process != nullptr) {
|
||||||
// now get the process, which we'll use to get the process token.
|
// now get the process, which we'll use to get the process token.
|
||||||
LOG((CLOG_DEBUG "found %s in session %i", name, m_activeSessionId));
|
LOG((CLOG_DEBUG "found %s in session %i", name, m_activeSessionId));
|
||||||
*process = OpenProcess(MAXIMUM_ALLOWED, FALSE, pid);
|
*process = OpenProcess(MAXIMUM_ALLOWED, FALSE, pid);
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
std::string MSWindowsUtil::getString(HINSTANCE instance, DWORD id)
|
std::string MSWindowsUtil::getString(HINSTANCE instance, DWORD id)
|
||||||
{
|
{
|
||||||
char *msg = NULL;
|
char *msg = nullptr;
|
||||||
int n = LoadString(instance, id, reinterpret_cast<LPSTR>(&msg), 0);
|
int n = LoadString(instance, id, reinterpret_cast<LPSTR>(&msg), 0);
|
||||||
|
|
||||||
if (n <= 0) {
|
if (n <= 0) {
|
||||||
|
|
@ -32,7 +32,7 @@ std::string MSWindowsUtil::getErrorString(HINSTANCE hinstance, DWORD error, DWOR
|
||||||
char *buffer;
|
char *buffer;
|
||||||
if (FormatMessage(
|
if (FormatMessage(
|
||||||
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, 0, error,
|
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, 0, error,
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buffer, 0, NULL
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buffer, 0, nullptr
|
||||||
) == 0) {
|
) == 0) {
|
||||||
std::string errorString = deskflow::string::sprintf("%d", error);
|
std::string errorString = deskflow::string::sprintf("%d", error);
|
||||||
return deskflow::string::format(getString(hinstance, id).c_str(), errorString.c_str());
|
return deskflow::string::format(getString(hinstance, id).c_str(), errorString.c_str());
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
// OSXClipboard
|
// OSXClipboard
|
||||||
//
|
//
|
||||||
|
|
||||||
OSXClipboard::OSXClipboard() : m_time(0), m_pboard(NULL)
|
OSXClipboard::OSXClipboard() : m_time(0), m_pboard(nullptr)
|
||||||
{
|
{
|
||||||
m_converters.push_back(new OSXClipboardHTMLConverter);
|
m_converters.push_back(new OSXClipboardHTMLConverter);
|
||||||
m_converters.push_back(new OSXClipboardBMPConverter);
|
m_converters.push_back(new OSXClipboardBMPConverter);
|
||||||
|
|
@ -32,7 +32,7 @@ OSXClipboard::OSXClipboard() : m_time(0), m_pboard(NULL)
|
||||||
if (createErr != noErr) {
|
if (createErr != noErr) {
|
||||||
LOG((CLOG_WARN "failed to create clipboard reference: error %i", createErr));
|
LOG((CLOG_WARN "failed to create clipboard reference: error %i", createErr));
|
||||||
LOG((CLOG_ERR "unable to connect to pasteboard, clipboard sharing disabled", createErr));
|
LOG((CLOG_ERR "unable to connect to pasteboard, clipboard sharing disabled", createErr));
|
||||||
m_pboard = NULL;
|
m_pboard = nullptr;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,7 +50,7 @@ OSXClipboard::~OSXClipboard()
|
||||||
bool OSXClipboard::empty()
|
bool OSXClipboard::empty()
|
||||||
{
|
{
|
||||||
LOG((CLOG_DEBUG "emptying clipboard"));
|
LOG((CLOG_DEBUG "emptying clipboard"));
|
||||||
if (m_pboard == NULL)
|
if (m_pboard == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
OSStatus err = PasteboardClear(m_pboard);
|
OSStatus err = PasteboardClear(m_pboard);
|
||||||
|
|
@ -64,7 +64,7 @@ bool OSXClipboard::empty()
|
||||||
|
|
||||||
bool OSXClipboard::synchronize()
|
bool OSXClipboard::synchronize()
|
||||||
{
|
{
|
||||||
if (m_pboard == NULL)
|
if (m_pboard == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
PasteboardSyncFlags flags = PasteboardSynchronize(m_pboard);
|
PasteboardSyncFlags flags = PasteboardSynchronize(m_pboard);
|
||||||
|
|
@ -78,7 +78,7 @@ bool OSXClipboard::synchronize()
|
||||||
|
|
||||||
void OSXClipboard::add(EFormat format, const std::string &data)
|
void OSXClipboard::add(EFormat format, const std::string &data)
|
||||||
{
|
{
|
||||||
if (m_pboard == NULL)
|
if (m_pboard == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
LOG((CLOG_DEBUG "add %d bytes to clipboard format: %d", data.size(), format));
|
LOG((CLOG_DEBUG "add %d bytes to clipboard format: %d", data.size(), format));
|
||||||
|
|
@ -113,7 +113,7 @@ void OSXClipboard::add(EFormat format, const std::string &data)
|
||||||
|
|
||||||
bool OSXClipboard::open(Time time) const
|
bool OSXClipboard::open(Time time) const
|
||||||
{
|
{
|
||||||
if (m_pboard == NULL)
|
if (m_pboard == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
LOG((CLOG_DEBUG "opening clipboard"));
|
LOG((CLOG_DEBUG "opening clipboard"));
|
||||||
|
|
@ -134,7 +134,7 @@ IClipboard::Time OSXClipboard::getTime() const
|
||||||
|
|
||||||
bool OSXClipboard::has(EFormat format) const
|
bool OSXClipboard::has(EFormat format) const
|
||||||
{
|
{
|
||||||
if (m_pboard == NULL)
|
if (m_pboard == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
PasteboardItemID item;
|
PasteboardItemID item;
|
||||||
|
|
@ -163,13 +163,13 @@ std::string OSXClipboard::get(EFormat format) const
|
||||||
PasteboardItemID item;
|
PasteboardItemID item;
|
||||||
std::string result;
|
std::string result;
|
||||||
|
|
||||||
if (m_pboard == NULL)
|
if (m_pboard == nullptr)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
PasteboardGetItemIdentifier(m_pboard, (CFIndex)1, &item);
|
PasteboardGetItemIdentifier(m_pboard, (CFIndex)1, &item);
|
||||||
|
|
||||||
// find the converter for the first clipboard format we can handle
|
// find the converter for the first clipboard format we can handle
|
||||||
IOSXClipboardConverter *converter = NULL;
|
IOSXClipboardConverter *converter = nullptr;
|
||||||
for (ConverterList::const_iterator index = m_converters.begin(); index != m_converters.end(); ++index) {
|
for (ConverterList::const_iterator index = m_converters.begin(); index != m_converters.end(); ++index) {
|
||||||
converter = *index;
|
converter = *index;
|
||||||
|
|
||||||
|
|
@ -179,17 +179,17 @@ std::string OSXClipboard::get(EFormat format) const
|
||||||
if (converter->getFormat() == format && PasteboardGetItemFlavorFlags(m_pboard, item, type, &flags) == noErr) {
|
if (converter->getFormat() == format && PasteboardGetItemFlavorFlags(m_pboard, item, type, &flags) == noErr) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
converter = NULL;
|
converter = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no converter then we don't recognize any formats
|
// if no converter then we don't recognize any formats
|
||||||
if (converter == NULL) {
|
if (converter == nullptr) {
|
||||||
LOG((CLOG_DEBUG "unable to find converter for data"));
|
LOG((CLOG_DEBUG "unable to find converter for data"));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the clipboard data.
|
// get the clipboard data.
|
||||||
CFDataRef buffer = NULL;
|
CFDataRef buffer = nullptr;
|
||||||
try {
|
try {
|
||||||
OSStatus err = PasteboardCopyItemFlavorData(m_pboard, item, type, &buffer);
|
OSStatus err = PasteboardCopyItemFlavorData(m_pboard, item, type, &buffer);
|
||||||
|
|
||||||
|
|
@ -205,7 +205,7 @@ std::string OSXClipboard::get(EFormat format) const
|
||||||
RETHROW_XTHREAD
|
RETHROW_XTHREAD
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer != NULL)
|
if (buffer != nullptr)
|
||||||
CFRelease(buffer);
|
CFRelease(buffer);
|
||||||
|
|
||||||
return converter->toIClipboard(result);
|
return converter->toIClipboard(result);
|
||||||
|
|
@ -213,7 +213,7 @@ std::string OSXClipboard::get(EFormat format) const
|
||||||
|
|
||||||
void OSXClipboard::clearConverters()
|
void OSXClipboard::clearConverters()
|
||||||
{
|
{
|
||||||
if (m_pboard == NULL)
|
if (m_pboard == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (ConverterList::iterator index = m_converters.begin(); index != m_converters.end(); ++index) {
|
for (ConverterList::iterator index = m_converters.begin(); index != m_converters.end(); ++index) {
|
||||||
|
|
|
||||||
|
|
@ -35,23 +35,23 @@ std::string OSXClipboardHTMLConverter::convertString(
|
||||||
{
|
{
|
||||||
CFStringRef stringRef = CFStringCreateWithCString(kCFAllocatorDefault, data.c_str(), fromEncoding);
|
CFStringRef stringRef = CFStringCreateWithCString(kCFAllocatorDefault, data.c_str(), fromEncoding);
|
||||||
|
|
||||||
if (stringRef == NULL) {
|
if (stringRef == nullptr) {
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
CFIndex buffSize;
|
CFIndex buffSize;
|
||||||
CFRange entireString = CFRangeMake(0, CFStringGetLength(stringRef));
|
CFRange entireString = CFRangeMake(0, CFStringGetLength(stringRef));
|
||||||
|
|
||||||
CFStringGetBytes(stringRef, entireString, toEncoding, 0, false, NULL, 0, &buffSize);
|
CFStringGetBytes(stringRef, entireString, toEncoding, 0, false, nullptr, 0, &buffSize);
|
||||||
|
|
||||||
char *buffer = new char[buffSize];
|
char *buffer = new char[buffSize];
|
||||||
|
|
||||||
if (buffer == NULL) {
|
if (buffer == nullptr) {
|
||||||
CFRelease(stringRef);
|
CFRelease(stringRef);
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
CFStringGetBytes(stringRef, entireString, toEncoding, 0, false, (uint8_t *)buffer, buffSize, NULL);
|
CFStringGetBytes(stringRef, entireString, toEncoding, 0, false, (uint8_t *)buffer, buffSize, nullptr);
|
||||||
|
|
||||||
std::string result(buffer, buffSize);
|
std::string result(buffer, buffSize);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,23 +34,23 @@ std::string OSXClipboardTextConverter::convertString(
|
||||||
{
|
{
|
||||||
CFStringRef stringRef = CFStringCreateWithCString(kCFAllocatorDefault, data.c_str(), fromEncoding);
|
CFStringRef stringRef = CFStringCreateWithCString(kCFAllocatorDefault, data.c_str(), fromEncoding);
|
||||||
|
|
||||||
if (stringRef == NULL) {
|
if (stringRef == nullptr) {
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
CFIndex buffSize;
|
CFIndex buffSize;
|
||||||
CFRange entireString = CFRangeMake(0, CFStringGetLength(stringRef));
|
CFRange entireString = CFRangeMake(0, CFStringGetLength(stringRef));
|
||||||
|
|
||||||
CFStringGetBytes(stringRef, entireString, toEncoding, 0, false, NULL, 0, &buffSize);
|
CFStringGetBytes(stringRef, entireString, toEncoding, 0, false, nullptr, 0, &buffSize);
|
||||||
|
|
||||||
char *buffer = new char[buffSize];
|
char *buffer = new char[buffSize];
|
||||||
|
|
||||||
if (buffer == NULL) {
|
if (buffer == nullptr) {
|
||||||
CFRelease(stringRef);
|
CFRelease(stringRef);
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
CFStringGetBytes(stringRef, entireString, toEncoding, 0, false, (uint8_t *)buffer, buffSize, NULL);
|
CFStringGetBytes(stringRef, entireString, toEncoding, 0, false, (uint8_t *)buffer, buffSize, nullptr);
|
||||||
|
|
||||||
std::string result(buffer, buffSize);
|
std::string result(buffer, buffSize);
|
||||||
|
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue