]>
git.p6c8.net - devedit.git/blob - modules/File/UseList.pm
6 # Fuehren einer Liste mit Dateien, auf die zur Zeit zugegriffen wird
7 # (basiert auf Filing::UseList von Roland Bluethgen <calocybe@web.de>)
9 # Autor: Patrick Canterino <patshaping@gmx.net>
10 # Letzte Aenderung: 20.9.2003
23 # Parameter: Hash: listfile => Datei mit der Liste der benutzten Dateien
24 # lockfile => Lock-Datei
25 # timeout => Lock-Timeout in Sekunden (Standard: 10)
27 # Rueckgabe: File::UseList-Objekt
31 my ($class,%args) = @_;
33 # Pruefen, ob wir alle Informationen erhalten haben
35 croak
"Missing path of list file" unless($args{'listfile'});
36 croak
"Missing path of lockfile" unless($args{'lockfile'});
37 $args{'timeout'} = 10 unless($args{'timeout'}); # Standard-Timeout
40 $self->{'files'} = [];
42 return bless($self,$class);
47 # Datei mit Liste sperren
48 # (Lock-Datei loeschen)
52 # Rueckgabe: Status-Code (Boolean)
57 my $lockfile = $self->{'lockfile'};
58 my $timeout = $self->{'timeout'};
60 # Versuche, einmal pro Sekunde die Datei zu loeschen
61 # bis das Timeout erreicht ist
63 for(my $x=$timeout;$x>=0;$x--)
65 unlink($lockfile) and return 1;
76 # Datei mit Liste freigeben
77 # (Lock-Datei anlegen)
81 # Rueckgabe: Status-Code (Boolean)
86 my $lockfile = $self->{'lockfile'};
89 return 1 if(-f
$lockfile); # Hmmm...
91 open(LOCKFILE
,">",$lockfile) or return;
92 close(LOCKFILE
) or return;
99 # Liste mit Dateien laden
103 # Rueckgabe: Status-Code (Boolean)
108 my $file = $self->{'listfile'};
111 # Datei auslesen und zeilenweise aufteilen
113 open(FILE
,"<".$file) or return;
114 read(FILE
, my $content, -s
$file);
115 close(FILE
) or return;
117 my @files = split(/\015\012|\012|\015/,$content);
119 # Unbrauchbare Zeilen entfernen
121 for(my $x=0;$x<@files;$x++)
123 if($files[$x] eq "" || $files[$x] =~ /^\s+$/)
126 $x--; # <-- sehr wichtig!
130 $self->{'files'} = \
@files;
136 # Liste mit Dateien speichern
140 # Rueckgabe: Status-Code (Boolean)
145 my $file = $self->{'listfile'};
146 my $temp = $file.".temp";
147 my $files = $self->{'files'};
150 my $data = (@
$files) ?
join("\n",@
$files)."\n" : '';
152 open(FILE
,">",$temp) or return;
154 close(FILE
) or return;
156 rename($temp,$file) and return 1;
165 # Datei zur Liste hinzufuegen
171 my ($self,$file) = @_;
172 my $files = $self->{'files'};
174 # Pruefen, ob die Datei nicht schon in der Liste vorhanden ist
176 return if($self->in_use($file));
183 # Datei aus der Liste entfernen
189 my ($self,$file) = @_;
190 my $files = $self->{'files'};
192 # Pruefen, ob die Datei ueberhaupt in der Liste vorhanden ist
194 return if($self->unused($file));
198 for(my $x=0;$x<@
$files;$x++)
200 if($files->[$x] eq $file)
202 splice(@
$files,$x,1);
210 # Pruefen, ob eine Datei in der Liste vorhanden ist
212 # Parameter: Zu pruefende Datei
214 # Rueckgabe: Status-Code (Boolean)
218 my ($self,$file) = @_;
219 my $files = $self->{'files'};
223 return 1 if($_ eq $file);
231 # Pruefen, ob eine Datei nicht in der Liste vorhanden ist
233 # Parameter: Zu pruefende Datei
235 # Rueckgabe: Status-Code (Boolean)
239 return not shift->in_use(shift);
242 # it's true, baby ;-)
patrick-canterino.de