Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: various fixes to print builtin



When I prepared the \c handling patch for the print builtin, I noticed
a couple of other (mostly minor) issues, which I've addressed in the
attached patch.  They are:

- The '%b' specifier of printf gets the character count wrong when a
  width is given:

      % printf '%5b%n\n' abc count; echo $count
        abc
      3

- The output of a '%%' specifier and padding spaces from '%b' go to
  stdout even if output has been redirected with one of the -u, -p,
  -z, -s options:

      % print -u3 -f 'a%3bc%%d\n' 'b' 3>fd3.out
        %
      % cat fd3.out
      abcd

- When there's no argument left for a '%b', it does not behave as if
  the argument were an empty string, but rather nothing is output at
  all.  This makes a difference if a width is given:

      % printf '%s!%5b!\n' abc
      abc!!

  vs.

      % printf '%s!%5b!\n' abc ''
      abc!     !

- The argument to a '%b' specifier gets passed to getkeystring() in
  unmetafied form, and that may lead to wrong output:

      % printf '%b\n' $'\x83 ' | od -tx1
      0000000 00 0a
      0000002

  vs.

      % echo $'\x83 ' | od -tx1
      0000000 83 20 0a
      0000003

- If both the -f and -c/-C options are given to print, the -f inhibits
  the initial expansion of escape sequences in the argument strings,
  but is then simply ignored:

      % print -f 'arg: %b\n' -C2 '\x41' '\x42' '\x43'       
      \x41  \x43
      \x42

  vs.

      % print -C2 '\x41' '\x42' '\x43'           
      A  C
      B

  I've resolved this strange interaction by having -f completely
  override -c/-C.

- If print -f output has been redirected with -u, -p, -z, or -s, and
  an error aborts execution, the fout file isn't closed.

- In the builtins[] table, the BINF_PRINTOPTS flag is not necessary
  for the echo and pushln commands, since these don't support the -R
  option.

- I've replaced two (unsigned char) casts to STOUC invocations,
  according to the advice in the zsh-development-guide.

- I've removed the 'count=mcount' assignment (in the last hunk)
  because it is (a) unnecessary and (b) off by one, I think.

- I've slightly tweaked formatting in a few places.

Regards,
Thorsten Dahlheimer

Attachment: print1.patch
Description: Binary data



Messages sorted by: Reverse Date, Date, Thread, Author