#include <is_cmd.h>\r
#include <getpath.h>\r
\r
-#ifndef WIN32\r
+#ifndef _XBT_WIN32\r
#include <xsignal.h>\r
#endif\r
\r
-#ifdef WIN32\r
+#ifdef _XBT_WIN32\r
static int\r
-is_w32_cmd(const char* cmd, char** path)\r
+is_w32_cmd(char* cmd, char** path)\r
{\r
size_t i = 0;\r
struct stat stat_buff = {0};\r
{\r
for (i = 0; path[i] != NULL; i++)\r
{\r
+ /* use Cat.exe on Windows */\r
+ if(!strcmp(cmd, "cat"))\r
+ cmd[0] = 'C';\r
\r
sprintf(buff,"%s\\%s",path[i], cmd);\r
\r
return 0;\r
}\r
\r
- #ifndef WIN32\r
+ #ifndef _XBT_WIN32\r
sprintf(path,"%s/%s",fstream->directory, fstream->name);\r
#else\r
sprintf(path,"%s\\%s",fstream->directory, fstream->name);\r
\r
if(context->command_line)\r
{\r
+ #ifdef _XBT_WIN32\r
+ if(!context->is_not_found)\r
+ {\r
+ #endif\r
if(fstream_launch_command(fstream, context, mutex) < 0)\r
break;\r
+\r
+ #ifdef _XBT_WIN32\r
+ }\r
+ #endif\r
}\r
\r
continue;\r
/* Check that last command of the file ran well */\r
if(context->command_line)\r
{\r
+ #ifdef _XBT_WIN32\r
+ if(!context->is_not_found)\r
+ {\r
+ #endif\r
+\r
if(fstream_launch_command(fstream, context, mutex) < 0)\r
return -1;\r
+\r
+ #ifdef _XBT_WIN32\r
+ }\r
+ #endif\r
}\r
\r
/* clear buffers */\r
char* line2;\r
variable_t variable;\r
unsigned int i;\r
- char exp[VAR_NAME_MAX + 1] = {0};\r
+ char exp[PATH_MAX + 1] = {0};\r
unit_t unit = fstream->unit;\r
xbt_dynar_t variables = unit->runner->variables;\r
char* p= NULL;\r
char* end = NULL;\r
char* val = NULL;\r
- char buff[VAR_NAME_MAX + 1] = {0}; \r
+ char buff[PATH_MAX + 1] = {0}; \r
size_t len;\r
char delimiters[4] = {' ', '\t', '\n', '\0'}; \r
\r
\r
if((p = strstr(line2 + 2, exp)))\r
{\r
- if((p + strlen(variable->name) + 1)[0] != '\0')\r
+ if((p + strlen(variable->name) + 1)[0] != '\0' && !(isalpha((p + strlen(variable->name) + 1)[0])))\r
delimiters[0] = (p + strlen(variable->name) + 1)[0];\r
\r
if(variable->val)\r
\r
}\r
\r
- p = line2 + 2;\r
- \r
- while(p && 1)\r
+ while(1)\r
{\r
+ p = line2 + (line2[0] =='<' ? 4 : 2);\r
+ \r
if((p = strchr(p, '$')))\r
{\r
if(*(p+1) != ' ')\r
context->line = /*strdup(filepos)*/ filepos;\r
context->pos = strdup(filepos);\r
\r
- #ifdef WIN32\r
+ #ifdef _XBT_WIN32\r
{\r
\r
/* translate the command line */\r
\r
- char* path;\r
+ char* path = NULL;\r
char* delimiter;\r
char command_line[PATH_MAX + 1] = {0};\r
size_t i = 0;\r
\r
\r
\r
- if(strstr(context->command_line,".exe"))\r
- strcpy(command_line,context->command_line);\r
- else\r
+ /*if(strstr(context->command_line,".exe"))\r
+ strcpy(command_line,context->command_line);*/\r
+ \r
{\r
size_t len;\r
\r
\r
i++;\r
}\r
-\r
- strcat(command_line,".exe");\r
+ \r
+ if(!strstr(context->command_line,".exe"))\r
+ strcat(command_line,".exe");\r
\r
args = strdup(context->command_line + i);\r
}\r
\r
- if(getpath(command_line, &path) && !is_w32_cmd(command_line, fstream->unit->runner->path))\r
+ if(!is_w32_cmd(command_line, fstream->unit->runner->path) && getpath(command_line, &path) < 0)\r
{\r
- ERROR3("[%s] `%s' : NOK (%s)", filepos, context->command_line, error_to_string(ECMDNOTFOUND, 1));\r
+ command_t command;\r
+\r
+ ERROR3("[%s] `%s' : NOK (%s)", filepos, command_line, error_to_string(ECMDNOTFOUND, 1));\r
unit_set_error(fstream->unit, ECMDNOTFOUND, 1, filepos);\r
+\r
+ context->is_not_found = 1;\r
+ \r
+ command = command_new(fstream->unit, context, mutex);\r
+\r
+ command->status = cs_failed;\r
+ command->reason = csr_command_not_found;\r
+\r
failure(unit);\r
+ \r
+ \r
return;\r
}\r
\r
{\r
if(args)\r
{\r
+\r
context->t_command_line = (char*)calloc(strlen(command_line) + strlen(args) + 1, sizeof(char));\r
sprintf(context->t_command_line,"%s%s",command_line, args);\r
\r
+ \r
free(args);\r
\r
}\r
\r
xbt_str_trim(context->signal," \n");\r
\r
- #ifdef WIN32\r
+ #ifdef _XBT_WIN32\r
if(!strstr("SIGSEGVSIGTRAPSIGBUSSIGFPESIGILL", context->signal))\r
{\r
ERROR2("[%s] Signal `%s' not supported by this platform", filepos, context->signal);\r
{\r
if(exists)\r
{\r
- #ifndef WIN32\r
+ #ifndef _XBT_WIN32\r
unsetenv(name);\r
#else\r
SetEnvironmentVariable(name, NULL);\r
free(variable->val);\r
variable->val = strdup(val);\r
\r
- #ifdef WIN32\r
+ #ifdef _XBT_WIN32\r
SetEnvironmentVariable(variable->name, variable->val);\r
#else\r
setenv(variable->name, variable->val, 1);\r
\r
xbt_dynar_push(unit->runner->variables, &variable);\r
\r
- #ifdef WIN32\r
+ #ifdef _XBT_WIN32\r
SetEnvironmentVariable(variable->name, variable->val);\r
#else\r
setenv(variable->name, variable->val, 0);\r