git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44128
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
wxPAT_INT, // %d, %i, %o, %u, %x, %X
wxPAT_LONGINT, // %ld, etc
wxPAT_INT, // %d, %i, %o, %u, %x, %X
wxPAT_LONGINT, // %ld, etc
wxPAT_LONGLONGINT, // %Ld, etc
#endif
wxPAT_SIZET, // %Zd, etc
wxPAT_LONGLONGINT, // %Ld, etc
#endif
wxPAT_SIZET, // %Zd, etc
typedef union {
int pad_int; // %d, %i, %o, %u, %x, %X
long int pad_longint; // %ld, etc
typedef union {
int pad_int; // %d, %i, %o, %u, %x, %X
long int pad_longint; // %ld, etc
long long int pad_longlongint; // %Ld, etc
#endif
size_t pad_sizet; // %Zd, etc
long long int pad_longlongint; // %Ld, etc
#endif
size_t pad_sizet; // %Zd, etc
// temporary parse data
size_t flagofs = 1;
// temporary parse data
size_t flagofs = 1;
- bool in_prec, prec_dot;
+ bool in_prec, // true if we found the dot in some previous iteration
+ prec_dot; // true if the dot has been already added to m_szFlags
int ilen = 0;
m_bAlignLeft = in_prec = prec_dot = false;
int ilen = 0;
m_bAlignLeft = in_prec = prec_dot = false;
CHECK_PREC
m_szFlags[flagofs++] = char(ch);
break;
CHECK_PREC
m_szFlags[flagofs++] = char(ch);
break;
+#ifdef __WXMSW__
+ // under Windows we support the special '%I64' notation as longlong
+ // integer conversion specifier for MSVC compatibility
+ // (it behaves exactly as '%lli' or '%Li' or '%qi')
+ case wxT('I'):
+ if (*(m_pArgEnd+1) != wxT('6') ||
+ *(m_pArgEnd+2) != wxT('4'))
+ return false; // bad format
+
+ m_pArgEnd++;
+ m_pArgEnd++;
+
+ ilen = 2;
+ CHECK_PREC
+ m_szFlags[flagofs++] = char(ch);
+ m_szFlags[flagofs++] = '6';
+ m_szFlags[flagofs++] = '4';
+ break;
+#endif // __WXMSW__
else if (ilen == 1)
m_type = wxPAT_LONGINT;
else if (ilen == 2)
else if (ilen == 1)
m_type = wxPAT_LONGINT;
else if (ilen == 2)
m_type = wxPAT_LONGLONGINT;
#else // !long long
m_type = wxPAT_LONGINT;
m_type = wxPAT_LONGLONGINT;
#else // !long long
m_type = wxPAT_LONGINT;
case wxPAT_LONGINT:
p->pad_longint = va_arg(argptr, long int);
break;
case wxPAT_LONGINT:
p->pad_longint = va_arg(argptr, long int);
break;
case wxPAT_LONGLONGINT:
p->pad_longlongint = va_arg(argptr, long long int);
break;
case wxPAT_LONGLONGINT:
p->pad_longlongint = va_arg(argptr, long long int);
break;
lenScratch = system_sprintf(szScratch, wxMAX_SVNPRINTF_SCRATCHBUFFER_LEN, m_szFlags, p->pad_longint);
break;
lenScratch = system_sprintf(szScratch, wxMAX_SVNPRINTF_SCRATCHBUFFER_LEN, m_szFlags, p->pad_longint);
break;
case wxPAT_LONGLONGINT:
lenScratch = system_sprintf(szScratch, wxMAX_SVNPRINTF_SCRATCHBUFFER_LEN, m_szFlags, p->pad_longlongint);
break;
case wxPAT_LONGLONGINT:
lenScratch = system_sprintf(szScratch, wxMAX_SVNPRINTF_SCRATCHBUFFER_LEN, m_szFlags, p->pad_longlongint);
break;
{
case wxPAT_INT:
case wxPAT_LONGINT:
{
case wxPAT_INT:
case wxPAT_LONGINT:
case wxPAT_LONGLONGINT:
#endif
case wxPAT_SIZET:
case wxPAT_LONGLONGINT:
#endif
case wxPAT_SIZET:
CMP3("-123456789", "%lld", (wxLongLong_t)-123456789);
CMP3("123456789", "%llu", (wxULongLong_t)123456789);
CMP3("-123456789", "%lld", (wxLongLong_t)-123456789);
CMP3("123456789", "%llu", (wxULongLong_t)123456789);
+
+#ifdef __WXMSW__
+ CMP3("123456789", "%I64d", (wxLongLong_t)123456789);
+ CMP3("123456789abcdef", "%I64x", (wxLongLong_t)0x123456789abcdef);
+#endif