@@ -1668,7 +1668,7 @@ XMLError XMLDocument::LoadFile( const char* filename )
16681668 Clear ();
16691669 FILE* fp = 0 ;
16701670
1671- #if defined(_MSC_VER) && (_MSC_VER >= 1400 )
1671+ #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
16721672 errno_t err = fopen_s (&fp, filename, " rb" );
16731673 if ( !fp || err) {
16741674#else
@@ -1689,16 +1689,20 @@ XMLError XMLDocument::LoadFile( FILE* fp )
16891689 Clear ();
16901690
16911691 fseek ( fp, 0 , SEEK_SET );
1692- fgetc ( fp );
1693- if ( ferror ( fp ) != 0 ) {
1692+ if ( fgetc ( fp ) == EOF && ferror ( fp ) != 0 ) {
16941693 SetError ( XML_ERROR_FILE_READ_ERROR, 0 , 0 );
16951694 return _errorID;
16961695 }
16971696
16981697 fseek ( fp, 0 , SEEK_END );
1699- size_t size = ftell ( fp );
1698+ const long filelength = ftell ( fp );
17001699 fseek ( fp, 0 , SEEK_SET );
1700+ if ( filelength == -1L ) {
1701+ SetError ( XML_ERROR_FILE_READ_ERROR, 0 , 0 );
1702+ return _errorID;
1703+ }
17011704
1705+ const size_t size = filelength;
17021706 if ( size == 0 ) {
17031707 SetError ( XML_ERROR_EMPTY_DOCUMENT, 0 , 0 );
17041708 return _errorID;
@@ -1729,7 +1733,7 @@ XMLError XMLDocument::LoadFile( FILE* fp )
17291733XMLError XMLDocument::SaveFile ( const char * filename, bool compact )
17301734{
17311735 FILE* fp = 0 ;
1732- #if defined(_MSC_VER) && (_MSC_VER >= 1400 )
1736+ #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
17331737 errno_t err = fopen_s (&fp, filename, " w" );
17341738 if ( !fp || err) {
17351739#else
@@ -1856,7 +1860,17 @@ void XMLPrinter::Print( const char* format, ... )
18561860 }
18571861 else {
18581862#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
1863+ #if defined(WINCE)
1864+ int len = 512 ;
1865+ do {
1866+ len = len*2 ;
1867+ char * str = new char [len]();
1868+ len = _vsnprintf (str, len, format, va);
1869+ delete[] str;
1870+ }while (len < 0 );
1871+ #else
18591872 int len = _vscprintf ( format, va );
1873+ #endif
18601874#else
18611875 int len = vsnprintf ( 0 , 0 , format, va );
18621876#endif
@@ -1865,7 +1879,11 @@ void XMLPrinter::Print( const char* format, ... )
18651879 va_start ( va, format );
18661880 char * p = _buffer.PushArr ( len ) - 1 ; // back up over the null terminator.
18671881#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
1882+ #if defined(WINCE)
1883+ _vsnprintf ( p, len+1 , format, va );
1884+ #else
18681885 vsnprintf_s ( p, len+1 , _TRUNCATE, format, va );
1886+ #endif
18691887#else
18701888 vsnprintf ( p, len+1 , format, va );
18711889#endif
0 commit comments