videosite: safely rewrite config file
authorRalf Ertzinger <ralf@skytale.net>
Fri, 27 May 2011 07:40:08 +0000 (09:40 +0200)
committerRalf Ertzinger <ralf@skytale.net>
Fri, 27 May 2011 07:40:08 +0000 (09:40 +0200)
videosite.pl

index 10b953b..d87b598 100644 (file)
@@ -22,6 +22,7 @@ use vars qw($VERSION %IRSSI);
 use XML::Simple;
 use Data::Dumper;
 use File::Spec;
+use File::Temp qw(tempfile);
 use BettIrssi 101 qw(_bcb _bcs);
 use LWP::UserAgent;
 
@@ -260,10 +261,12 @@ sub check_for_link {
 
 sub cmd_save {
 
+
     eval {
-        open(CONF, '>'.$conffile) or die 'Could not open config file';
-        print CONF XML::Simple::XMLout($conf, KeepRoot => 1, KeyAttr => {'config' => 'module', 'option' => 'key'});
-        close(CONF);
+        my ($tempfile, $tempfn) = tempfile("videosite.xml.XXXXXX", dir => Irssi::get_irssi_dir());
+        print $tempfile XML::Simple::XMLout($conf, KeepRoot => 1, KeyAttr => {'config' => 'module', 'option' => 'key'});
+        close($tempfile);
+        rename($tempfn, $conffile);
     };
     if ($@) {
         write_irssi('Could not save config to %s: %s', ($conffile, $@));