Implement escape char in console. "^"
[reactos.git] / reactos / subsys / system / cmd / redir.c
index e722aa3..436297e 100644 (file)
@@ -78,6 +78,12 @@ INT GetRedirection (LPTSTR s, LPTSTR ifn, LPTSTR ofn, LPTSTR efn, LPINT lpnFlags
        /* find and remove all the redirections first */
        while (*sp)
        {
+               if (*sp == _T('^'))
+               {
+                       *dp++ = *sp++;
+                       *dp++ = *sp++;
+                       continue;
+               }
                if ((*sp == _T('"')) || (*sp == _T('\'')))
                {
                        /* No redirects inside quotes */
@@ -129,31 +135,23 @@ INT GetRedirection (LPTSTR s, LPTSTR ifn, LPTSTR ofn, LPTSTR efn, LPINT lpnFlags
                                *ofn = _T('\0');
                        }
 
-      else if (*sp == _T('1'))
+                        else if (*sp == _T('1'))
                        {
-                               /* error redirection */
+                               /* output redirection */
                                sp++;
 
                                if (*sp == _T('>'))
                                {
                                        /* output redirection */
-                               *lpnFlags |= OUTPUT_REDIRECTION;
-                               sp++;
-
-                               /* append request ? */
-                               if (*sp == _T('>'))
-                               {
-                                       *lpnFlags |= OUTPUT_APPEND;
-                                       sp++;
-                               }
-
-                               while (_istspace (*sp))
-                                       sp++;
-
-                               /* copy file name */
-                               while (*sp && !IsRedirection (*sp) && !_istspace (*sp))
-                                       *ofn++ = *sp++;
-                               *ofn = _T('\0');
+                                       *lpnFlags |= OUTPUT_REDIRECTION;
+                                       sp++;
+
+                                       /* append request ? */
+                                       if (*sp == _T('>'))
+                                       {
+                                               *lpnFlags |= OUTPUT_APPEND;
+                                               sp++;
+                                       }
                                }
                                else
                                {
@@ -168,8 +166,8 @@ INT GetRedirection (LPTSTR s, LPTSTR ifn, LPTSTR ofn, LPTSTR efn, LPINT lpnFlags
 
                                /* copy file name */
                                while (*sp && !IsRedirection (*sp) && !_istspace (*sp))
-                                       *efn++ = *sp++;
-                               *efn = _T('\0');
+                                       *ofn++ = *sp++;
+                               *ofn = _T('\0');
                        }
 
                        else if (*sp == _T('2'))
@@ -250,7 +248,13 @@ INT GetRedirection (LPTSTR s, LPTSTR ifn, LPTSTR ofn, LPTSTR efn, LPINT lpnFlags
        sp = s;
        while (*sp)
        {
-               if ((*sp == _T('"')) || (*sp == _T('\'')))
+               if (*sp == _T('^'))
+               {
+                       *sp++;
+                       *sp++;
+                       continue;
+               }
+               else if ((*sp == _T('"')) || (*sp == _T('\'')))
                {
                        TCHAR qc = *sp;