Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Define correctly variables for windows.
[simgrid.git] / tools / tesh2 / src / fstream.c
index 36bb0f1..f0e3911 100644 (file)
 #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
@@ -51,6 +51,9 @@ is_w32_cmd(const char* cmd, char** path)
                {\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
@@ -178,7 +181,7 @@ fstream_open(fstream_t fstream)
                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
@@ -326,8 +329,16 @@ fstream_parse(fstream_t fstream, xbt_os_mutex_t mutex)
                                \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
@@ -373,8 +384,17 @@ fstream_parse(fstream_t fstream, xbt_os_mutex_t mutex)
        /* 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
@@ -396,13 +416,13 @@ fstream_lex_line(fstream_t fstream, context_t context, xbt_os_mutex_t mutex, con
        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
@@ -705,7 +725,7 @@ fstream_lex_line(fstream_t fstream, context_t context, xbt_os_mutex_t mutex, con
                        \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
@@ -983,10 +1003,10 @@ fstream_lex_line(fstream_t fstream, context_t context, xbt_os_mutex_t mutex, con
                \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
@@ -1262,12 +1282,12 @@ fstream_process_token(fstream_t fstream, context_t context, xbt_os_mutex_t mutex
                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
@@ -1275,9 +1295,9 @@ fstream_process_token(fstream_t fstream, context_t context, xbt_os_mutex_t mutex
 \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
@@ -1294,17 +1314,30 @@ fstream_process_token(fstream_t fstream, context_t context, xbt_os_mutex_t mutex
                                        \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
@@ -1338,9 +1371,11 @@ fstream_process_token(fstream_t fstream, context_t context, xbt_os_mutex_t mutex
                {\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
@@ -1449,7 +1484,7 @@ fstream_process_token(fstream_t fstream, context_t context, xbt_os_mutex_t mutex
                        \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
@@ -1650,7 +1685,7 @@ fstream_process_token(fstream_t fstream, context_t context, xbt_os_mutex_t mutex
                        {\r
                                if(exists)\r
                                {\r
-                                       #ifndef WIN32\r
+                                       #ifndef _XBT_WIN32\r
                                        unsetenv(name);\r
                                        #else\r
                                        SetEnvironmentVariable(name, NULL);\r
@@ -1781,7 +1816,7 @@ fstream_process_token(fstream_t fstream, context_t context, xbt_os_mutex_t mutex
                                                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
@@ -1818,7 +1853,7 @@ fstream_process_token(fstream_t fstream, context_t context, xbt_os_mutex_t mutex
                                                \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