Index: installer/src/installer-lib/property.cpp |
=================================================================== |
--- a/installer/src/installer-lib/property.cpp |
+++ b/installer/src/installer-lib/property.cpp |
@@ -2,9 +2,10 @@ |
* \file property.cpp Implementation of Property class etc. |
*/ |
+#include "installer-lib.h" |
#include "property.h" |
#include "session.h" |
-#include "msiquery.h" |
+#include <msiquery.h> |
#include <memory> |
//----------------------------------------------------------------------------------------- |
@@ -29,7 +30,8 @@ |
// This buffer allocates on the stack, so we don't want it too large; 64 characters is enough for most properties anyway. |
WCHAR buffer1[ 64 ] = { L'\0' } ; |
DWORD length = sizeof( buffer1 ) / sizeof( WCHAR ) ; |
- switch ( MsiGetPropertyW( handle, name.c_str(), buffer1, & length ) ) |
+ UINT x = MsiGetPropertyW( handle, name.c_str(), buffer1, & length ) ; |
+ switch ( x ) |
{ |
case ERROR_SUCCESS: |
// This call might succeed, which means the return value was short enough to fit into the buffer. |
@@ -38,17 +40,18 @@ |
// Do nothing yet. |
break ; |
default: |
- throw std::runtime_error( "Error getting property" ) ; |
+ throw windows_api_error( "MsiGetPropertyW", x, "fixed buffer" ) ; |
} |
// Assert we received ERROR_MORE_DATA |
// unique_ptr handles deallocation transparently |
- std::unique_ptr< WCHAR[] > buffer2( new WCHAR[ length ] ); |
- switch ( MsiGetPropertyW( handle, name.c_str(), buffer2.get(), & length ) ) |
+ std::unique_ptr< WCHAR[] > buffer2( new WCHAR[ length ] ) ; |
+ x = MsiGetPropertyW( handle, name.c_str(), buffer2.get(), & length ) ; |
+ switch ( x ) |
{ |
case ERROR_SUCCESS: |
return std::wstring( buffer2.get(), length ) ; |
default: |
- throw std::runtime_error( "Error getting property" ) ; |
+ throw windows_api_error( "MsiGetPropertyW", x, "allocated buffer" ) ; |
} |
} |
@@ -58,8 +61,9 @@ |
*/ |
void Property::operator=( const std::wstring & value ) |
{ |
- if ( MsiSetProperty( handle, name.c_str(), value.c_str() ) != ERROR_SUCCESS ) |
+ UINT x = MsiSetPropertyW( handle, name.c_str(), value.c_str() ) ; |
+ if ( x != ERROR_SUCCESS ) |
{ |
- throw std::runtime_error( "Error setting property" ) ; |
+ throw windows_api_error( "MsiSetPropertyW", x ) ; |
} |
} |