// the implementation of all the functions below is exactly the same so factor
// it out
+#ifndef __WATCOMC__
+
template <typename T>
bool wxStringToIntType(const wxChar *start,
T *val,
return !*end && (end != start) && (errno != ERANGE);
}
+#define wxSTR2INT(val, b, func) return wxStringToIntType(c_str(), val, b, func)
+
+#else // __WATCOMC__
+
+// FIXME, TODO, ASAP !!! - ugly trick to make release for Open Watcom possible
+// without changing code flow for other compilers
+
+#define wxSTR2INT(val, base, func) \
+ wxCHECK_MSG( val, false, _T("NULL output pointer") ); \
+ wxASSERT_MSG( !base || (base > 1 && base <= 36), _T("invalid base") ); \
+ \
+ errno = 0; \
+ \
+ wxChar *end; \
+ *val = (*func)(c_str(), &end, base); \
+ \
+ return !*end && (end != c_str()) && (errno != ERANGE)
+
+#endif // !__WATCOMC__/__WATCOMC__
+
bool wxString::ToLong(long *val, int base) const
{
- return wxStringToIntType(c_str(), val, base, wxStrtol);
+ wxSTR2INT(val, base, wxStrtol);
}
bool wxString::ToULong(unsigned long *val, int base) const
{
- return wxStringToIntType(c_str(), val, base, wxStrtoul);
+ wxSTR2INT(val, base, wxStrtoul);
}
bool wxString::ToLongLong(wxLongLong_t *val, int base) const
{
#ifdef wxHAS_STRTOLL
- return wxStringToIntType(c_str(), val, base, wxStrtoll);
+ wxSTR2INT(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);
+ wxSTR2INT(val, base, wxStrtoull);
#else
// TODO: implement this ourselves
+ wxUnusedVar(val);
+ wxUnusedVar(base);
return false;
#endif
}