X-Git-Url: https://git.p6c8.net/devedit.git/blobdiff_plain/3e6b9e338fe5ea06b487202fe54217f2082cd13d..4e40e9a450e412da79b7c3ef4a1eaae268b206a4:/modules/File/Access.pm?ds=inline diff --git a/modules/File/Access.pm b/modules/File/Access.pm index 81b6851..3bfd50d 100644 --- a/modules/File/Access.pm +++ b/modules/File/Access.pm @@ -7,24 +7,44 @@ package File::Access; # with only one command # # Author: Patrick Canterino -# Last modified: 09-20-2003 +# Last modified: 2004-08-05 # use strict; use vars qw(@EXPORT); -use Carp qw(croak); -use File::Spec; +use Fcntl; ### Export ### use base qw(Exporter); -@EXPORT = qw(dir_read +@EXPORT = qw(chgrp + dir_read file_create file_read - file_save); + file_save + file_unlock); + +# chgrp() +# +# Change the group of files or directories +# +# Params: 1. Group name +# 2. List of files +# +# Return: Number of files group successfully changed +# (or false) + +sub chgrp($@) +{ + my ($group,@files) = @_; + my $gid = ($group !~ /^\d+$/) ? getgrnam($group) : $group; + + return unless($gid); + return chown(-1,$gid,@files); +} # dir_read() # @@ -50,7 +70,7 @@ sub dir_read($) # Sort the entries - @entries = sort(@entries); + @entries = sort {uc($a) cmp uc($b)} @entries; my @files; my @dirs; @@ -59,7 +79,7 @@ sub dir_read($) { next if($entry eq "." || $entry eq ".."); - if(-d File::Spec->canonpath($dir."/".$entry)) + if(-d $dir."/".$entry) { push(@dirs,$entry); } @@ -88,8 +108,8 @@ sub file_create($) return if(-e $file); - open(FILE,">",$file) or return; - close(FILE) or return; + sysopen(FILE,$file,O_RDONLY | O_CREAT) or return; + close(FILE) or return; return 1; } @@ -107,9 +127,9 @@ sub file_read($) my $file = shift; local *FILE; - open(FILE,"<",$file); + sysopen(FILE,$file,O_RDONLY) or return; read(FILE, my $content, -s $file); - close(FILE); + close(FILE) or return; return \$content; } @@ -121,23 +141,39 @@ sub file_read($) # Params: 1. File # 2. File content as Scalar Reference # -# Return: Status Code (Boolean) +# Return: Status code (Boolean) sub file_save($$) { my ($file,$content) = @_; - my $temp = $file.".temp"; local *FILE; - open(FILE,">",$temp) or return; - print FILE $$content; - close(FILE) or return; - - rename($temp,$file) or return; + sysopen(FILE,$file,O_WRONLY | O_CREAT | O_TRUNC) or return; + print FILE $$content or do { close(FILE); return }; + close(FILE) or return; return 1; } +# file_unlock() +# +# Remove a file from the list of files in use +# +# Params: 1. File::UseList object +# 2. File to remove +# +# Return: -nothing- + +sub file_unlock($$) +{ + my ($uselist,$file) = @_; + + $uselist->remove_file($file); + $uselist->save; + + return; +} + # it's true, baby ;-) 1;