[Libguestfs] [PATCH] Target::LibVirt: Don't truncate a volume when opening it

Daniel P. Berrange berrange at redhat.com
Wed Apr 7 11:07:29 UTC 2010


On Wed, Apr 07, 2010 at 12:05:37PM +0100, Matthew Booth wrote:
> perl's '>' open mode truncates by default, and will create a new file if
> necessary. We don't want to truncate an existing volume when writing to it, and
> it's an error if the volume doesn't already exist. Use sysopen to be explicit
> about this.
> ---
>  lib/Sys/VirtV2V/Target/LibVirt.pm |    6 +++++-
>  1 files changed, 5 insertions(+), 1 deletions(-)
> 
> diff --git a/lib/Sys/VirtV2V/Target/LibVirt.pm b/lib/Sys/VirtV2V/Target/LibVirt.pm
> index c8802ac..99a1ad2 100644
> --- a/lib/Sys/VirtV2V/Target/LibVirt.pm
> +++ b/lib/Sys/VirtV2V/Target/LibVirt.pm
> @@ -20,6 +20,8 @@ use warnings;
>  
>  package Sys::VirtV2V::Target::LibVirt::Vol;
>  
> +use POSIX;
> +
>  use Sys::VirtV2V::UserMessage qw(user_message);
>  
>  sub _new
> @@ -106,7 +108,9 @@ sub open
>      my $self = shift;
>  
>      my $path = $self->get_path();
> -    open(my $fd, '>', $path)
> +
> +    # We want to open the existing volume without truncating it
> +    sysopen(my $fd, $path, O_WRONLY)

NB There's no need to switch to sysopen. You can use '>>' instead of '>' if you
want to append instead of truncate


Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the Libguestfs mailing list