[cmake-commits] king committed System.c 1.1 1.2
cmake-commits at cmake.org
cmake-commits at cmake.org
Thu Sep 21 14:46:45 EDT 2006
Update of /cvsroot/CMake/CMake/Source/kwsys
In directory public:/mounts/ram/cvs-serv23848/Source/kwsys
Modified Files:
System.c
Log Message:
BUG: Windows_ShellArgument: need to escape if the string contains one of a set of special characters as well as spaces. Moved test for needing escapes to a separate method kwsysSystemWindowsShellArgumentNeedsEscape.
Index: System.c
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/kwsys/System.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- System.c 21 Sep 2006 15:49:36 -0000 1.1
+++ System.c 21 Sep 2006 18:46:40 -0000 1.2
@@ -23,27 +23,39 @@
#include <string.h> /* strlen */
/*--------------------------------------------------------------------------*/
+static int kwsysSystemWindowsShellArgumentNeedsEscape(const char* in)
+{
+ /* Scan the string for characters that need escaping. Note that
+ single quotes seem to need escaping for some windows shell
+ environments (mingw32-make shell for example). Single quotes do
+ not actually need backslash escapes but must be in a
+ double-quoted argument. */
+ const char* c;
+ for(c=in; *c; ++c)
+ {
+ if(*c == ' ' || *c == '\t' || *c == '"' || *c == '\'')
+ {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/*--------------------------------------------------------------------------*/
int kwsysSystem_Windows_ShellArgumentSize(const char* in)
{
/* Start with the length of the original argument, plus one for
either a terminating null or a separating space. */
int length = (int)strlen(in) + 1;
+ /* String iterator. */
+ const char* c;
+
/* Keep track of how many backslashes have been encountered in a row. */
int backslashes = 0;
- /* Scan the string for spaces. */
- const char* c;
- for(c=in; *c; ++c)
- {
- if(*c == ' ' || *c == '\t')
- {
- break;
- }
- }
-
- /* If there are no spaces, we do not need any extra length. */
- if(!*c)
+ /* If nothing needs escaping, we do not need any extra length. */
+ if(!kwsysSystemWindowsShellArgumentNeedsEscape(in))
{
return length;
}
@@ -84,21 +96,14 @@
/*--------------------------------------------------------------------------*/
char* kwsysSystem_Windows_ShellArgument(const char* in, char* out)
{
+ /* String iterator. */
+ const char* c;
+
/* Keep track of how many backslashes have been encountered in a row. */
int backslashes = 0;
- /* Scan the string for spaces. */
- const char* c;
- for(c=in; *c; ++c)
- {
- if(*c == ' ' || *c == '\t')
- {
- break;
- }
- }
-
- /* If there are no spaces, we can pass the argument verbatim. */
- if(!*c)
+ /* If nothing needs escaping, we can pass the argument verbatim. */
+ if(!kwsysSystemWindowsShellArgumentNeedsEscape(in))
{
/* Just copy the string. */
for(c=in; *c; ++c)
More information about the Cmake-commits
mailing list