#endif
#include <ctype.h>
-#include <errno.h>
+
+#ifndef __WXWINCE__
+ #include <errno.h>
+#endif
+
#include <string.h>
#include <stdlib.h>
reverse_iterator psz = rbegin();
while ( (psz != rend()) && wxSafeIsspace(*psz) )
psz++;
-
+
// truncate at trailing space start
erase(psz.base(), end());
}
// the implementation of all the functions below is exactly the same so factor
// it out
-template <typename T>
+
+template <typename T, typename F>
bool wxStringToIntType(const wxChar *start,
T *val,
int base,
- T (*func)(const wxChar *, wxChar **, int))
+ F func)
{
wxCHECK_MSG( val, false, _T("NULL output pointer") );
wxASSERT_MSG( !base || (base > 1 && base <= 36), _T("invalid base") );
+#ifndef __WXWINCE__
errno = 0;
+#endif
wxChar *end;
*val = (*func)(start, &end, base);
// return true only if scan was stopped by the terminating NUL and if the
// string was not empty to start with and no under/overflow occurred
- return !*end && (end != start) && (errno != ERANGE);
+ return !*end && (end != start)
+#ifndef __WXWINCE__
+ && (errno != ERANGE)
+#endif
+ ;
}
bool wxString::ToLong(long *val, int base) const
return wxStringToIntType(c_str(), val, base, wxStrtoll);
#else
// TODO: implement this ourselves
+ wxUnusedVar(val);
+ wxUnusedVar(base);
return false;
#endif // wxHAS_STRTOLL
}
return wxStringToIntType(c_str(), val, base, wxStrtoull);
#else
// TODO: implement this ourselves
+ wxUnusedVar(val);
+ wxUnusedVar(base);
return false;
#endif
}
{
wxCHECK_MSG( val, false, _T("NULL pointer in wxString::ToDouble") );
+#ifndef __WXWINCE__
errno = 0;
+#endif
const wxChar *start = c_str();
wxChar *end;
// return true only if scan was stopped by the terminating NUL and if the
// string was not empty to start with and no under/overflow occurred
- return !*end && (end != start) && (errno != ERANGE);
+ return !*end && (end != start)
+#ifndef __WXWINCE__
+ && (errno != ERANGE)
+#endif
+ ;
}
// ---------------------------------------------------------------------------
// current size of the buffer
size *= 2;
}
- else if ( len > size )
+ else if ( len >= size )
{
- size = len;
+ // some vsnprintf() implementations NUL-terminate the buffer and
+ // some don't in len == size case, to be safe always add 1
+ size = len + 1;
}
else // ok, there was enough space
{
{
// only if old buffer was not big enough
if ( nSize > m_nSize ) {
- Free();
- wxDELETEA(m_pItems);
- m_pItems = new wxChar *[nSize];
+ wxChar **pNew = new wxChar *[nSize];
+ if ( !pNew )
+ return;
+
+ memcpy(pNew, m_pItems, m_nCount*sizeof(wxChar *));
+ delete [] m_pItems;
+
+ m_pItems = pNew;
m_nSize = nSize;
}
-
- m_nCount = 0;
}
// minimizes the memory usage by freeing unused memory