mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/win32-vd_agent
synced 2025-12-27 14:54:11 +00:00
Instead of having to get the version information from the executable resources get from the build configuration file. The same version is used to build the version information resource. This also remove a bug in log_version where "throw" statements were used to raise again a not existing exception on case of failures. Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Christophe Fergeau <cfergeau@redhat.com>
86 lines
2.1 KiB
C++
86 lines
2.1 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/>.
|
|
*/
|
|
|
|
#include "config.h"
|
|
#include "vdcommon.h"
|
|
#include "vdlog.h"
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <share.h>
|
|
#include <vector>
|
|
|
|
#define LOG_ROLL_SIZE (1024 * 1024)
|
|
|
|
VDLog* VDLog::_log = NULL;
|
|
|
|
VDLog::VDLog(FILE* handle)
|
|
: _handle(handle)
|
|
{
|
|
_log = this;
|
|
}
|
|
|
|
VDLog::~VDLog()
|
|
{
|
|
if (_log && _handle) {
|
|
fclose(_handle);
|
|
_log = NULL;
|
|
}
|
|
}
|
|
|
|
VDLog* VDLog::get(TCHAR* path)
|
|
{
|
|
if (_log || !path) {
|
|
return _log;
|
|
}
|
|
DWORD size = 0;
|
|
HANDLE file = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
|
|
NULL);
|
|
if (file != INVALID_HANDLE_VALUE) {
|
|
size = GetFileSize(file, NULL);
|
|
CloseHandle(file);
|
|
}
|
|
if (size != INVALID_FILE_SIZE && size > LOG_ROLL_SIZE) {
|
|
TCHAR roll_path[MAX_PATH];
|
|
swprintf_s(roll_path, MAX_PATH, L"%s.1", path);
|
|
if (!MoveFileEx(path, roll_path, MOVEFILE_REPLACE_EXISTING)) {
|
|
return NULL;
|
|
}
|
|
}
|
|
FILE* handle = _wfsopen(path, L"a+", _SH_DENYNO);
|
|
if (!handle) {
|
|
return NULL;
|
|
}
|
|
_log = new VDLog(handle);
|
|
return _log;
|
|
}
|
|
|
|
void VDLog::printf(const char* format, ...)
|
|
{
|
|
va_list args;
|
|
|
|
va_start(args, format);
|
|
vfprintf(_handle, format, args);
|
|
va_end(args);
|
|
fflush(_handle);
|
|
}
|
|
|
|
void log_version()
|
|
{
|
|
// print same version as resource one
|
|
vd_printf("%u.%u.%u.%u", RC_PRODUCTVERSION);
|
|
}
|