]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/Tools.pm
allow fall back to default completion
[pve-common.git] / src / PVE / Tools.pm
index b6849f2378f33267c2cd5326cee3ab1e75e37b4f..ae06c12b224b873dc7a27d5965078f54a8d9a851 100644 (file)
@@ -41,6 +41,7 @@ template_replace
 safe_print
 trim
 extract_param
+file_copy
 );
 
 my $pvelogdir = "/var/log/pve";
@@ -67,12 +68,12 @@ our $IPV6RE = "(?:" .
 
 our $IPRE = "(?:$IPV4RE|$IPV6RE)";
 
-use constant (CLONE_NEWNS   => 0x00020000,
+use constant {CLONE_NEWNS   => 0x00020000,
               CLONE_NEWUTS  => 0x04000000,
               CLONE_NEWIPC  => 0x08000000,
               CLONE_NEWUSER => 0x10000000,
               CLONE_NEWPID  => 0x20000000,
-              CLONE_NEWNET  => 0x40000000);
+              CLONE_NEWNET  => 0x40000000};
 
 sub run_with_timeout {
     my ($timeout, $code, @param) = @_;
@@ -220,6 +221,12 @@ sub file_get_contents {
     return $content;
 }
 
+sub file_copy {
+    my ($filename, $dst, $max, $perm) = @_;
+
+    file_set_contents ($dst, file_get_contents($filename, $max), $perm);
+}
+
 sub file_read_firstline {
     my ($filename) = @_;
 
@@ -312,6 +319,7 @@ sub run_command {
     my $timeout;
     my $oldtimeout;
     my $pid;
+    my $exitcode;
 
     my $outfunc;
     my $errfunc;
@@ -319,6 +327,7 @@ sub run_command {
     my $input;
     my $output;
     my $afterfork;
+    my $noerr;
 
     eval {
 
@@ -341,6 +350,8 @@ sub run_command {
                $logfunc = $param{$p};
            } elsif ($p eq 'afterfork') {
                $afterfork = $param{$p};
+           } elsif ($p eq 'noerr') {
+               $noerr = $param{$p};
            } else {
                die "got unknown parameter '$p' for run_command\n";
            }
@@ -486,14 +497,14 @@ sub run_command {
            die "failed to execute\n";
        } elsif (my $sig = ($? & 127)) {
            die "got signal $sig\n";
-       } elsif (my $ec = ($? >> 8)) {
-           if (!($ec == 24 && ($cmdstr =~ m|^(\S+/)?rsync\s|))) {
+       } elsif ($exitcode = ($? >> 8)) {
+           if (!($exitcode == 24 && ($cmdstr =~ m|^(\S+/)?rsync\s|))) {
                if ($errmsg && $laststderr) {
                    my $lerr = $laststderr;
                    $laststderr = undef;
                    die "$lerr\n";
                }
-               die "exit code $ec\n";
+               die "exit code $exitcode\n";
            }
        }
 
@@ -522,12 +533,12 @@ sub run_command {
        if ($errmsg) {
            $err =~ s/^usermod:\s*// if $cmdstr =~ m|^(\S+/)?usermod\s|;
            die "$errmsg: $err";
-       } else {
+       } elsif(!$noerr) {
            die "command '$cmdstr' failed: $err";
        }
     }
 
-    return undef;
+    return $exitcode;
 }
 
 sub split_list {