Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

949 lines
25 KiB

  1. /*++
  2. Copyright (c) 1991-1999, Microsoft Corporation All rights reserved.
  3. Module Name:
  4. gsttest.c
  5. Abstract:
  6. Test module for NLS API GetStringType.
  7. NOTE: This code was simply hacked together quickly in order to
  8. test the different code modules of the NLS component.
  9. This is NOT meant to be a formal regression test.
  10. Revision History:
  11. 06-14-91 JulieB Created.
  12. --*/
  13. //
  14. // Include Files.
  15. //
  16. #include "nlstest.h"
  17. //
  18. // Constant Declarations.
  19. //
  20. #define BUFSIZE 50
  21. #define GST_INVALID_FLAGS ((DWORD)(~(CT_CTYPE1 | CT_CTYPE2 | CT_CTYPE3)))
  22. #define CT1_LOCASE_LETTER L"\x0302\x0302"
  23. #define CT1_UPCASE_LETTER L"\x0301\x0301"
  24. #ifdef JDB
  25. // JDB - Fix to get around C compiler bug - it tries to translate
  26. // from Unicode to Ansi
  27. #define CT1_NUMBER L"\x0284\x0284"
  28. #else
  29. // JDB - Fix to get around C compiler bug.
  30. WCHAR CT1_NUMBER[] = {0x0284, 0x0284, 0x0000};
  31. #endif
  32. #define CT1_PUNCTUATION L"\x0210\x0210"
  33. #define CT2_LOCASE_LETTER L"\x0001\x0001"
  34. #define CT2_UPCASE_LETTER L"\x0001\x0001"
  35. #define CT2_NUMBER L"\x0003\x0003"
  36. #define CT2_PUNCTUATION L"\x000b\x000b"
  37. #define CT3_VALUE L"\x8040\x8040"
  38. #define CT3_SYMBOL L"\x0048\x0048"
  39. //
  40. // Global Variables.
  41. //
  42. #define pGSTSrcLower L"th"
  43. #define pGSTSrcUpper L"TH"
  44. #define pGSTSrcNumber L"12"
  45. #define pGSTSrcPunct L";?"
  46. WORD pCharType[BUFSIZE * 2];
  47. //
  48. // Forward Declarations.
  49. //
  50. BOOL
  51. InitGetStringType();
  52. int
  53. GST_BadParamCheck();
  54. int
  55. GST_NormalCase();
  56. int
  57. GST_Ansi();
  58. void
  59. CheckReturnGetStringType(
  60. int CurrentReturn,
  61. int ExpectedReturn,
  62. LPWSTR pCurrentString,
  63. LPWSTR pExpectedString,
  64. int ExpectedSize,
  65. LPSTR pErrString,
  66. int *pNumErrors);
  67. ////////////////////////////////////////////////////////////////////////////
  68. //
  69. // TestGetStringType
  70. //
  71. // Test routine for GetStringTypeW API.
  72. //
  73. // 06-14-91 JulieB Created.
  74. ////////////////////////////////////////////////////////////////////////////
  75. int TestGetStringType()
  76. {
  77. int ErrCount = 0; // error count
  78. //
  79. // Print out what's being done.
  80. //
  81. printf("\n\nTESTING GetStringTypeW...\n\n");
  82. //
  83. // Initialize global variables.
  84. //
  85. if (!InitGetStringType())
  86. {
  87. printf("\nABORTED TestGetStringType: Could not Initialize.\n");
  88. return (1);
  89. }
  90. //
  91. // Test bad parameters.
  92. //
  93. ErrCount += GST_BadParamCheck();
  94. //
  95. // Test normal cases.
  96. //
  97. ErrCount += GST_NormalCase();
  98. //
  99. // Test Ansi version.
  100. //
  101. ErrCount += GST_Ansi();
  102. //
  103. // Print out result.
  104. //
  105. printf("\nGetStringTypeW: ERRORS = %d\n", ErrCount);
  106. //
  107. // Return total number of errors found.
  108. //
  109. return (ErrCount);
  110. }
  111. ////////////////////////////////////////////////////////////////////////////
  112. //
  113. // InitGetStringType
  114. //
  115. // This routine initializes the global variables. If no errors were
  116. // encountered, then it returns TRUE. Otherwise, it returns FALSE.
  117. //
  118. // 06-14-91 JulieB Created.
  119. ////////////////////////////////////////////////////////////////////////////
  120. BOOL InitGetStringType()
  121. {
  122. //
  123. // Return success.
  124. //
  125. return (TRUE);
  126. }
  127. ////////////////////////////////////////////////////////////////////////////
  128. //
  129. // GST_BadParamCheck
  130. //
  131. // This routine passes in bad parameters to the API routine and checks to
  132. // be sure they are handled properly. The number of errors encountered
  133. // is returned to the caller.
  134. //
  135. // 06-14-91 JulieB Created.
  136. ////////////////////////////////////////////////////////////////////////////
  137. int GST_BadParamCheck()
  138. {
  139. int NumErrors = 0; // error count - to be returned
  140. BOOL rc; // return code
  141. //
  142. // Null Pointers.
  143. //
  144. // Variation 1 - lpSrcStr = NULL
  145. rc = GetStringTypeW( CT_CTYPE1,
  146. NULL,
  147. -1,
  148. pCharType );
  149. CheckReturnBadParam( rc,
  150. FALSE,
  151. ERROR_INVALID_PARAMETER,
  152. "lpSrcStr NULL",
  153. &NumErrors );
  154. // Variation 2 - lpCharType = NULL
  155. rc = GetStringTypeW( CT_CTYPE1,
  156. pGSTSrcUpper,
  157. -1,
  158. NULL );
  159. CheckReturnBadParam( rc,
  160. FALSE,
  161. ERROR_INVALID_PARAMETER,
  162. "lpCharType NULL",
  163. &NumErrors );
  164. //
  165. // Bad Counts.
  166. //
  167. // Variation 1 - cbSrc = 0
  168. rc = GetStringTypeW( CT_CTYPE1,
  169. pGSTSrcUpper,
  170. 0,
  171. pCharType );
  172. CheckReturnBadParam( rc,
  173. FALSE,
  174. ERROR_INVALID_PARAMETER,
  175. "cbSrc = 0",
  176. &NumErrors );
  177. //
  178. // Zero or Invalid Flag Values.
  179. //
  180. // Variation 1 - dwInfoType = invalid
  181. rc = GetStringTypeW( GST_INVALID_FLAGS,
  182. pGSTSrcUpper,
  183. -1,
  184. pCharType );
  185. CheckReturnBadParam( rc,
  186. FALSE,
  187. ERROR_INVALID_FLAGS,
  188. "dwInfoType invalid",
  189. &NumErrors );
  190. // Variation 2 - dwInfoType = 0
  191. rc = GetStringTypeW( 0,
  192. pGSTSrcUpper,
  193. -1,
  194. pCharType );
  195. CheckReturnBadParam( rc,
  196. FALSE,
  197. ERROR_INVALID_FLAGS,
  198. "dwInfoType zero",
  199. &NumErrors );
  200. // Variation 3 - illegal combo case 1,2
  201. rc = GetStringTypeW( CT_CTYPE1 | CT_CTYPE2,
  202. pGSTSrcUpper,
  203. -1,
  204. pCharType );
  205. CheckReturnBadParam( rc,
  206. FALSE,
  207. ERROR_INVALID_FLAGS,
  208. "illegal combo case 1,2",
  209. &NumErrors );
  210. // Variation 4 - illegal combo case 1,3
  211. rc = GetStringTypeW( CT_CTYPE1 | CT_CTYPE3,
  212. pGSTSrcUpper,
  213. -1,
  214. pCharType );
  215. CheckReturnBadParam( rc,
  216. FALSE,
  217. ERROR_INVALID_FLAGS,
  218. "illegal combo case 1,3",
  219. &NumErrors );
  220. // Variation 5 - illegal combo case 2,3
  221. rc = GetStringTypeW( CT_CTYPE2 | CT_CTYPE3,
  222. pGSTSrcUpper,
  223. -1,
  224. pCharType );
  225. CheckReturnBadParam( rc,
  226. FALSE,
  227. ERROR_INVALID_FLAGS,
  228. "illegal combo case 2,3",
  229. &NumErrors );
  230. //
  231. // Return total number of errors found.
  232. //
  233. return (NumErrors);
  234. }
  235. ////////////////////////////////////////////////////////////////////////////
  236. //
  237. // GST_NormalCase
  238. //
  239. // This routine tests the normal cases of the API routine.
  240. //
  241. // 06-14-91 JulieB Created.
  242. ////////////////////////////////////////////////////////////////////////////
  243. int GST_NormalCase()
  244. {
  245. int NumErrors = 0; // error count - to be returned
  246. int rc; // return code
  247. #ifdef PERF
  248. DbgBreakPoint();
  249. #endif
  250. //
  251. // GetStringTypeW
  252. //
  253. //
  254. // cbSrc.
  255. //
  256. // Variation 1 - cbSrc = -1
  257. rc = GetStringTypeW( CT_CTYPE1,
  258. pGSTSrcUpper,
  259. -1,
  260. pCharType );
  261. CheckReturnEqual( rc,
  262. FALSE,
  263. "cbSrc (-1)",
  264. &NumErrors );
  265. // Variation 2 - cbSrc = value
  266. rc = GetStringTypeW( CT_CTYPE1,
  267. pGSTSrcUpper,
  268. WC_STRING_LEN(pGSTSrcUpper),
  269. pCharType );
  270. CheckReturnEqual( rc,
  271. FALSE,
  272. "cbSrc (value)",
  273. &NumErrors );
  274. //
  275. // CTYPE 1.
  276. //
  277. // Variation 1 - ctype1, lower
  278. rc = GetStringTypeW( CT_CTYPE1,
  279. pGSTSrcLower,
  280. -1,
  281. pCharType );
  282. CheckReturnGetStringType( rc,
  283. TRUE,
  284. pCharType,
  285. CT1_LOCASE_LETTER,
  286. 2,
  287. "ctype1, lower",
  288. &NumErrors );
  289. // Variation 2 - ctype1, upper case letter
  290. rc = GetStringTypeW( CT_CTYPE1,
  291. pGSTSrcUpper,
  292. -1,
  293. pCharType );
  294. CheckReturnGetStringType( rc,
  295. TRUE,
  296. pCharType,
  297. CT1_UPCASE_LETTER,
  298. 2,
  299. "ctype1, upper",
  300. &NumErrors );
  301. // Variation 3 - ctype1, number
  302. rc = GetStringTypeW( CT_CTYPE1,
  303. pGSTSrcNumber,
  304. -1,
  305. pCharType );
  306. CheckReturnGetStringType( rc,
  307. TRUE,
  308. pCharType,
  309. CT1_NUMBER,
  310. 2,
  311. "ctype1, number",
  312. &NumErrors );
  313. // Variation 4 - ctype1, punctuation
  314. rc = GetStringTypeW( CT_CTYPE1,
  315. pGSTSrcPunct,
  316. -1,
  317. pCharType );
  318. CheckReturnGetStringType( rc,
  319. TRUE,
  320. pCharType,
  321. CT1_PUNCTUATION,
  322. 2,
  323. "ctype1, punctuation",
  324. &NumErrors );
  325. // Variation 5 - ctype 1
  326. rc = GetStringTypeW( CT_CTYPE1,
  327. L"\xff53",
  328. -1,
  329. pCharType );
  330. CheckReturnGetStringType( rc,
  331. TRUE,
  332. pCharType,
  333. L"\x0302\x0220",
  334. 2,
  335. "ctype1 (0xff53)",
  336. &NumErrors );
  337. //
  338. // CTYPE 2.
  339. //
  340. // Variation 1 - ctype2, lower
  341. rc = GetStringTypeW( CT_CTYPE2,
  342. pGSTSrcLower,
  343. -1,
  344. pCharType );
  345. CheckReturnGetStringType( rc,
  346. TRUE,
  347. pCharType,
  348. CT2_LOCASE_LETTER,
  349. 2,
  350. "ctype2, lower",
  351. &NumErrors );
  352. // Variation 2 - ctype2, upper case letter
  353. rc = GetStringTypeW( CT_CTYPE2,
  354. pGSTSrcUpper,
  355. -1,
  356. pCharType );
  357. CheckReturnGetStringType( rc,
  358. TRUE,
  359. pCharType,
  360. CT2_UPCASE_LETTER,
  361. 2,
  362. "ctype2, upper",
  363. &NumErrors );
  364. // Variation 3 - ctype2, number
  365. rc = GetStringTypeW( CT_CTYPE2,
  366. pGSTSrcNumber,
  367. -1,
  368. pCharType );
  369. CheckReturnGetStringType( rc,
  370. TRUE,
  371. pCharType,
  372. CT2_NUMBER,
  373. 2,
  374. "ctype2, number",
  375. &NumErrors );
  376. // Variation 4 - ctype2, punctuation
  377. rc = GetStringTypeW( CT_CTYPE2,
  378. pGSTSrcPunct,
  379. -1,
  380. pCharType );
  381. CheckReturnGetStringType( rc,
  382. TRUE,
  383. pCharType,
  384. CT2_PUNCTUATION,
  385. 2,
  386. "ctype2, punctuation",
  387. &NumErrors );
  388. // Variation 5 - ctype 2
  389. rc = GetStringTypeW( CT_CTYPE2,
  390. L"\xff53",
  391. -1,
  392. pCharType );
  393. CheckReturnGetStringType( rc,
  394. TRUE,
  395. pCharType,
  396. L"\x0001\x0000",
  397. 2,
  398. "ctype2 (0xff53)",
  399. &NumErrors );
  400. //
  401. // CTYPE 3.
  402. //
  403. // Variation 1 - ctype 3 should return zeros
  404. rc = GetStringTypeW( CT_CTYPE3,
  405. pGSTSrcLower,
  406. -1,
  407. pCharType );
  408. CheckReturnGetStringType( rc,
  409. TRUE,
  410. pCharType,
  411. CT3_VALUE,
  412. 2,
  413. "ctype3 zero",
  414. &NumErrors );
  415. // Variation 2 - ctype 3 symbol
  416. rc = GetStringTypeW( CT_CTYPE3,
  417. pGSTSrcPunct,
  418. -1,
  419. pCharType );
  420. CheckReturnGetStringType( rc,
  421. TRUE,
  422. pCharType,
  423. CT3_SYMBOL,
  424. 2,
  425. "ctype3 symbol",
  426. &NumErrors );
  427. // Variation 3 - ctype 3
  428. rc = GetStringTypeW( CT_CTYPE3,
  429. L"\xff53",
  430. -1,
  431. pCharType );
  432. CheckReturnGetStringType( rc,
  433. TRUE,
  434. pCharType,
  435. L"\x8080\x0000",
  436. 2,
  437. "ctype3 (0xff53)",
  438. &NumErrors );
  439. ////////////////////////////////////////////////////////////////////////////
  440. //
  441. // GetStringTypeExW
  442. //
  443. //
  444. // cbSrc.
  445. //
  446. // Variation 1 - cbSrc = -1
  447. rc = GetStringTypeExW( 0x0409,
  448. CT_CTYPE1,
  449. pGSTSrcUpper,
  450. -1,
  451. pCharType );
  452. CheckReturnEqual( rc,
  453. FALSE,
  454. "Ex cbSrc (-1)",
  455. &NumErrors );
  456. //
  457. // CTYPE 1.
  458. //
  459. // Variation 1 - ctype1, lower
  460. rc = GetStringTypeExW( 0x0409,
  461. CT_CTYPE1,
  462. pGSTSrcLower,
  463. -1,
  464. pCharType );
  465. CheckReturnGetStringType( rc,
  466. TRUE,
  467. pCharType,
  468. CT1_LOCASE_LETTER,
  469. 2,
  470. "Ex ctype1 lower",
  471. &NumErrors );
  472. //
  473. // CTYPE 2.
  474. //
  475. // Variation 1 - ctype2, lower
  476. rc = GetStringTypeExW( 0x0409,
  477. CT_CTYPE2,
  478. pGSTSrcLower,
  479. -1,
  480. pCharType );
  481. CheckReturnGetStringType( rc,
  482. TRUE,
  483. pCharType,
  484. CT2_LOCASE_LETTER,
  485. 2,
  486. "Ex ctype2 lower",
  487. &NumErrors );
  488. //
  489. // CTYPE 3.
  490. //
  491. // Variation 1 - ctype 3 should return zeros
  492. rc = GetStringTypeExW( 0x0409,
  493. CT_CTYPE3,
  494. pGSTSrcLower,
  495. -1,
  496. pCharType );
  497. CheckReturnGetStringType( rc,
  498. TRUE,
  499. pCharType,
  500. CT3_VALUE,
  501. 2,
  502. "Ex ctype3 zero",
  503. &NumErrors );
  504. //
  505. // Return total number of errors found.
  506. //
  507. return (NumErrors);
  508. }
  509. ////////////////////////////////////////////////////////////////////////////
  510. //
  511. // GST_Ansi
  512. //
  513. // This routine tests the Ansi version of the API routine.
  514. //
  515. // 06-14-91 JulieB Created.
  516. ////////////////////////////////////////////////////////////////////////////
  517. int GST_Ansi()
  518. {
  519. int NumErrors = 0; // error count - to be returned
  520. int rc; // return code
  521. //
  522. // GetStringTypeA
  523. //
  524. //
  525. // cbSrc.
  526. //
  527. // Variation 1 - cbSrc = -1
  528. rc = GetStringTypeA( 0x0409,
  529. CT_CTYPE1,
  530. "TH",
  531. -1,
  532. pCharType );
  533. CheckReturnGetStringType( rc,
  534. TRUE,
  535. pCharType,
  536. CT1_UPCASE_LETTER,
  537. 2,
  538. "A version cbSrc (-1)",
  539. &NumErrors );
  540. // Variation 2 - cbSrc = value
  541. rc = GetStringTypeA( 0x0409,
  542. CT_CTYPE1,
  543. "TH",
  544. 2,
  545. pCharType );
  546. CheckReturnGetStringType( rc,
  547. TRUE,
  548. pCharType,
  549. CT1_UPCASE_LETTER,
  550. 2,
  551. "A version cbSrc (value)",
  552. &NumErrors );
  553. //
  554. // CTYPE 1.
  555. //
  556. // Variation 1 - Ab
  557. rc = GetStringTypeA( 0x0409,
  558. CT_CTYPE1,
  559. "Ab",
  560. -1,
  561. pCharType );
  562. CheckReturnGetStringType( rc,
  563. TRUE,
  564. pCharType,
  565. L"\x0381\x0382\x0220",
  566. 3,
  567. "A version ctype1 (Ab)",
  568. &NumErrors );
  569. //
  570. // CTYPE 2.
  571. //
  572. // Variation 1 - Ab
  573. rc = GetStringTypeA( 0x0409,
  574. CT_CTYPE2,
  575. "Ab",
  576. -1,
  577. pCharType );
  578. CheckReturnGetStringType( rc,
  579. TRUE,
  580. pCharType,
  581. L"\x0001\x0001\x0000",
  582. 3,
  583. "A version ctype2 (Ab)",
  584. &NumErrors );
  585. //
  586. // CTYPE 3.
  587. //
  588. // Variation 1 - Ab
  589. rc = GetStringTypeA( 0x0409,
  590. CT_CTYPE3,
  591. "Ab",
  592. -1,
  593. pCharType );
  594. CheckReturnGetStringType( rc,
  595. TRUE,
  596. pCharType,
  597. L"\x8040\x8040\x0000",
  598. 3,
  599. "A version ctype3 (Ab)",
  600. &NumErrors );
  601. //
  602. // Check invalid chars.
  603. //
  604. // Variation 1 - invalid chars
  605. rc = GetStringTypeA( 0x0411,
  606. CT_CTYPE1,
  607. "\xa0\xfd\xfe\xff\x85\x40\x81\x02\x81",
  608. 9,
  609. pCharType );
  610. CheckReturnGetStringType( rc,
  611. TRUE,
  612. pCharType,
  613. L"\x0000\x0000\x0000\x0000\x0000\x0000\x0000",
  614. 7,
  615. "A version ctype1 (invalid chars)",
  616. &NumErrors );
  617. // Variation 2 - invalid chars
  618. rc = GetStringTypeA( 0x0411,
  619. CT_CTYPE2,
  620. "\xa0\xfd\xfe\xff\x85\x40\x81\x02\x81",
  621. 9,
  622. pCharType );
  623. CheckReturnGetStringType( rc,
  624. TRUE,
  625. pCharType,
  626. L"\x0000\x0000\x0000\x0000\x0000\x0000\x0000",
  627. 7,
  628. "A version ctype2 (invalid chars)",
  629. &NumErrors );
  630. // Variation 3 - invalid chars
  631. rc = GetStringTypeA( 0x0411,
  632. CT_CTYPE3,
  633. "\xa0\xfd\xfe\xff\x85\x40\x81\x02\x81",
  634. 9,
  635. pCharType );
  636. CheckReturnGetStringType( rc,
  637. TRUE,
  638. pCharType,
  639. L"\x0000\x0000\x0000\x0000\x0000\x0000\x0000",
  640. 7,
  641. "A version ctype3 (invalid chars)",
  642. &NumErrors );
  643. ////////////////////////////////////////////////////////////////////////////
  644. //
  645. // GetStringTypeExA
  646. //
  647. //
  648. // cbSrc.
  649. //
  650. // Variation 1 - cbSrc = -1
  651. rc = GetStringTypeExA( 0x0409,
  652. CT_CTYPE1,
  653. "TH",
  654. -1,
  655. pCharType );
  656. CheckReturnGetStringType( rc,
  657. TRUE,
  658. pCharType,
  659. CT1_UPCASE_LETTER,
  660. 2,
  661. "Ex A version cbSrc (-1)",
  662. &NumErrors );
  663. // Variation 2 - cbSrc = value
  664. rc = GetStringTypeExA( 0x0409,
  665. CT_CTYPE1,
  666. "TH",
  667. 2,
  668. pCharType );
  669. CheckReturnGetStringType( rc,
  670. TRUE,
  671. pCharType,
  672. CT1_UPCASE_LETTER,
  673. 2,
  674. "Ex A version cbSrc (value)",
  675. &NumErrors );
  676. //
  677. // CTYPE 1.
  678. //
  679. // Variation 1 - Ab
  680. rc = GetStringTypeExA( 0x0409,
  681. CT_CTYPE1,
  682. "Ab",
  683. -1,
  684. pCharType );
  685. CheckReturnGetStringType( rc,
  686. TRUE,
  687. pCharType,
  688. L"\x0381\x0382\x0220",
  689. 3,
  690. "Ex A version ctype1 (Ab)",
  691. &NumErrors );
  692. //
  693. // CTYPE 2.
  694. //
  695. // Variation 1 - Ab
  696. rc = GetStringTypeExA( 0x0409,
  697. CT_CTYPE2,
  698. "Ab",
  699. -1,
  700. pCharType );
  701. CheckReturnGetStringType( rc,
  702. TRUE,
  703. pCharType,
  704. L"\x0001\x0001\x0000",
  705. 3,
  706. "Ex A version ctype2 (Ab)",
  707. &NumErrors );
  708. //
  709. // CTYPE 3.
  710. //
  711. // Variation 1 - Ab
  712. rc = GetStringTypeExA( 0x0409,
  713. CT_CTYPE3,
  714. "Ab",
  715. -1,
  716. pCharType );
  717. CheckReturnGetStringType( rc,
  718. TRUE,
  719. pCharType,
  720. L"\x8040\x8040\x0000",
  721. 3,
  722. "Ex A version ctype3 (Ab)",
  723. &NumErrors );
  724. //
  725. // Return total number of errors found.
  726. //
  727. return (NumErrors);
  728. }
  729. ////////////////////////////////////////////////////////////////////////////
  730. //
  731. // CheckReturnGetStringType
  732. //
  733. // Checks the return code from the valid GetStringType[A|W] call. It
  734. // prints out the appropriate error if the incorrect result is found.
  735. //
  736. // 06-14-91 JulieB Created.
  737. ////////////////////////////////////////////////////////////////////////////
  738. void CheckReturnGetStringType(
  739. int CurrentReturn,
  740. int ExpectedReturn,
  741. LPWSTR pCurrentString,
  742. LPWSTR pExpectedString,
  743. int ExpectedSize,
  744. LPSTR pErrString,
  745. int *pNumErrors)
  746. {
  747. int ctr; // loop counter
  748. if ( (CurrentReturn != ExpectedReturn) ||
  749. ( (pCurrentString != NULL) &&
  750. (CompStringsW(pCurrentString, pExpectedString, ExpectedSize)) ) )
  751. {
  752. printf("ERROR: %s - \n", pErrString);
  753. printf(" Return = %d, Expected = %d\n", CurrentReturn, ExpectedReturn);
  754. if (pCurrentString != NULL)
  755. {
  756. printf(" ");
  757. for (ctr = 0; ctr < ExpectedSize; ctr++)
  758. {
  759. printf("%x ", pCurrentString[ctr]);
  760. }
  761. printf("\n");
  762. }
  763. (*pNumErrors)++;
  764. }
  765. }