Hi,

Just noticed that the problem with "tr '\0' '~'" is not really with the
'\0' argument, but with the NUL bytes in the input. This version of 'tr'
discards NUL bytes in the input even when not asked to do so. It occurs
with "tr x x" but also with "tr -d '\r'". Here is a suggested doc update.

Also, a mention that using /usr/xpg6/bin/tr might be preferable to
/usr/xpg4/bin/tr, when it exists. It supports the '-C' option, the
latter doesn't.


2009-08-30  Bruno Haible  <br...@clisp.org>

        * doc/autoconf.texi (Limitations of Usual Tools): Mention that Solaris
        /usr/bin/tr does not only have problems with replacing NUL bytes but
        discards all NUL bytes from the input.

--- doc/autoconf.texi.orig      2009-08-31 01:16:01.000000000 +0200
+++ doc/autoconf.texi   2009-08-31 01:12:38.000000000 +0200
@@ -17815,16 +17815,21 @@
 
 Posix requires @command{tr} to operate on binary files.  But at least
 Solaris @command{/usr/ucb/tr} and @command{/usr/bin/tr} still fail to
-handle @samp{\0} as the octal escape for @code{NUL}.  On Solaris, when
-using @command{tr} to neutralize a binary file by converting @code{NUL}
-to a different character, it is necessary to use
-...@command{/usr/xpg4/bin/tr} instead.
+handle @samp{\0} as the octal escape for @code{NUL}; these programs
+always discard all @code{NUL} bytes from the input.  On Solaris, when
+using @command{tr} to process a binary file that may contain @code{NUL}
+bytes, it is necessary to use @command{/usr/xpg4/bin/tr} instead, or
+...@command{/usr/xpg6/bin/tr} if that is available.
 
 @example
 $ @kbd{printf 'a\0b\n' | /usr/ucb/tr '\0' '~' | wc -c}
 3
 $ @kbd{printf 'a\0b\n' | /usr/xpg4/bin/tr '\0' '~' | wc -c}
 4
+$ @kbd{printf 'a\0b\n' | /usr/ucb/tr x x | wc -c}
+3
+$ @kbd{printf 'a\0b\n' | /usr/xpg4/bin/tr x x | wc -c}
+4
 @end example
 
 @end table


Reply via email to