re-mark 1.29b-2 as not yet uploaded (merge madness!)
[debian/tar] / src / transform.c
index c35133fa2578953bc5e21bf5cff9f56f877b8cc9..155d369810d967e61090654e1cefdb97cc722ee0 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of GNU tar.
-   Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
+   Copyright 2006-2008, 2013-2014, 2016 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
@@ -12,8 +12,7 @@
    Public License for more details.
 
    You should have received a copy of the GNU General Public License along
-   with this program; if not, write to the Free Software Foundation, Inc.,
-   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <system.h>
 #include <regex.h>
@@ -71,7 +70,7 @@ struct transform
 
 \f
 
-int transform_flags = XFORM_ALL;
+static int transform_flags = XFORM_ALL;
 static struct transform *transform_head, *transform_tail;
 
 static struct transform *
@@ -347,7 +346,7 @@ parse_transform_expr (const char *expr)
              break;
 
            case 'L':
-             /* Turn the replacement to lowercase until a `\U' or `\E'
+             /* Turn the replacement to lowercase until a '\U' or '\E'
                 is found, */
              add_case_ctl_segment (tf, ctl_locase);
              cur++;
@@ -360,7 +359,7 @@ parse_transform_expr (const char *expr)
              break;
 
            case 'U':
-             /* Turn the replacement to uppercase until a `\L' or `\E'
+             /* Turn the replacement to uppercase until a '\L' or '\E'
                 is found, */
              add_case_ctl_segment (tf, ctl_upcase);
              cur++;
@@ -373,19 +372,21 @@ parse_transform_expr (const char *expr)
              break;
 
            case 'E':
-             /* Stop case conversion started by `\L' or `\U'. */
+             /* Stop case conversion started by '\L' or '\U'. */
              add_case_ctl_segment (tf, ctl_stop);
              cur++;
              break;
 
            default:
-             /* Try to be nice */
-             {
-               char buf[2];
-               buf[0] = '\\';
-               buf[1] = *cur;
-               add_literal_segment (tf, buf, buf + 2);
-             }
+             if (*cur == delim)
+               add_char_segment (tf, delim);
+             else
+               {
+                 char buf[2];
+                 buf[0] = '\\';
+                 buf[1] = *cur;
+                 add_literal_segment (tf, buf, buf + 2);
+               }
              cur++;
              break;
            }
@@ -628,3 +629,9 @@ transform_name (char **pinput, int type)
 {
   return transform_name_fp (pinput, type, NULL, NULL);
 }
+
+bool
+transform_program_p (void)
+{
+  return transform_head != NULL;
+}