diff --git a/common/string.cpp b/common/string.cpp index 8f35b83d64..8932fbc187 100644 --- a/common/string.cpp +++ b/common/string.cpp @@ -482,8 +482,9 @@ wxString GetIllegalFileNameWxChars() bool ReplaceIllegalFileNameChars( std::string* aName, int aReplaceChar ) { - bool changed = false; - std::string result; + bool changed = false; + std::string result; + result.reserve( aName->length() ); for( std::string::iterator it = aName->begin(); it != aName->end(); ++it ) { @@ -503,7 +504,37 @@ bool ReplaceIllegalFileNameChars( std::string* aName, int aReplaceChar ) } if( changed ) - *aName = result; + *aName = result; + + return changed; +} + + +bool ReplaceIllegalFileNameChars( wxString& aName, int aReplaceChar ) +{ + bool changed = false; + wxString result; + result.reserve( aName.Length() ); + + for( wxString::iterator it = aName.begin(); it != aName.end(); ++it ) + { + if( strchr( illegalFileNameChars, *it ) ) + { + if( aReplaceChar ) + result += aReplaceChar; + else + result += wxString::Format( "%%%02x", *it ); + + changed = true; + } + else + { + result += *it; + } + } + + if( changed ) + aName = result; return changed; } diff --git a/include/kicad_string.h b/include/kicad_string.h index abf6a82004..3a4f45fbe9 100644 --- a/include/kicad_string.h +++ b/include/kicad_string.h @@ -172,6 +172,7 @@ wxString GetIllegalFileNameWxChars(); * @return true if any characters have been replaced in \a aName. */ bool ReplaceIllegalFileNameChars( std::string* aName, int aReplaceChar = 0 ); +bool ReplaceIllegalFileNameChars( wxString& aName, int aReplaceChar = 0 ); #ifndef HAVE_STRTOKR // common/strtok_r.c optionally: