# with only one command
#
# Author: Patrick Canterino <patshaping@gmx.net>
-# 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()
#
# Sort the entries
- @entries = sort(@entries);
+ @entries = sort {uc($a) cmp uc($b)} @entries;
my @files;
my @dirs;
{
next if($entry eq "." || $entry eq "..");
- if(-d File::Spec->canonpath($dir."/".$entry))
+ if(-d $dir."/".$entry)
{
push(@dirs,$entry);
}
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);
+ sysopen(FILE,$file,O_RDONLY) or return;
read(FILE, my $content, -s $file);
- close(FILE);
+ close(FILE) or return;
return \$content;
}
# 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;