X-Git-Url: https://git.p6c8.net/devedit.git/blobdiff_plain/4b6ea0ada25839464b9bd7d2eec2e97567ab1626..b5ad046f9519385786cb0faa8dbf165f6d733dee:/modules/File/Access.pm diff --git a/modules/File/Access.pm b/modules/File/Access.pm index 5bd797c..6ab193e 100644 --- a/modules/File/Access.pm +++ b/modules/File/Access.pm @@ -7,45 +7,25 @@ package File::Access; # with only one command # # Author: Patrick Canterino -# Last modified: 2004-08-01 +# Last modified: 2004-10-26 # use strict; use vars qw(@EXPORT); -use Carp qw(croak); +use Fcntl; ### Export ### use base qw(Exporter); -@EXPORT = qw(chgrp - dir_read +@EXPORT = qw(dir_read file_create file_read 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() # # Collect the files and directories in a directory @@ -94,7 +74,11 @@ sub dir_read($) # file_create() # -# Create a file +# Create a file, but only if it doesn't already exist +# +# (I wanted to use O_EXCL for this, but `perldoc -f sysopen` +# doesn't say that it is available on every system - so I +# created this workaround using O_RDONLY and O_CREAT) # # Params: File to create # @@ -108,8 +92,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; } @@ -127,9 +111,9 @@ sub file_read($) my $file = shift; local *FILE; - open(FILE,"<$file") or return; + sysopen(FILE,$file,O_RDONLY) or return; read(FILE, my $content, -s $file); - close(FILE) or return; + close(FILE) or return; return \$content; } @@ -148,9 +132,9 @@ sub file_save($$) my ($file,$content) = @_; local *FILE; - open(FILE,">$file") or return; - print FILE $$content or do { close(FILE); return }; - close(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; }