use Carp;
use Scalar::Util qw/isweak weaken blessed reftype refaddr/;
+use Config;
use base 'Exporter';
-our @EXPORT_OK = qw/stacktrace populate_weakregistry assert_empty_weakregistry/;
+our @EXPORT_OK = qw/local_umask stacktrace populate_weakregistry assert_empty_weakregistry/;
+
+sub local_umask {
+ return unless defined $Config{d_umask};
+
+ die 'Calling local_umask() in void context makes no sense'
+ if ! defined wantarray;
+
+ my $old_umask = umask(shift());
+ die "Setting umask failed: $!" unless defined $old_umask;
+
+ return bless \$old_umask, 'DBICTest::Util::UmaskGuard';
+}
+{
+ package DBICTest::Util::UmaskGuard;
+ sub DESTROY {
+ local ($@, $!);
+ eval { defined (umask ${$_[0]}) or die };
+ warn ( "Unable to reset old umask ${$_[0]}: " . ($!||'Unknown error') )
+ if ($@ || $!);
+ }
+}
+
sub stacktrace {
my $frame = shift;