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

- 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

- 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


      % 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


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

- 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


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

  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

- 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.

Thorsten Dahlheimer

Attachment: print1.patch
Description: Binary data

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