ErrorHandling.pm 1.2 KB

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