102x_msg_va(
const unsigned int flags,
const char *format, va_list arglist)
105 DWORD dwResult = (flags &
M_ERRNO) != 0 ? GetLastError() : ERROR_SUCCESS;
116 MSIHANDLE hRecordProg = MsiCreateRecord(4);
120 char szBufStack[128];
121 int iResultLen = vsnprintf(szBufStack, _countof(szBufStack), format, arglist);
122 if (iResultLen > 0 && (
unsigned int)iResultLen < _countof(szBufStack))
125 MsiRecordSetStringA(hRecordProg, 2, szBufStack);
130 char *szMessage = (
char *)malloc(++iResultLen *
sizeof(
char));
131 if (szMessage != NULL)
133 vsnprintf(szMessage, iResultLen, format, arglist);
134 MsiRecordSetStringA(hRecordProg, 2, szMessage);
140 szBufStack[_countof(szBufStack) - 1] = 0;
141 MsiRecordSetStringA(hRecordProg, 2, szBufStack);
157 MsiRecordSetInteger(hRecordProg, 3, dwResult);
160 LPWSTR szErrMessage = NULL;
161 if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER
162 | FORMAT_MESSAGE_IGNORE_INSERTS,
163 0, dwResult, 0, (LPWSTR)&szErrMessage, 0, NULL)
168 for (
size_t i = 0, i_last = 0;; i++)
172 if (!iswspace(szErrMessage[i]))
179 szErrMessage[i_last] = 0;
183 MsiRecordSetString(hRecordProg, 4, szErrMessage);
184 LocalFree(szErrMessage);
188 MsiProcessMessage(s->
hInstall, (flags &
M_WARN) ? INSTALLMESSAGE_INFO : INSTALLMESSAGE_ERROR,
190 MsiCloseHandle(hRecordProg);
bool dont_mute(unsigned int flags)
Check muting filter.
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD dwReason, _In_ LPVOID lpReserved)
DLL entry point.
void x_msg_va(const unsigned int flags, const char *format, va_list arglist)
DWORD openvpnmsica_thread_data_idx
MSI session handle thread local storage index.