Allow c-style escapes with parameters.
authorSadrul Habib Chowdhury <sadrul@users.sourceforge.net>
Sat, 28 Feb 2009 06:23:00 +0000 (28 01:23 -0500)
committerSadrul Habib Chowdhury <sadrul@users.sourceforge.net>
Sat, 28 Feb 2009 06:23:00 +0000 (28 01:23 -0500)
With this change, it's possible to use '\n' to represent a new line,
instead of '\012' This will be particularly useful for the 'stuff'
command. Fixes #25647.

src/process.c

index b5474e7..8fd2fa7 100644 (file)
@@ -4484,7 +4484,7 @@ int bufl, *argl;
        {
          if (*p == delim)
            delim = 0;
-         else if (delim != '\'' && *p == '\\' && (p[1] == '\'' || p[1] == '"' || p[1] == '\\' || p[1] == '$' || p[1] == '#' || p[1] == '^' || (p[1] >= '0' && p[1] <= '7')))
+         else if (delim != '\'' && *p == '\\' && (p[1] == 'n' || p[1] == 'r' || p[1] == 't' || p[1] == '\'' || p[1] == '"' || p[1] == '\\' || p[1] == '$' || p[1] == '#' || p[1] == '^' || (p[1] >= '0' && p[1] <= '7')))
            {
              p++;
              if (*p >= '0' && *p <= '7')
@@ -4503,7 +4503,16 @@ int bufl, *argl;
                  pp++;
                }
              else
-               *pp++ = *p;
+               {
+                 switch (*p)
+                   {
+                     case 'n': *pp = '\n'; break;
+                     case 'r': *pp = '\r'; break;
+                     case 't': *pp = '\t'; break;
+                     default: *pp = *p; break;
+                   }
+                 pp++;
+               }
            }
          else if (delim != '\'' && *p == '$' && (p[1] == '{' || p[1] == ':' || (p[1] >= 'a' && p[1] <= 'z') || (p[1] >= 'A' && p[1] <= 'Z') || (p[1] >= '0' && p[1] <= '9') || p[1] == '_'))