1 package DX::Lib::FS::Guts;
5 use Fcntl qw(O_CREAT O_WRONLY);
10 my ($self, $path, $mode) = @_;
12 my $umask = umask(0000);
13 mkdir($path, oct($mode))
14 or do { umask($umask); die "Couldn't mkdir ${path}: $!" };
17 mkdir($path) or die "Couldn't mkdir ${path}: $!";
23 my ($self, $path, $mode, $data) = @_;
26 my $umask = umask(0000);
28 $fh, $path, O_CREAT | O_WRONLY, oct($mode)
29 ) or do { umask($umask); die "Couldn't create ${path}: $!" };
32 sysopen($fh, $path, O_CREAT | O_WRONLY)
33 or die "Couldn't create ${path}: $!";
35 print $fh $data if length($data);
40 my ($self, $path, $mode) = @_;
41 chmod oct($mode), $path
42 or die "Failed to chmod ${path} to ${mode}: $!";
47 my ($self, $path, $final_content) = @_;
48 my $stat = stat($path) or die "Couldn't stat ${path}: $!";
49 my $perms = $stat->mode & 07777;
50 my $new = $path.'.new';
52 sysopen my $fh, $new, O_CREAT | O_WRONLY, $perms
53 or die "Couldn't open ${new}: $!";
54 print $fh $final_content
55 or die "Couldn't write data to ${new}: $!";
57 move($new, $path) or die "Couldn't install ${new}: $!";
61 sub path_status_info {
62 my ($self, $path) = @_;
63 if (my $stat = stat($path)) {
67 mode => sprintf("%04o", ($stat->mode & 07777))
69 } elsif ($! == ENOENT) {
72 die "Couldn't stat ${path}: $!";
77 my ($self, $path) = @_;
78 return undef unless -e $path;
80 open my $fh, '<', $path or die "Couldn't open ${path}: $!";
88 my ($self, $key) = @_;
90 return $ENV{$key}|| die "${key} not set";