use Clone qw(clone);
use Linux::Inotify2;
use base 'Exporter';
-use JSON;
+use JSON;
+use Encode qw(encode decode);
our @EXPORT_OK = qw(read_file write_file register_file);
my $diff = '';
- open (TMP, "diff -b -N -u '$filename' '$shadow'|");
-
- while (my $line = <TMP>) {
- $diff .= $line;
- }
-
- close (TMP);
+ my $cmd = ['/usr/bin/diff', '-b', '-N', '-u', $filename, $shadow];
+ PVE::Tools::run_command($cmd, noerr => 1, outfunc => sub {
+ my ($line) = @_;
+ $diff .= decode('UTF-8', $line) . "\n";
+ });
$diff = undef if !$diff;
while (defined ($line = <$fh>)) {
chomp $line;
if ($line =~ m/^\s*#(.*?)\s*$/) {
- # NOTE: we use 'comments' instead of 'comment' to
- # avoid automatic utf8 conversion
$f->{comments} = '' if !$f->{comments};
- $f->{comments} .= "$1\n";
+ my $comment = decode('UTF-8', $1);
+ $f->{comments} .= "$comment\n";
} elsif ($line =~ m/^\s*(?:iface\s
|mapping\s
|auto\s
my ($filename, $fh, $config) = @_;
my $ifupdown2 = -e '/usr/share/ifupdown2';
my $raw = __write_etc_network_interfaces($config, $ifupdown2);
- PVE::Tools::safe_print($filename, $fh, $raw);
+ PVE::Tools::safe_print($filename, $fh, encode('UTF-8', $raw));
}
sub __write_etc_network_interfaces {
my ($config, $ifupdown2) = @_;
my $d = $ifaces->{$iface};
if ($d->{type} eq 'bridge') {
foreach my $p (split (/\s+/, $d->{bridge_ports})) {
+ $p =~ s/\.\d+$//;
my $n = $ifaces->{$p};
die "bridge '$iface' - unable to find bridge port '$p'\n"
if !$n;