From dc43a3d2657ae30c52ea7e0e6a6419c54119a00b Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Fri, 22 Jul 2005 15:32:00 -0400 Subject: [PATCH] ENH: string += is very slow, so don't use it --- Source/cmDependsC.cxx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Source/cmDependsC.cxx b/Source/cmDependsC.cxx index 71d45987e..056c13c99 100644 --- a/Source/cmDependsC.cxx +++ b/Source/cmDependsC.cxx @@ -311,8 +311,10 @@ const char* cmDependsC::ParseFileName(const char* in, std::string& name) // Parse the possibly quoted file name. bool quoted = false; + char* buf = new char[strlen(in)+1]; + char* pos = buf; for(;*c && (quoted || - ((*c != ':' || name.size() == 1) && !isspace(*c))); ++c) + ((*c != ':' || pos > buf+1) && !isspace(*c))); ++c) { if(*c == '"') { @@ -320,14 +322,18 @@ const char* cmDependsC::ParseFileName(const char* in, std::string& name) } else if(!quoted && *c == '\\' && isspace(*(c+1))) { - name += *(++c); + *pos = *(++c); + pos++; } else { - name += *c; + *pos = *c; + pos++; } } - + *pos =0; + name += pos; + delete [] buf; // Return the ending position. return c; }