- // find first non-space character
- const char *psz = m_pchData;
- while ( isspace(*psz) )
- psz++;
-
- // fix up data and length
- int nDataLength = GetStringData()->nDataLength - (psz - m_pchData);
- memmove(m_pchData, psz, (nDataLength + 1)*sizeof(char));
- GetStringData()->nDataLength = nDataLength;
+ // ok, there is at least one space to trim
+ CopyBeforeWrite();
+
+ if ( bFromRight )
+ {
+ // find last non-space character
+ char *psz = m_pchData + GetStringData()->nDataLength - 1;
+ while ( isspace(*psz) && (psz >= m_pchData) )
+ psz--;
+
+ // truncate at trailing space start
+ *++psz = '\0';
+ GetStringData()->nDataLength = psz - m_pchData;
+ }
+ else
+ {
+ // find first non-space character
+ const char *psz = m_pchData;
+ while ( isspace(*psz) )
+ psz++;
+
+ // fix up data and length
+ int nDataLength = GetStringData()->nDataLength - (psz - m_pchData);
+ memmove(m_pchData, psz, (nDataLength + 1)*sizeof(char));
+ GetStringData()->nDataLength = nDataLength;
+ }