#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
+
+#ifdef __WATCOMC__
+ #define STR2INTLINK _WCRTLINK
+#else
+ #define STR2INTLINK
+#endif
+
template <typename T>
bool wxStringToIntType(const wxChar *start,
T *val,
int base,
- T (*func)(const wxChar *, wxChar **, int))
+ T STR2INTLINK (*func)(const wxChar *, wxChar **, int))
{
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, wxStrtoul);
}
+bool wxString::ToLongLong(wxLongLong_t *val, int base) const
+{
+#ifdef wxHAS_STRTOLL
+ return wxStringToIntType(c_str(), val, base, wxStrtoll);
+#else
+ // TODO: implement this ourselves
+ wxUnusedVar(val);
+ wxUnusedVar(base);
+ return false;
+#endif // wxHAS_STRTOLL
+}
+
+bool wxString::ToULongLong(wxULongLong_t *val, int base) const
+{
+#ifdef wxHAS_STRTOLL
+ return wxStringToIntType(c_str(), val, base, wxStrtoull);
+#else
+ // TODO: implement this ourselves
+ wxUnusedVar(val);
+ wxUnusedVar(base);
+ return false;
+#endif
+}
+
bool wxString::ToDouble(double *val) const
{
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
{