add ConvertI64FormatString
This commit is contained in:
@@ -361,6 +361,47 @@ RString vssprintf( const char *szFormat, va_list argList )
|
|||||||
return sStr;
|
return sStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Windows uses %I64i to format a 64-bit int, instead of %lli. Convert "a b %lli %-3llu c d"
|
||||||
|
* to "a b %I64 %-3I64u c d". This assumes a well-formed format string; invalid format strings
|
||||||
|
* should not crash, but the results are undefined. */
|
||||||
|
#if defined(WIN32)
|
||||||
|
RString ConvertI64FormatString( const RString &sStr )
|
||||||
|
{
|
||||||
|
RString sRet;
|
||||||
|
sRet.reserve( sStr.size() + 16 );
|
||||||
|
|
||||||
|
size_t iOffset = 0;
|
||||||
|
while( iOffset < sStr.size() )
|
||||||
|
{
|
||||||
|
size_t iPercent = sStr.find( '%', iOffset );
|
||||||
|
if( iPercent != sStr.npos )
|
||||||
|
{
|
||||||
|
sRet.append( sStr, iOffset, iPercent - iOffset );
|
||||||
|
iOffset = iPercent;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t iEnd = sStr.find_first_of( "diouxXeEfFgGaAcsCSpnm%", iOffset + 1 );
|
||||||
|
if( iEnd != sStr.npos && iEnd - iPercent >= 3 && iPercent > 2 && sStr[iEnd-2] == 'l' && sStr[iEnd-1] == 'l' )
|
||||||
|
{
|
||||||
|
sRet.append( sStr, iPercent, iEnd - iPercent - 2 ); // %
|
||||||
|
sRet.append( "I64" ); // %I64
|
||||||
|
sRet.append( sStr, iEnd, 1 ); // %I64i
|
||||||
|
iOffset = iEnd + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( iEnd == sStr.npos )
|
||||||
|
iEnd = sStr.size() - 1;
|
||||||
|
sRet.append( sStr, iOffset, iEnd - iOffset + 1 );
|
||||||
|
iOffset = iEnd + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sRet;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
RString ConvertI64FormatString( const RString &sStr ) { return sStr; }
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ISO-639-1 codes: http://www.loc.gov/standards/iso639-2/langcodes.html
|
/* ISO-639-1 codes: http://www.loc.gov/standards/iso639-2/langcodes.html
|
||||||
* native forms: http://people.w3.org/rishida/names/languages.html
|
* native forms: http://people.w3.org/rishida/names/languages.html
|
||||||
* We don't use 3-letter codes, so we don't bother supporting them. */
|
* We don't use 3-letter codes, so we don't bother supporting them. */
|
||||||
|
|||||||
@@ -351,6 +351,7 @@ struct tm GetLocalTime();
|
|||||||
|
|
||||||
RString ssprintf( const char *fmt, ...) PRINTF(1,2);
|
RString ssprintf( const char *fmt, ...) PRINTF(1,2);
|
||||||
RString vssprintf( const char *fmt, va_list argList );
|
RString vssprintf( const char *fmt, va_list argList );
|
||||||
|
RString ConvertI64FormatString( const RString &sStr );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Splits a Path into 4 parts (Directory, Drive, Filename, Extention). Supports UNC path names.
|
* Splits a Path into 4 parts (Directory, Drive, Filename, Extention). Supports UNC path names.
|
||||||
|
|||||||
Reference in New Issue
Block a user