mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/win32-vd_agent
synced 2025-12-25 20:34:18 +00:00
_ftime_s, vdagent_strcat_s and vdagent_strcpy_s are not used. Code is using different string functions. Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Victor Toso <victortoso@redhat.com>
111 lines
3.0 KiB
C++
111 lines
3.0 KiB
C++
/*
|
|
Copyright (C) 2009 Red Hat, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation; either version 2 of
|
|
the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef _H_VDCOMMON
|
|
#define _H_VDCOMMON
|
|
|
|
#if !defined __GNUC__
|
|
#pragma warning(disable:4200)
|
|
#endif
|
|
|
|
#include <errno.h>
|
|
#include <windows.h>
|
|
#include "spice/vd_agent.h"
|
|
#include "vdlog.h"
|
|
|
|
class Mutex {
|
|
public:
|
|
Mutex() {
|
|
InitializeCriticalSection(&_crit);
|
|
}
|
|
~Mutex() {
|
|
DeleteCriticalSection(&_crit);
|
|
}
|
|
void lock() {
|
|
EnterCriticalSection(&_crit);
|
|
}
|
|
void unlock() {
|
|
LeaveCriticalSection(&_crit);
|
|
}
|
|
private:
|
|
CRITICAL_SECTION _crit;
|
|
// no copy
|
|
Mutex(const Mutex&);
|
|
void operator=(const Mutex&);
|
|
};
|
|
|
|
class MutexLocker {
|
|
public:
|
|
MutexLocker(Mutex &mtx):_mtx(mtx) {
|
|
_mtx.lock();
|
|
}
|
|
~MutexLocker() {
|
|
_mtx.unlock();
|
|
}
|
|
private:
|
|
Mutex &_mtx;
|
|
// no copy
|
|
MutexLocker(const MutexLocker&);
|
|
void operator=(const MutexLocker&);
|
|
};
|
|
typedef Mutex mutex_t;
|
|
|
|
#define VD_AGENT_REGISTRY_KEY "SOFTWARE\\Red Hat\\Spice\\vdagent\\"
|
|
#define VD_AGENT_STOP_EVENT TEXT("Global\\vdagent_stop_event")
|
|
|
|
/*
|
|
* Note: OLDMSVCRT, which is defined (in the Makefile) for mingw builds, and
|
|
* is not defined for Visual Studio builds.
|
|
*
|
|
* On Windows XP some those functions are missing from the msvcrt.dll
|
|
* When compiled with mingw, the program fails to run due to missing functions.
|
|
* One can link to a newer runtime dll, e.g. msvcr100.dll, but that would
|
|
* require installing that DLL on the guest. That can be done by downloading
|
|
* and installing Microsoft Visual C++ 2010 Redistributable Package.
|
|
* (same for 110.dll and 2012 Redistributable Package, etc).
|
|
*
|
|
* Since we do not want to add this dependency, we use functions that are
|
|
* available in msvcrt.dll (and use define in the code).
|
|
*
|
|
* Currently Visual Studio builds are built with /MT (static mode) such that
|
|
* those functions are not required to be in that dll on the guest.
|
|
*/
|
|
#ifdef _MSC_VER // compiling with Visual Studio
|
|
#define HAVE_SWPRINTF_S 1
|
|
#endif
|
|
|
|
#ifndef HAVE_SWPRINTF_S
|
|
int vdagent_swprintf_s(wchar_t *buf, size_t len, const wchar_t *format, ...);
|
|
#define swprintf_s vdagent_swprintf_s
|
|
#endif
|
|
|
|
#ifdef _MSC_VER // compiling with Visual Studio
|
|
#define snprintf sprintf_s
|
|
#define sscanf sscanf_s
|
|
#endif
|
|
|
|
enum SystemVersion {
|
|
SYS_VER_UNSUPPORTED,
|
|
SYS_VER_WIN_XP_CLASS, // also Server 2003/R2
|
|
SYS_VER_WIN_7_CLASS, // also Windows 8, Server 2012, Server 2008/R2 & Vista
|
|
};
|
|
|
|
SystemVersion supported_system_version();
|
|
|
|
#endif
|
|
|