From: pcanterino <> Date: Thu, 5 Aug 2004 10:06:49 +0000 (+0000) Subject: Removed the race condition in file_create() which could set a file to 0 if it X-Git-Tag: version_2_0~2 X-Git-Url: https://git.p6c8.net/devedit.git/commitdiff_plain/c618f5d8c66b51ec021df5aea7caa49f50d00772?ds=sidebyside Removed the race condition in file_create() which could set a file to 0 if it already exist. I wanted to use O_EXCL, but `perldoc -f sysopen` doesn't say that O_EXCL is avaiable in _every_ system. So I use O_RDONLY and O_CREAT. Additionally, I replaced all the open() calls in this module by sysopen() calls. --- diff --git a/modules/File/Access.pm b/modules/File/Access.pm index 5bd797c..3bfd50d 100644 --- a/modules/File/Access.pm +++ b/modules/File/Access.pm @@ -7,14 +7,14 @@ package File::Access; # with only one command # # Author: Patrick Canterino -# Last modified: 2004-08-01 +# Last modified: 2004-08-05 # use strict; use vars qw(@EXPORT); -use Carp qw(croak); +use Fcntl; ### Export ### @@ -108,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; } @@ -127,9 +127,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 +148,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; }