Merge branch 'upstream-kwsys' into update-kwsys

This commit is contained in:
Brad King 2014-08-11 09:30:22 -04:00
commit 51c82c3a66
6 changed files with 6 additions and 136 deletions

View File

@ -68,6 +68,7 @@ do.
#include <signal.h> /* sigaction */
#include <dirent.h> /* DIR, dirent */
#include <ctype.h> /* isspace */
#include <assert.h> /* assert */
#if defined(__VMS)
# define KWSYSPE_VMS_NONBLOCK , O_NONBLOCK
@ -450,6 +451,7 @@ int kwsysProcess_AddCommand(kwsysProcess* cp, char const* const* command)
}
for(i=0; i < n; ++i)
{
assert(command[i]); /* Quiet Clang scan-build. */
newCommands[cp->NumberOfCommands][i] = strdup(command[i]);
if(!newCommands[cp->NumberOfCommands][i])
{

View File

@ -4600,111 +4600,6 @@ void SystemTools::Delay(unsigned int msec)
#endif
}
void SystemTools::ConvertWindowsCommandLineToUnixArguments(
const char *cmd_line, int *argc, char ***argv)
{
if (!cmd_line || !argc || !argv)
{
return;
}
// A space delimites an argument except when it is inside a quote
(*argc) = 1;
size_t cmd_line_len = strlen(cmd_line);
size_t i;
for (i = 0; i < cmd_line_len; i++)
{
while (isspace(cmd_line[i]) && i < cmd_line_len)
{
i++;
}
if (i < cmd_line_len)
{
if (cmd_line[i] == '\"')
{
i++;
while (cmd_line[i] != '\"' && i < cmd_line_len)
{
i++;
}
(*argc)++;
}
else
{
while (!isspace(cmd_line[i]) && i < cmd_line_len)
{
i++;
}
(*argc)++;
}
}
}
(*argv) = new char* [(*argc) + 1];
(*argv)[(*argc)] = NULL;
// Set the first arg to be the exec name
(*argv)[0] = new char [1024];
#ifdef _WIN32
wchar_t tmp[1024];
::GetModuleFileNameW(0, tmp, 1024);
strcpy((*argv)[0], Encoding::ToNarrow(tmp).c_str());
#else
(*argv)[0][0] = '\0';
#endif
// Allocate the others
int j;
for (j = 1; j < (*argc); j++)
{
(*argv)[j] = new char [cmd_line_len + 10];
}
// Grab the args
size_t pos;
int argc_idx = 1;
for (i = 0; i < cmd_line_len; i++)
{
while (isspace(cmd_line[i]) && i < cmd_line_len)
{
i++;
}
if (i < cmd_line_len)
{
if (cmd_line[i] == '\"')
{
i++;
pos = i;
while (cmd_line[i] != '\"' && i < cmd_line_len)
{
i++;
}
memcpy((*argv)[argc_idx], &cmd_line[pos], i - pos);
(*argv)[argc_idx][i - pos] = '\0';
argc_idx++;
}
else
{
pos = i;
while (!isspace(cmd_line[i]) && i < cmd_line_len)
{
i++;
}
memcpy((*argv)[argc_idx], &cmd_line[pos], i - pos);
(*argv)[argc_idx][i - pos] = '\0';
argc_idx++;
}
}
}
}
kwsys_stl::string SystemTools::GetOperatingSystemNameAndVersion()
{
kwsys_stl::string res;

View File

@ -856,15 +856,6 @@ public:
*/
static kwsys_stl::string GetOperatingSystemNameAndVersion();
/**
* Convert windows-style arguments given as a command-line string
* into more traditional argc/argv arguments.
* Note that argv[0] will be assigned the executable name using
* the GetModuleFileName() function.
*/
static void ConvertWindowsCommandLineToUnixArguments(
const char *cmd_line, int *argc, char ***argv);
/** -----------------------------------------------------------------
* URL Manipulation Routines
* -----------------------------------------------------------------

View File

@ -21,6 +21,7 @@
# include "kwsys_ios_iostream.h.in"
#endif
#include <assert.h> /* assert */
#include <string.h> /* strcmp */
int testCommandLineArguments1(int argc, char* argv[])
@ -83,6 +84,7 @@ int testCommandLineArguments1(int argc, char* argv[])
}
for ( cc = 0; cc < newArgc; ++ cc )
{
assert(newArgv[cc]); /* Quiet Clang scan-build. */
kwsys_ios::cout << "Unused argument[" << cc << "] = [" << newArgv[cc] << "]"
<< kwsys_ios::endl;
if ( cc >= 9 )

View File

@ -20,6 +20,7 @@
# include "Encoding.h.in"
#endif
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -104,6 +105,7 @@ static int test4(int argc, const char* argv[])
fprintf(stderr, "Output before crash on stderr from crash test.\n");
fflush(stdout);
fflush(stderr);
assert(invalidAddress); /* Quiet Clang scan-build. */
/* Provoke deliberate crash by writing to the invalid address. */
*invalidAddress = 0;
fprintf(stdout, "Output after crash on stdout from crash test.\n");

View File

@ -507,28 +507,6 @@ static bool CheckStringOperations()
res = false;
}
int targc;
char **targv;
kwsys::SystemTools::ConvertWindowsCommandLineToUnixArguments
("\"Local Mojo\\Voodoo.asp\" -CastHex \"D:\\My Secret Mojo\\Voodoo.mp3\"",
&targc, &targv);
if (targc != 4 || strcmp(targv[1],"Local Mojo\\Voodoo.asp") ||
strcmp(targv[2],"-CastHex") ||
strcmp(targv[3],"D:\\My Secret Mojo\\Voodoo.mp3"))
{
kwsys_ios::cerr
<< "Problem with ConvertWindowsCommandLineToUnixArguments"
<< "\'\"Local Mojo\\Voodoo.asp\" "
<< "-CastHex \"D:\\My Secret Mojo\\Voodoo.mp3\"\'"
<< kwsys_ios::endl;
res = false;
}
for (;targc >=0; --targc)
{
delete [] targv[targc];
}
delete [] targv;
return res;
}