// Copyright (c) 2010 The WebM project authors. All Rights Reserved. | |
// | |
// Use of this source code is governed by a BSD-style license | |
// that can be found in the LICENSE file in the root of the source | |
// tree. An additional intellectual property rights grant can be found | |
// in the file PATENTS. All contributing project authors may | |
// be found in the AUTHORS file in the root of the source tree. | |
//#pragma warning(disable:4514) //unref'd inline | |
//#pragma warning(disable:4710) //not inlined | |
//#pragma warning(push, 3) | |
#include <windows.h> | |
#include "versionhandling.hpp" | |
#include <cassert> | |
#include <cstdlib> //_wpgmptr, _get_wpgmptr | |
#include <malloc.h> //_alloca | |
#include <ostream> | |
//#pragma warning(pop) | |
#pragma comment(lib, "version.lib") | |
void VersionHandling::GetVersion( | |
const wchar_t* fname, | |
WORD& major, | |
WORD& minor, | |
WORD& revision, | |
WORD& build) | |
{ | |
#if 0 | |
char fname[_MAX_PATH]; | |
const DWORD gmfnStatus = | |
GetModuleFileName(0, fname, sizeof fname); | |
assert(gmfnStatus); | |
#elif 0 | |
//_wpgmptr | |
wchar_t* fname; | |
const errno_t e = _get_wpgmptr(&fname); | |
assert(e == 0); | |
#endif | |
DWORD handle; | |
const DWORD size = GetFileVersionInfoSize(fname, &handle); | |
assert(size); | |
BYTE* const buf = (BYTE*)_malloca(size); | |
BOOL b = GetFileVersionInfo(fname, handle, size, buf); | |
assert(b); | |
VS_FIXEDFILEINFO* p; | |
UINT len; | |
b = VerQueryValue(buf, L"\\", (LPVOID*)&p, &len); | |
assert(b); | |
assert(p); | |
assert(len); | |
major = WORD(p->dwProductVersionMS >> 16); | |
minor = WORD(p->dwProductVersionMS); | |
revision = WORD(p->dwProductVersionLS >> 16); | |
build = WORD(p->dwProductVersionLS); | |
} | |
void VersionHandling::GetVersion(const wchar_t* fname, std::wostream& os) | |
{ | |
WORD major, minor, revision, build; | |
VersionHandling::GetVersion(fname, major, minor, revision, build); | |
os << major | |
<< L'.' | |
<< minor | |
<< L'.' | |
<< revision | |
<< L'.' | |
<< build; | |
} | |
#if 0 | |
const std::string VersionHandling::version(bool full) | |
{ | |
DWORD ms, ls; | |
version(ms, ls); | |
const DWORD ms_major = ms >> 16; | |
char buf[33]; | |
_ultoa(ms_major, buf, 10); | |
string value = buf; | |
const DWORD ms_minor = ms & 0x0000FFFF; | |
_ultoa(ms_minor, buf, 10); | |
value += '.'; | |
value += buf; | |
if (full) | |
{ | |
const DWORD ls_major = ls >> 16; | |
_ultoa(ls_major, buf, 10); | |
value += '.'; | |
value += buf; | |
const DWORD ls_minor = ls & 0x0000FFFF; | |
_ultoa(ls_minor, buf, 10); | |
value += '.'; | |
value += buf; | |
} | |
return value; | |
} | |
#endif |