Warn about non-portable use of unescaped backslash at end of string,
authorJim Meyering <jim@meyering.net>
Fri, 13 Jul 2007 16:37:16 +0000 (18:37 +0200)
committerJim Meyering <jim@meyering.net>
Fri, 13 Jul 2007 16:37:16 +0000 (18:37 +0200)
and treat it as if it were escaped.
* src/tr.c (unquote): Considering that such usage would make GNU tr
from coreutils-5.2.1 and earlier *fail*, the least we can do now is
to warn about it.  Solaris' tr ignores it.
* NEWS: Mention this.

ChangeLog
NEWS
src/tr.c

index a7f78f3..668e303 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2007-07-13  Jim Meyering  <jim@meyering.net>
 
+       Warn about non-portable use of unescaped backslash at end of string,
+       and treat it as if it were escaped.
+       * src/tr.c (unquote): Considering that such usage would make GNU tr
+       from coreutils-5.2.1 and earlier *fail*, the least we can do now is
+       to warn about it.  Solaris' tr ignores it.
+       * NEWS: Mention this.
+
        Use proper backslash-quoting inside backticks.
        * configure.ac: Otherwise we run afoul of strict GNU tr:
        a string ending in a lone backslash would provoke a failure.
diff --git a/NEWS b/NEWS
index 25fa3e9..dc60e88 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,10 @@ GNU coreutils NEWS                                    -*- outline -*-
   pr -F no longer suppresses the footer or the first two blank lines in
   the header.  This is for compatibility with BSD and POSIX.
 
+  tr now warns about an unescaped backslash at end of string.
+  The tr from coreutils-5.2.1 and earlier would fail for such usage,
+  and Solaris' tr ignores that final byte.
+
 ** New features
 
   Add SELinux support (FIXME: add details here)
index 28eeac3..871542a 100644 (file)
--- a/src/tr.c
+++ b/src/tr.c
@@ -525,8 +525,9 @@ unquote (char const *s, struct E_string *es)
                }
              break;
            case '\0':
-             /* POSIX seems to require that a trailing backslash must
-                stand for itself.  Weird.  */
+             error (0, 0, _("warning: an unescaped backslash "
+                            "at end of string is not portable"));
+             /* POSIX is not clear about this.  */
              es->escaped[j] = false;
              i--;
              c = '\\';