summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2007-07-13 18:37:16 +0200
committerJim Meyering <jim@meyering.net>2007-07-13 18:37:16 +0200
commit916fcda554f5859ee51c4fb13031728a54d92a52 (patch)
tree43d24a71bfd2fe657ee49cf88e6228ffb55ef3ac
parentd26ba897eb944b84e4af7e1744e12b98803ccc4c (diff)
downloadcoreutils-916fcda554f5859ee51c4fb13031728a54d92a52.tar.xz
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.
-rw-r--r--ChangeLog7
-rw-r--r--NEWS4
-rw-r--r--src/tr.c5
3 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index a7f78f3d9..668e303e4 100644
--- 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 25fa3e98e..dc60e884f 100644
--- 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)
diff --git a/src/tr.c b/src/tr.c
index 28eeac35a..871542a27 100644
--- 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 = '\\';