Richard W.M. Jones wrote:
On Wed, Sep 23, 2009 at 01:18:06PM +0200, Jim Meyering wrote:
> Unrelated to this particular change, you may want to
> add these lines to virt-cat:
>
> END { # use File::Coda; #
http://meyering.net/code/Coda/
> defined fileno STDOUT or return;
> close STDOUT and return;
> warn "$ME: failed to close standard output: $!\n";
> $? ||= 1;
> }
>
> Otherwise, virt-cat could fail to detect/report write errors.
>
> Try this:
>
> virt-cat /some/file > /dev/full
>
> It should fail.
It turns out that virt-cat does catch this error already, or more
precisely guestfs_download catches the error in the write to
/dev/stdout and does the right thing:
$ sudo ./cat/run-cat-locally /dev/vg_trick/F11x64 /boot/grub/grub.conf > /dev/full
download: /dev/stdout: write: No space left on device at
/home/rjones/d/libguestfs/cat/virt-cat.pl line 162.
$ echo $?
28
I'm not entirely sure where code 28 comes from.
Actually adding the above would help in *some* cases.
It's not as if --help and --version being robust is a big deal,
but try this:
$ ./virt-cat.pl --version > /dev/full && echo oops :
oops
$ ./virt-cat.pl --help > /dev/full
$
Note that that always exits with status of 1 (aka EXIT_FAILURE),
while the convention (at least for most GNU tools) is that PROG --help
exits with status 0, unless it fails, as above.
$ cat --help > /dev/full :
cat: write error: No space left on device
[Exit 1]