Nicholas Boch's patch to support multiline arguments to
authorEric Bohm <ebohm@illinois.edu>
Wed, 11 Sep 2013 23:21:55 +0000 (18:21 -0500)
committerEric Bohm <ebohm@illinois.edu>
Wed, 11 Sep 2013 23:21:55 +0000 (18:21 -0500)
++debug-commands and pass them through with real linebreaks
for the debugger

src/arch/net/charmrun/charmrun.C
src/arch/netlrts/charmrun/charmrun.C

index a96b913e726bc5abe3a6fe9bb56a1f4cad41563b..b9f93615813ebe2abf469b702e15b6810fde83a1 100644 (file)
@@ -451,8 +451,26 @@ static int pparam_setdef(ppdef def, char *value)
       if (*p) return -1;
       return 0;
     case 's' :
-      *def->where.s = strdup(value);
-      return 0;
+      {
+        /* Parse input string and convert a literal "\n" into '\n'. */
+        *def->where.s = (char*) calloc(strlen(value)+1, sizeof(char));
+        char* parsed_value = (char*) *def->where.s;
+        for(int i = 0, j = 0; i < strlen(value); i++)
+        {
+          fprintf(stderr, "i = %d, j = %d, value[i] = \n", i, j);
+          if(i+1 < strlen(value))
+          {
+            if(value[i] == '\\' && value[i+1] == 'n')
+            {
+              parsed_value[j++] = '\n';
+              i++;
+              continue;
+            }
+          }
+          parsed_value[j++] = value[i];
+        }
+        return 0;
+      }
     case 'f' :
       *def->where.f = strtol(value, &p, 10);
       if (*p) return -1;
index 8fea7d54a8599f4e6e76517f7aef7cf37c6251f0..99235beb5de4248804f392b7ebceef3764f43485 100644 (file)
@@ -451,8 +451,26 @@ static int pparam_setdef(ppdef def, char *value)
       if (*p) return -1;
       return 0;
     case 's' :
-      *def->where.s = strdup(value);
-      return 0;
+      {
+        /* Parse input string and convert a literal "\n" into '\n'. */
+        *def->where.s = (char*) calloc(strlen(value)+1, sizeof(char));
+        char* parsed_value = (char*) *def->where.s;
+        for(int i = 0, j = 0; i < strlen(value); i++)
+        {
+          fprintf(stderr, "i = %d, j = %d, value[i] = \n", i, j);
+          if(i+1 < strlen(value))
+          {
+            if(value[i] == '\\' && value[i+1] == 'n')
+            {
+              parsed_value[j++] = '\n';
+              i++;
+              continue;
+            }
+          }
+          parsed_value[j++] = value[i];
+        }
+        return 0;
+      }
     case 'f' :
       *def->where.f = strtol(value, &p, 10);
       if (*p) return -1;