ErrorHandling.pm 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package Dpkg::ErrorHandling;
  2. use base qw(Exporter);
  3. our @EXPORT_OK = qw( failure syserr error internerr warning
  4. warnerror subprocerr );
  5. our $warnable_error = 0;
  6. our $quiet_warnings = 0;
  7. our $progname = "unknown";
  8. sub failure { die sprintf(_g("%s: failure: %s"), $progname, $_[0])."\n"; }
  9. sub syserr { die sprintf(_g("%s: failure: %s: %s"), $progname, $_[0], $!)."\n"; }
  10. sub error { die sprintf(_g("%s: error: %s"), $progname, $_[0])."\n"; }
  11. sub internerr { die sprintf(_g("%s: internal error: %s"), $progname, $_[0])."\n"; }
  12. sub warning
  13. {
  14. if (!$quiet_warnings) {
  15. warn sprintf(_g("%s: warning: %s"), $progname, $_[0])."\n";
  16. }
  17. }
  18. sub warnerror
  19. {
  20. if ($warnable_error) {
  21. warning(@_);
  22. } else {
  23. error(@_);
  24. }
  25. }
  26. sub subprocerr {
  27. my ($p) = @_;
  28. require POSIX;
  29. if (POSIX::WIFEXITED($?)) {
  30. die sprintf(_g("%s: failure: %s gave error exit status %s"),
  31. $progname, $p, POSIX::WEXITSTATUS($?))."\n";
  32. } elsif (POSIX::WIFSIGNALED($?)) {
  33. die sprintf(_g("%s: failure: %s died from signal %s"),
  34. $progname, $p, POSIX::WTERMSIG($?))."\n";
  35. } else {
  36. die sprintf(_g("%s: failure: %s failed with unknown exit code %d"),
  37. $progname, $p, $?)."\n";
  38. }
  39. }
  40. 1;