[ 1517666 ] suppression of wxVsnprintf() warnings - with little extensions.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40256 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba
2006-07-24 07:48:24 +00:00
parent c08ee0349d
commit 7d70c3095c

View File

@@ -186,7 +186,7 @@ bool WXDLLEXPORT wxOKlibc()
#define wxMAX_SVNPRINTF_ARGUMENTS 64 #define wxMAX_SVNPRINTF_ARGUMENTS 64
#define wxMAX_SVNPRINTF_FLAGBUFFER_LEN 32 #define wxMAX_SVNPRINTF_FLAGBUFFER_LEN 32
// the conversion specifiers accepted by wxMyPosVsnprintf_ // the conversion specifiers accepted by wxVsnprintf_
enum wxPrintfArgType { enum wxPrintfArgType {
wxPAT_INVALID = -1, wxPAT_INVALID = -1,
@@ -213,7 +213,7 @@ enum wxPrintfArgType {
wxPAT_NLONGINT // %ln wxPAT_NLONGINT // %ln
}; };
// an argument passed to wxMyPosVsnprintf_ // an argument passed to wxVsnprintf_
typedef union { typedef union {
int pad_int; // %d, %i, %o, %u, %x, %X int pad_int; // %d, %i, %o, %u, %x, %X
long int pad_longint; // %ld, etc long int pad_longint; // %ld, etc
@@ -240,7 +240,7 @@ typedef union {
// Contains parsed data relative to a conversion specifier given to // Contains parsed data relative to a conversion specifier given to
// wxMyPosVsnprintf_ and parsed from the format string // wxVsnprintf_ and parsed from the format string
// NOTE: in C++ there is almost no difference between struct & classes thus // NOTE: in C++ there is almost no difference between struct & classes thus
// there is no performance gain by using a struct here... // there is no performance gain by using a struct here...
class wxPrintfConvSpec class wxPrintfConvSpec
@@ -274,13 +274,16 @@ public:
// a little buffer where formatting flags like #+\.hlqLZ are stored by Parse() // a little buffer where formatting flags like #+\.hlqLZ are stored by Parse()
// for use in Process() // for use in Process()
// NB: this buffer can be safely a char buffer instead of a wchar_t buffer
// since it's used only for numeric conversion specifier and always
// with sprintf().
char szFlags[wxMAX_SVNPRINTF_FLAGBUFFER_LEN]; char szFlags[wxMAX_SVNPRINTF_FLAGBUFFER_LEN];
public: public:
// we don't declare this as a constructor otherwise it would be called // we don't declare this as a constructor otherwise it would be called
// automatically and we don't want this: to be optimized, wxMyPosVsnprintf_ // automatically and we don't want this: to be optimized, wxVsnprintf_
// calls this function only on really-used instances of this class. // calls this function only on really-used instances of this class.
void Init(); void Init();
@@ -310,7 +313,10 @@ void wxPrintfConvSpec::Init()
adj_left = false; adj_left = false;
argpos = argend = NULL; argpos = argend = NULL;
type = wxPAT_INVALID; type = wxPAT_INVALID;
szFlags[0] = wxT('%');
// this character will never be removed from szFlags array and
// is important when calling sprintf() in wxPrintfConvSpec::Process() !
szFlags[0] = '%';
} }
bool wxPrintfConvSpec::Parse(const wxChar *format) bool wxPrintfConvSpec::Parse(const wxChar *format)
@@ -329,7 +335,7 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
#define CHECK_PREC \ #define CHECK_PREC \
if (in_prec && !prec_dot) \ if (in_prec && !prec_dot) \
{ \ { \
szFlags[flagofs++] = '.'; \ szFlags[flagofs++] = (char)'.'; \
prec_dot = true; \ prec_dot = true; \
} }
@@ -349,13 +355,13 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
case wxT('+'): case wxT('+'):
case wxT('\''): case wxT('\''):
CHECK_PREC CHECK_PREC
szFlags[flagofs++] = ch; szFlags[flagofs++] = (char)ch;
break; break;
case wxT('-'): case wxT('-'):
CHECK_PREC CHECK_PREC
adj_left = true; adj_left = true;
szFlags[flagofs++] = ch; szFlags[flagofs++] = (char)ch;
break; break;
case wxT('.'): case wxT('.'):
@@ -370,26 +376,26 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
case wxT('h'): case wxT('h'):
ilen = -1; ilen = -1;
CHECK_PREC CHECK_PREC
szFlags[flagofs++] = ch; szFlags[flagofs++] = (char)ch;
break; break;
case wxT('l'): case wxT('l'):
ilen = 1; ilen = 1;
CHECK_PREC CHECK_PREC
szFlags[flagofs++] = ch; szFlags[flagofs++] = (char)ch;
break; break;
case wxT('q'): case wxT('q'):
case wxT('L'): case wxT('L'):
ilen = 2; ilen = 2;
CHECK_PREC CHECK_PREC
szFlags[flagofs++] = ch; szFlags[flagofs++] = (char)ch;
break; break;
case wxT('Z'): case wxT('Z'):
ilen = 3; ilen = 3;
CHECK_PREC CHECK_PREC
szFlags[flagofs++] = ch; szFlags[flagofs++] = (char)ch;
break; break;
case wxT('*'): case wxT('*'):
@@ -410,7 +416,7 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
// save the * in our formatting buffer... // save the * in our formatting buffer...
// will be replaced later by Process() // will be replaced later by Process()
szFlags[flagofs++] = ch; szFlags[flagofs++] = (char)ch;
break; break;
case wxT('1'): case wxT('2'): case wxT('3'): case wxT('1'): case wxT('2'): case wxT('3'):
@@ -422,7 +428,7 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
while ( (*argend >= wxT('0')) && while ( (*argend >= wxT('0')) &&
(*argend <= wxT('9')) ) (*argend <= wxT('9')) )
{ {
szFlags[flagofs++] = *argend; szFlags[flagofs++] = (char)(*argend);
len = len*10 + (*argend - wxT('0')); len = len*10 + (*argend - wxT('0'));
argend++; argend++;
} }
@@ -464,8 +470,8 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
case wxT('x'): case wxT('x'):
case wxT('X'): case wxT('X'):
CHECK_PREC CHECK_PREC
szFlags[flagofs++] = ch; szFlags[flagofs++] = (char)ch;
szFlags[flagofs] = '\0'; szFlags[flagofs] = (char)'\0';
if (ilen == 0) if (ilen == 0)
type = wxPAT_INT; type = wxPAT_INT;
else if (ilen == -1) else if (ilen == -1)
@@ -492,8 +498,8 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
case wxT('g'): case wxT('g'):
case wxT('G'): case wxT('G'):
CHECK_PREC CHECK_PREC
szFlags[flagofs++] = ch; szFlags[flagofs++] = (char)ch;
szFlags[flagofs] = '\0'; szFlags[flagofs] = (char)'\0';
if (ilen == 2) if (ilen == 2)
type = wxPAT_LONGDOUBLE; type = wxPAT_LONGDOUBLE;
else else
@@ -652,10 +658,10 @@ bool wxPrintfConvSpec::LoadArg(wxPrintfArg *p, va_list &argptr)
break; break;
case wxPAT_CHAR: case wxPAT_CHAR:
p->pad_char = va_arg(argptr, int); // char is promoted to int when passed through '...' p->pad_char = (char)va_arg(argptr, int); // char is promoted to int when passed through '...'
break; break;
case wxPAT_WCHAR: case wxPAT_WCHAR:
p->pad_wchar = va_arg(argptr, int); // char is promoted to int when passed through '...' p->pad_wchar = (wchar_t)va_arg(argptr, int); // char is promoted to int when passed through '...'
break; break;
case wxPAT_PCHAR: case wxPAT_PCHAR:
@@ -853,7 +859,7 @@ int wxPrintfConvSpec::Process(wxChar *buf, size_t lenMax, wxPrintfArg *p)
break; break;
case wxPAT_NSHORTINT: case wxPAT_NSHORTINT:
*p->pad_nshortint = lenCur; *p->pad_nshortint = (short int)lenCur;
break; break;
case wxPAT_NLONGINT: case wxPAT_NLONGINT: