From 203cb53ced1d1464f0c9965e176604021ab7567f Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Tue, 25 Feb 2003 16:05:46 +0000 Subject: Fix embedded quotation. --- .../library/Win32ProcessEx.c | 24 +++++++++++++++----- .../library/starter/starter.cpp | 26 ++++++++++++++++------ 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/core/org.eclipse.cdt.core.win32/library/Win32ProcessEx.c b/core/org.eclipse.cdt.core.win32/library/Win32ProcessEx.c index 29b641fe502..af32311049a 100644 --- a/core/org.eclipse.cdt.core.win32/library/Win32ProcessEx.c +++ b/core/org.eclipse.cdt.core.win32/library/Win32ProcessEx.c @@ -739,19 +739,32 @@ int copyTo(char * target, const char * source, int cpyLength, int availSpace) BOOL bSlash = FALSE; int i = 0, j = 0; int totCpyLength = cpyLength; - BOOL bQoutedTerm = FALSE; + +#define QUOTATION_DO 0 +#define QUOTATION_DONE 1 +#define QUOTATION_NONE 2 + + int nQuotationMode = 0; + if(availSpace <= cpyLength) // = to reserve space for final '\0' return -1; if(('\"' == *source) && ('\"' == *(source + cpyLength - 1))) - bQoutedTerm = TRUE; // Already quoted + { + nQuotationMode = QUOTATION_DONE; + } else if(strchr(source, ' ') == NULL) - bQoutedTerm = TRUE; // No reason to quotate term becase it doesn't have embedded spaces + { + // No reason to quotate term becase it doesn't have embedded spaces + nQuotationMode = QUOTATION_NONE; + } else { + // Needs to be quotated + nQuotationMode = QUOTATION_DO; *target = '\"'; ++j; } @@ -763,7 +776,8 @@ int copyTo(char * target, const char * source, int cpyLength, int availSpace) bSlash = TRUE; else { - if(source[i] == '\"' && (!bQoutedTerm || ((i != 0) && (i != (cpyLength - 1))) ) ) + // Don't escape embracing quotation marks + if((source[i] == '\"') && !((nQuotationMode == QUOTATION_DONE) && ((i == 0) || (i == (cpyLength - 1))) ) ) { if(!bSlash) // If still not escaped { @@ -781,7 +795,7 @@ int copyTo(char * target, const char * source, int cpyLength, int availSpace) target[j] = source[i]; } - if(!bQoutedTerm) + if(nQuotationMode == QUOTATION_DO) { if(j == availSpace) return -1; diff --git a/core/org.eclipse.cdt.core.win32/library/starter/starter.cpp b/core/org.eclipse.cdt.core.win32/library/starter/starter.cpp index 5224412a063..81df10d8942 100644 --- a/core/org.eclipse.cdt.core.win32/library/starter/starter.cpp +++ b/core/org.eclipse.cdt.core.win32/library/starter/starter.cpp @@ -187,29 +187,41 @@ int copyTo(LPTSTR target, LPCTSTR source, int cpyLength, int availSpace) BOOL bSlash = FALSE; int i = 0, j = 0; int totCpyLength = cpyLength; - BOOL bQoutedTerm = FALSE; + +#define QUOTATION_DO 0 +#define QUOTATION_DONE 1 +#define QUOTATION_NONE 2 + + int nQuotationMode = 0; if(availSpace <= cpyLength) // = to reserve space for '\0' return -1; if((_T('\"') == *source) && (_T('\"') == *(source + cpyLength - 1))) - bQoutedTerm = TRUE; // Already quoted + { + // Already done + nQuotationMode = QUOTATION_DONE; + } else if(_tcschr(source, _T(' ')) == NULL) - bQoutedTerm = TRUE; // No reason to quotate term becase it doesn't have embedded spaces + { + // No reason to quotate term becase it doesn't have embedded spaces + nQuotationMode = QUOTATION_NONE; + } else { + // Needs to be quotated + nQuotationMode = QUOTATION_DO; *target = _T('\"'); ++j; } - for(; i < cpyLength; ++i, ++j) { if(source[i] == _T('\\')) bSlash = TRUE; else - // Escape double quote only if quotation mark is not start or end character - if((source[i] == _T('\"')) && (!bQoutedTerm || ((i != 0) && (i != (cpyLength - 1)))) ) + // Don't escape embracing quotation marks + if((source[i] == _T('\"')) && !((nQuotationMode == QUOTATION_DONE) && ((i == 0) || (i == (cpyLength - 1))) ) ) { if(!bSlash) { @@ -228,7 +240,7 @@ int copyTo(LPTSTR target, LPCTSTR source, int cpyLength, int availSpace) target[j] = source[i]; } - if(!bQoutedTerm) + if(nQuotationMode == QUOTATION_DO) { if(j == availSpace) return -1; -- cgit v1.2.3