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