Re: printf does not always display warning messages on write errors

2009-09-03 Thread Stefano Lattarini
At Thursday 03 September 2009, Chet Ramey chet.ra...@case.edu wrote:

 Thanks for the report.  This will be fixed in the next version.
Good! And thanks to you for your quick answers and your useful 
software.

 Chet
Regards,
   Stefano




printf does not always display warning messages on write errors

2009-09-02 Thread Stefano Lattarini
Hi everybody.

I found the following bug while running some of my bash scripts on 
GNU/Linux with stdout redirected to /dev/full, to see if write errors
where correctly detected and reported.

It turned out that, on write errors, the printf builtin correctly
returns a non-zero status (thus my scripts at least had a correct
exit status), but unfortunately it does not always display a suitable
error message on stderr; in particular, it fails to do so if the
printed  string does *not* end with a newline. On the contrary, the
echo builtin both returns a non-zero status and write a clear error
message on standard error, even if called with the `-n' option (so
that the printed string does not end with a newline).

Examples (tested with both bash 3.2 and bash 4.0, more details about 
versions and system information will follow):

  $ ls -l /dev/full
  crw-rw-rw- 1 root root 1, 7 Sep  2 18:36 /dev/full
  
  $ cat printf-bug.sh
  echo * `type printf`
  echo * `type echo`
  # - - -
  printf x /dev/full
echo a:$?
  printf %s\n x /dev/full
echo b:$?
  echo -n x /dev/full
echo c:$?
  echo x /dev/full
echo d:$?
  # - - -
  exit 0
  
  $ bash printf-bug.sh # using either bash 4.0 or 3.2
  * printf is a shell builtin
  * echo is a shell builtin
  a:1
  printf-bug.sh: line 6: printf: write error: No space left on device
  b:1
  printf-bug.sh: line 8: echo: write error: No space left on device
  c:1
  printf-bug.sh: line 10: echo: write error: No space left on device
  d:1

By the way, bash 3.0 behaves far worser (I don't known if you can
found this info useful, but anyway here it is):

  $ bash-3.0 printf-bug.sh
  * printf is a shell builtin
  * echo is a shell builtin
  a:0
  b:0
  c:1
  d:1

Here are the details on my system and the bash shells used.

 ---

Details on operating system:

 $ uname -s -r -m -o
 Linux  2.6.26-1-686  i686  GNU/Linux
 $ lsb_release -i -d -r -c
 Distributor ID: Debian
 Description:  Debian GNU/Linux testing/unstable
 Release:  testing/unstable
 Codename:  n/a
 $ cat /etc/debian_version
 squeeze/sid

 ---

Details on bash versions:

Bash 4.0
---
 Installed from debian package bash, version 4.0-4
 Complete version string:  4.0.28(1)-release
 
Information from bashbug [Automatically generated]:
  Machine: i486
  OS: linux-gnu
  Compiler: gcc
  Compilation CFLAGS:
-DPROGRAM='bash'
-DCONF_HOSTTYPE='i486'
-DCONF_OSTYPE='linux-gnu'
-DCONF_MACHTYPE='i486-pc-linux-gnu'
-DCONF_VENDOR='pc'
-DLOCALEDIR='/usr/share/locale'
-DPACKAGE='bash' 
-DSHELL 
-DHAVE_CONFIG_H
-I. -I../bash -I../bash/include -I../bash/lib
-g -O2 -Wall
  Machine Type: i486-pc-linux-gnu

Bash Version: 4.0
Patch Level: 28
Release Status: release

Bash 3.2
---
 Installed by hand from official tarball.
 Complete version string: 3.2.0(1)-release

Information from bashbug [Automatically generated]:
  Machine: i686
  OS: linux-gnu
  Compiler: gcc
  Compilation CFLAGS:
-DPROGRAM='bash'
-DCONF_HOSTTYPE='i686'
-DCONF_OSTYPE='linux-gnu'
-DCONF_MACHTYPE='i686-pc-linux-gnu'
-DCONF_VENDOR='pc'
-DLOCALEDIR='/opt/vintage/bash-3.2/share/locale'
-DPACKAGE='bash'
-DSHELL
-DHAVE_CONFIG_H
-I. -I. -I./include -I./lib
-g -O2
  Machine Type: i686-pc-linux-gnu

Bash Version: 3.2
Patch Level: 0
Release Status: release

Bash 3.0
---
 Installed by hand from official tarball.
 Complete version string: 3.00.0(1)-release

Information from bashbug [Automatically generated]:
  Machine: i686
  OS: linux-gnu
  Compiler: gcc
  Compilation CFLAGS:
-DPROGRAM='bash'
-DCONF_HOSTTYPE='i686'
-DCONF_OSTYPE='linux-gnu'
-DCONF_MACHTYPE='i686-pc-linux-gnu'
-DCONF_VENDOR='pc'
-DLOCALEDIR='/opt/vintage/bash-3.0/share/locale'
-DPACKAGE='bash'
-DSHELL
-DHAVE_CONFIG_H
-I. -I. -I./include -I./lib
-g -O2
  Machine Type: i686-pc-linux-gnu

Bash Version: 3.0
Patch Level: 0
Release Status: release

 ---

Regards,
   Stefano




Re: printf does not always display warning messages on write errors

2009-09-02 Thread Chet Ramey
Stefano Lattarini wrote:
 Hi everybody.
 
 I found the following bug while running some of my bash scripts on 
 GNU/Linux with stdout redirected to /dev/full, to see if write errors
 where correctly detected and reported.
 
 It turned out that, on write errors, the printf builtin correctly
 returns a non-zero status (thus my scripts at least had a correct
 exit status), but unfortunately it does not always display a suitable
 error message on stderr; in particular, it fails to do so if the
 printed  string does *not* end with a newline. 

Thanks for the report.  This will be fixed in the next version.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/