From 916fcda554f5859ee51c4fb13031728a54d92a52 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Fri, 13 Jul 2007 18:37:16 +0200 Subject: [PATCH] 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. --- ChangeLog | 7 +++++++ NEWS | 4 ++++ src/tr.c | 5 +++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index a7f78f3..668e303 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2007-07-13 Jim Meyering + 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 --- 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 28eeac3..871542a 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 = '\\'; -- 2.7.4