]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/string.cpp
some != NULL checks
[wxWidgets.git] / src / common / string.cpp
index efe9a4e186e499c31a0f979635b2013d1cc907d5..bd4dc94a6212c15a199610545ed1af08120a913c 100644 (file)
 // NB: EXTRA_ALLOC must be >= 0!
 #define EXTRA_ALLOC       (19 - nLen % 16)
 
-#if defined(__VISAGECPP__) && __IBMCPP__ >= 400
-// must define this in .cpp for VA or else you get multiply defined symbols everywhere
-
-// maximum possible length for a string means "take all string" everywhere
-//  (as sizeof(StringData) is unknown here, we substract 100)
-const unsigned int wxSTRING_MAXLEN = UINT_MAX - 100;
-
-#endif
-
 // ---------------------------------------------------------------------------
 // static class variables definition
 // ---------------------------------------------------------------------------
@@ -94,6 +85,12 @@ static const struct
   wxChar dummy;
 } g_strEmpty = { {-1, 0, 0}, wxT('\0') };
 
+#if defined(__VISAGECPP__) && __IBMCPP__ >= 400
+// must define this static for VA or else you get multiply defined symbols everywhere
+const unsigned int wxSTRING_MAXLEN = UINT_MAX - 100;
+
+#endif
+
 // empty C style string: points to 'string data' byte of g_strEmpty
 extern const wxChar WXDLLEXPORT *wxEmptyString = &g_strEmpty.dummy;
 
@@ -116,7 +113,7 @@ extern const wxChar WXDLLEXPORT *wxEmptyString = &g_strEmpty.dummy;
 //       function wxVsnprintfA (A for ANSI), should also find one for Unicode
 //       strings in Unicode build
 #ifdef __WXMSW__
-    #if (defined(__VISUALC__) || defined(wxUSE_NORLANDER_HEADERS)) && !defined(__MINGW32__)
+    #if defined(__VISUALC__) || wxUSE_NORLANDER_HEADERS
         #define wxVsnprintfA     _vsnprintf
     #endif
 #else   // !Windows
@@ -293,11 +290,11 @@ void wxString::InitWith(const wxChar *psz, size_t nPos, size_t nLength)
 {
   Init();
 
-  wxASSERT( nPos <= wxStrlen(psz) );
-
   if ( nLength == wxSTRING_MAXLEN )
     nLength = wxStrlen(psz + nPos);
 
+  wxASSERT_MSG( nPos + nLength <= wxStrlen(psz), _T("index out of bounds") );
+
   STATISTICS_ADD(InitialLength, nLength);
 
   if ( nLength > 0 ) {
@@ -531,6 +528,12 @@ void wxString::UngetWriteBuf()
   GetStringData()->Validate(TRUE);
 }
 
+void wxString::UngetWriteBuf(size_t nLen)
+{
+  GetStringData()->nDataLength = nLen;
+  GetStringData()->Validate(TRUE);
+}
+
 // ---------------------------------------------------------------------------
 // data access
 // ---------------------------------------------------------------------------
@@ -907,6 +910,8 @@ bool wxString::IsWord() const
 bool wxString::IsNumber() const
 {
   const wxChar *s = (const wxChar*) *this;
+  if (wxStrlen(s))
+     if ((s[0] == '-') || (s[0] == '+')) s++;
   while(*s){
     if(!wxIsdigit(*s)) return(FALSE);
     s++;
@@ -1599,7 +1604,7 @@ size_t wxString::find_first_of(const wxChar* sz, size_t nStart) const
     const wxChar *start = c_str() + nStart;
     const wxChar *firstOf = wxStrpbrk(start, sz);
     if ( firstOf )
-        return firstOf - start;
+        return firstOf - c_str();
     else
         return npos;
 }