Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: src/installer-ca/dutil/fileutil.cpp

Issue 11521026: initial custom action library, "hello, world" quality (Closed)
Patch Set: Created Sept. 3, 2013, 12:48 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/installer-ca/dutil/fileutil.cpp
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/installer-ca/dutil/fileutil.cpp
@@ -0,0 +1,61 @@
+//-------------------------------------------------------------------------------------------------
+// <copyright file="fileutil.cpp" company="Outercurve Foundation">
+// Copyright (c) 2004, Outercurve Foundation.
+// This software is released under Microsoft Reciprocal License (MS-RL).
+// The license and further copyright text can be found in the file
+// LICENSE.TXT at the root directory of the distribution.
+// </copyright>
+//
+// <summary>
+// File helper functions.
+// </summary>
+//-------------------------------------------------------------------------------------------------
+
+#include "../precomp.h"
+
+/*******************************************************************
+ FileVersion
+
+********************************************************************/
+extern "C" HRESULT DAPI FileVersion(
+ __in LPCWSTR wzFilename,
+ __out DWORD *pdwVerMajor,
+ __out DWORD* pdwVerMinor
+ )
+{
+ HRESULT hr = S_OK;
+
+ DWORD dwHandle = 0;
+ UINT cbVerBuffer = 0;
+ LPVOID pVerBuffer = NULL;
+ VS_FIXEDFILEINFO* pvsFileInfo = NULL;
+ UINT cbFileInfo = 0;
+
+ if (0 == (cbVerBuffer = ::GetFileVersionInfoSizeW(wzFilename, &dwHandle)))
+ {
+ ExitOnLastErrorDebugTrace1(hr, "failed to get version info for file: %ls", wzFilename);
+ }
+
+ pVerBuffer = ::GlobalAlloc(GMEM_FIXED, cbVerBuffer);
+ ExitOnNullDebugTrace1(pVerBuffer, hr, E_OUTOFMEMORY, "failed to allocate version info for file: %ls", wzFilename);
+
+ if (!::GetFileVersionInfoW(wzFilename, dwHandle, cbVerBuffer, pVerBuffer))
+ {
+ ExitOnLastErrorDebugTrace1(hr, "failed to get version info for file: %ls", wzFilename);
+ }
+
+ if (!::VerQueryValueW(pVerBuffer, L"\\", (void**)&pvsFileInfo, &cbFileInfo))
+ {
+ ExitOnLastErrorDebugTrace1(hr, "failed to get version value for file: %ls", wzFilename);
+ }
+
+ *pdwVerMajor = pvsFileInfo->dwFileVersionMS;
+ *pdwVerMinor = pvsFileInfo->dwFileVersionLS;
+
+LExit:
+ if (pVerBuffer)
+ {
+ ::GlobalFree(pVerBuffer);
+ }
+ return hr;
+}

Powered by Google App Engine
This is Rietveld