ErrorHandling.pm 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package Dpkg::ErrorHandling;
  2. use Dpkg;
  3. use Dpkg::Gettext;
  4. use base qw(Exporter);
  5. our @EXPORT_OK = qw(warning warnerror error failure unknown syserr internerr
  6. subprocerr usageerr $warnable_error $quiet_warnings);
  7. our $warnable_error = 1;
  8. our $quiet_warnings = 0;
  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 unknown {
  28. my $field = $_;
  29. warning(sprintf(_g("unknown information field '%s' in input data in %s"),
  30. $field, $_[0]));
  31. }
  32. sub subprocerr {
  33. my ($p) = @_;
  34. require POSIX;
  35. if (POSIX::WIFEXITED($?)) {
  36. die sprintf(_g("%s: failure: %s gave error exit status %s"),
  37. $progname, $p, POSIX::WEXITSTATUS($?))."\n";
  38. } elsif (POSIX::WIFSIGNALED($?)) {
  39. die sprintf(_g("%s: failure: %s died from signal %s"),
  40. $progname, $p, POSIX::WTERMSIG($?))."\n";
  41. } else {
  42. die sprintf(_g("%s: failure: %s failed with unknown exit code %d"),
  43. $progname, $p, $?)."\n";
  44. }
  45. }
  46. sub usageerr
  47. {
  48. printf(STDERR "%s: %s\n\n", $progname, "@_");
  49. # XXX: access to main namespace
  50. main::usage();
  51. exit(2);
  52. }
  53. 1;