# with only one command
#
# Author: Patrick Canterino <patshaping@gmx.net>
-# 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
# 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
#
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;
}
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;
}
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;
}