1 //We are including stdlib.h and stddef.h first because under MSVC 2 //those headers contains a errno macro definition without the underlying value 3 //definition. 4 #include <stdlib.h> 5 #include <stddef.h> 6 7 #include <errno.h> 8 #include <errno.h> // not typo, check errno def/undef/redef 9 10 #ifndef _STLP_WCE 11 12 #include "cppunit/cppunit_proxy.h" 13 14 // 15 // TestCase class 16 // 17 class ErrnoTest : public CPPUNIT_NS::TestCase 18 { 19 CPPUNIT_TEST_SUITE(ErrnoTest); 20 CPPUNIT_TEST(check); 21 CPPUNIT_TEST_SUITE_END(); 22 23 protected: 24 void check(); 25 }; 26 27 CPPUNIT_TEST_SUITE_REGISTRATION(ErrnoTest); 28 check()29void ErrnoTest::check() 30 { 31 //We are using ERANGE as it is part of the C++ ISO (see Table 26 in section 19.3) 32 //Using ERANGE improve the test as it means that the native errno.h file has really 33 //been included. 34 errno = ERANGE; 35 36 CPPUNIT_ASSERT( errno == ERANGE ); 37 errno = 0; 38 39 /* Note: in common, you can't write ::errno or std::errno, 40 * due to errno in most cases is just a macro, that frequently 41 * (in MT environment errno is a per-thread value) expand to something like 42 * (*__errno_location()). I don't know way how masquerade such 43 * things: name of macro can't include ::. 44 * 45 * - ptr, 2005-03-30 46 */ 47 # if 0 48 if ( ::errno != 0 ) { 49 return 1; 50 } 51 if ( std::errno != 0 ) { 52 return 1; 53 } 54 # endif 55 } 56 #endif // _STLP_WCE 57