- Timestamp:
- Apr 28, 2020 11:34:42 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 137647
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/tstRTErr-1.cpp
r84057 r84068 45 45 char szMsgAll[sizeof(szMsgShort) + 80]; 46 46 size_t const cbBuf = sizeof(szMsgShort); 47 char *pszBuf = (char *)RTTestGuardedAllocTail(hTest, cbBuf);47 char * const pszBuf = (char *)RTTestGuardedAllocTail(hTest, cbBuf); 48 48 RTTESTI_CHECK_RETV(pszBuf); 49 49 … … 125 125 #define CHECK_TEST_RESULT2(a_szFunction, a_pszExpect, a_cchExpect) do { \ 126 126 ssize_t const cchLocalExpect = cbBuf2 > (a_cchExpect) ? (ssize_t)(a_cchExpect) : -(ssize_t)(a_cchExpect) - 1; \ 127 if (cchRet != cchLocalExpect) \ 127 if (cchRet != cchLocalExpect && cchRet > 0) \ 128 RTTestFailed(hTest, "%s(%s, , %#x) -> %zd, expected %zd ('%s' vs '%s')", a_szFunction, pszDefine, cbBuf2, \ 129 cchRet, cchLocalExpect, pszBuf2, (a_pszExpect)); \ 130 else if (cchRet != cchLocalExpect && cchRet <= 0) \ 128 131 RTTestFailed(hTest, "%s(%s, , %#x) -> %zd, expected %zd", a_szFunction, pszDefine, cbBuf2, \ 129 132 cchRet, cchLocalExpect); \ … … 136 139 memset(pszBuf, '?', cbBuf); 137 140 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rrc", rc); 138 CHECK_TEST_RESULT2("RTErrFormat eDefine/%Rrc", pszDefine, cchDefine);141 CHECK_TEST_RESULT2("RTErrFormatDefine/%Rrc", pszDefine, cchDefine); 139 142 140 143 memset(pszBuf, '?', cbBuf); 141 144 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rrs", rc); 142 CHECK_TEST_RESULT2("RTErrFormat eDefine/%Rrs", szMsgShort, cchMsgShort);145 CHECK_TEST_RESULT2("RTErrFormatMsgShort/%Rrs", szMsgShort, cchMsgShort); 143 146 144 147 memset(pszBuf, '?', cbBuf); 145 148 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rrf", rc); 146 CHECK_TEST_RESULT2("RTErrFormat eDefine/%Rrf", szMsgFull, cchMsgFull);149 CHECK_TEST_RESULT2("RTErrFormatMsgFull/%Rrf", szMsgFull, cchMsgFull); 147 150 148 151 if (cchMsgAll == ~(size_t)0) … … 150 153 memset(pszBuf, '?', cbBuf); 151 154 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rra", rc); 152 CHECK_TEST_RESULT2("RTErrFormat eDefine/%Rra", szMsgAll, cchMsgAll);155 CHECK_TEST_RESULT2("RTErrFormatMsgAll/%Rra", szMsgAll, cchMsgAll); 153 156 } 154 157 RTTestRestoreAssertions(hTest); … … 198 201 memset(pszBuf, '?', cbBuf); 199 202 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rrc", rc); 200 CHECK_TEST_RESULT2("RTErrFormat eDefine/%Rrc", pszDefine, cchDefine);203 CHECK_TEST_RESULT2("RTErrFormatDefine/%Rrc", pszDefine, cchDefine); 201 204 202 205 memset(pszBuf, '?', cbBuf); 203 206 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rrs", rc); 204 CHECK_TEST_RESULT2("RTErrFormat eDefine/%Rrs", pszMsg, cchMsg);207 CHECK_TEST_RESULT2("RTErrFormatMsgShort/%Rrs", pszMsg, cchMsg); 205 208 206 209 memset(pszBuf, '?', cbBuf); 207 210 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rrf", rc); 208 CHECK_TEST_RESULT2("RTErrFormat eDefine/%Rrf", pszMsg, cchMsg);211 CHECK_TEST_RESULT2("RTErrFormatMsgFull/%Rrf", pszMsg, cchMsg); 209 212 210 213 memset(pszBuf, '?', cbBuf); 211 214 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rra", rc); 212 CHECK_TEST_RESULT2("RTErrFormateDefine/%Rra", pszMsg, cchMsg); 215 CHECK_TEST_RESULT2("RTErrFormatMsgAll/%Rra", pszMsg, cchMsg); 216 } 217 RTTestRestoreAssertions(hTest); 218 } 219 220 RTTestGuardedFree(hTest, pszBuf); 221 } 222 223 224 #ifdef RT_OS_WINDOWS 225 static void tstWinComStatuses(RTTEST hTest) 226 { 227 RTTestSub(hTest, "COM/Win status codes"); 228 229 char szMsg[640]; 230 char szMsgAll[sizeof(szMsg) + 80]; 231 size_t const cbBuf = sizeof(szMsg); 232 char * const pszBuf = (char *)RTTestGuardedAllocTail(hTest, cbBuf); 233 RTTESTI_CHECK_RETV(pszBuf); 234 235 static const struct 236 { 237 int32_t rc; 238 const char *pszDefine; 239 } s_aTests[] = 240 { 241 { (int32_t)0x00000000, "ERROR_SUCCESS" }, 242 { (int32_t)0x0000000e, "ERROR_OUTOFMEMORY" }, 243 { (int32_t)0x8007000e, "E_OUTOFMEMORY" }, 244 { (int32_t)0x00000057, "ERROR_INVALID_PARAMETER" }, 245 { (int32_t)0x80070057, "E_INVALIDARG" }, 246 { (int32_t)0x80004005, "E_FAIL" }, 247 { (int32_t)0x00000783, "RPC_S_NOT_ALL_OBJS_EXPORTED" }, 248 249 }; 250 for (size_t i = 0; i < RT_ELEMENTS(s_aTests); i++) 251 { 252 int32_t const rc = s_aTests[i].rc; 253 const char * const pszDefine = s_aTests[i].pszDefine; 254 size_t const cchDefine = strlen(pszDefine); 255 256 if (RTErrWinIsKnown(rc) != true) 257 RTTestFailed(hTest, "RTErrIsKnown(%s) did not return true", pszDefine); 258 259 RTTestDisableAssertions(hTest); 260 size_t cchMsg = ~(size_t)0; 261 size_t cchMsgAll = ~(size_t)0; 262 size_t cbBuf2 = cbBuf - 1; 263 while (cbBuf2-- > 0) 264 { 265 /* RTErrQueryDefine: */ 266 memset(pszBuf, '?', cbBuf); 267 char *pszBuf2 = &pszBuf[cbBuf - cbBuf2]; 268 ssize_t cchRet = RTErrWinQueryDefine(rc, pszBuf2, cbBuf2, false); 269 CHECK_TEST_RESULT("RTErrWinQueryDefine", pszDefine, cchDefine); 270 271 /* Thru the string formatter. */ 272 memset(pszBuf, '?', cbBuf); 273 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rwc", rc); 274 CHECK_TEST_RESULT2("RTErrWinFormatDefine/%Rwc", pszDefine, cchDefine); 275 276 memset(pszBuf, '?', cbBuf); 277 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rhrc", rc); 278 CHECK_TEST_RESULT2("RTErrWinFormatDefine/%Rhrc", pszDefine, cchDefine); 279 280 memset(pszBuf, '?', cbBuf); 281 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rwf", rc); 282 if (cchMsg == ~(size_t)0) 283 { 284 cchMsg = (size_t)cchRet; 285 memcpy(szMsg, pszBuf2, cchMsg + 1); 286 } 287 CHECK_TEST_RESULT2("RTErrWinFormatMsg/%Rwf", szMsg, cchMsg); 288 289 memset(pszBuf, '?', cbBuf); 290 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rhrf", rc); 291 CHECK_TEST_RESULT2("RTErrWinFormatMsg/%Rhrf", szMsg, cchMsg); 292 293 if (cchMsgAll == ~(size_t)0) 294 cchMsgAll = RTStrPrintf(szMsgAll, sizeof(szMsgAll), "%s (%#x) - %s", pszDefine, rc, szMsg); 295 memset(pszBuf, '?', cbBuf); 296 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rwa", rc); 297 CHECK_TEST_RESULT2("RTErrWinFormatMsgAll/%Rwa", szMsgAll, cchMsgAll); 298 299 memset(pszBuf, '?', cbBuf); 300 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rhra", rc); 301 CHECK_TEST_RESULT2("RTErrWinFormatMsgAll/%Rhra", szMsgAll, cchMsgAll); 302 } 303 RTTestRestoreAssertions(hTest); 304 } 305 306 /* 307 * Same but for an unknown status code. 308 */ 309 static const int32_t s_arcUnknowns[] = { (int32_t)0xff88ff88, 0x0f88ff88, }; 310 for (size_t i = 0; i < RT_ELEMENTS(s_arcUnknowns); i++) 311 { 312 int32_t const rc = s_arcUnknowns[i]; 313 314 if (RTErrIsKnown(rc) != false) 315 RTTestFailed(hTest, "RTErrIsKnown(%d) did not return false", rc); 316 317 size_t const cchDefine = RTStrPrintf(szMsg, sizeof(szMsg), "%#x", rc); 318 const char * const pszDefine = szMsg; 319 size_t const cchMsg = RTStrPrintf(szMsgAll, sizeof(szMsgAll), "Unknown Status %#x", rc); 320 const char * const pszMsg = szMsgAll; 321 322 RTTestDisableAssertions(hTest); 323 size_t cbBuf2 = cbBuf - 1; 324 while (cbBuf2-- > 0) 325 { 326 /* RTErrWinQueryDefine: */ 327 memset(pszBuf, '?', cbBuf); 328 char *pszBuf2 = &pszBuf[cbBuf - cbBuf2]; 329 ssize_t cchRet = RTErrWinQueryDefine(rc, pszBuf2, cbBuf2, false); 330 CHECK_TEST_RESULT("RTErrWinQueryDefine", pszDefine, cchDefine); 331 RTTEST_CHECK(hTest, RTErrWinQueryDefine(rc, pszBuf2, cbBuf2, true) == VERR_NOT_FOUND); 332 333 /* Thru the string formatter. */ 334 memset(pszBuf, '?', cbBuf); 335 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rwc", rc); 336 CHECK_TEST_RESULT2("RTErrWinFormatDefine/%Rwc", pszDefine, cchDefine); 337 338 memset(pszBuf, '?', cbBuf); 339 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rhrc", rc); 340 CHECK_TEST_RESULT2("RTErrWinFormatDefine/%Rhrc", pszDefine, cchDefine); 341 342 memset(pszBuf, '?', cbBuf); 343 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rwf", rc); 344 CHECK_TEST_RESULT2("RTErrWinFormatMsg/%Rwf", pszMsg, cchMsg); 345 346 memset(pszBuf, '?', cbBuf); 347 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rhrf", rc); 348 CHECK_TEST_RESULT2("RTErrWinFormatMsg/%Rhrf", pszMsg, cchMsg); 349 350 memset(pszBuf, '?', cbBuf); 351 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rwa", rc); 352 CHECK_TEST_RESULT2("RTErrWinFormatMsgAll/%Rwa", pszMsg, cchMsg); 353 354 memset(pszBuf, '?', cbBuf); 355 cchRet = RTStrPrintf2(pszBuf2, cbBuf2, "%Rhra", rc); 356 CHECK_TEST_RESULT2("RTErrWinFormatMsgAll/%Rhra", pszMsg, cchMsg); 213 357 } 214 358 RTTestRestoreAssertions(hTest); 215 359 } 216 360 } 217 361 #endif 218 362 219 363 int main(int argc, char **argv) … … 227 371 228 372 tstIprtStatuses(hTest); 229 //tstComStatuses(hTest); 373 #ifdef RT_OS_WINDOWS 374 tstWinComStatuses(hTest); 375 #else 376 #endif 230 377 231 378 /* -
trunk/src/VBox/Runtime/win/errmsgwin.cpp
r84067 r84068 263 263 if (idx != ~(size_t)0) 264 264 { 265 cchRet += pfnOutput(pvArgOutput, RT_STR_TUPLE(" - "));265 cchRet += pfnOutput(pvArgOutput, RT_STR_TUPLE(") - ")); 266 266 cchRet += RTBldProgStrTabQueryOutput(&g_WinMsgStrTab, 267 267 g_aWinMsgs[idx].offMsgFull, g_aWinMsgs[idx].cchMsgFull,
Note:
See TracChangeset
for help on using the changeset viewer.