mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-05 21:09:03 +01:00
* fixed file locking of files opened as read- or write-only on solaris
(locking is based on fcntl there, and that one cannot create an
exclusive lock for a read-only file or a shared lock for a write-only
file)
git-svn-id: trunk@12633 -
This commit is contained in:
parent
6851d6d8e0
commit
9fabb0b127
@ -185,7 +185,21 @@ begin
|
||||
{$ifndef beos}
|
||||
if (Handle>=0) then
|
||||
begin
|
||||
case (mode and (fmShareExclusive or fmShareDenyWrite or fmShareDenyRead)) of
|
||||
{$ifdef solaris}
|
||||
{ Solaris' flock is based on top of fcntl, which does not allow
|
||||
exclusive locks for files only opened for reading nor shared
|
||||
locks for files opened only for writing
|
||||
}
|
||||
if ((mode and (fmShareCompat or fmShareExclusive or fmShareDenyWrite or fmShareDenyRead)) = fmShareCompat) then
|
||||
begin
|
||||
mode := mode and not(fmShareCompat);
|
||||
if ((mode and (fmOpenRead or fmOpenWrite or fmOpenReadWrite)) = fmOpenRead) then
|
||||
mode := mode or fmShareDenyWrite
|
||||
else
|
||||
mode := mode or fmShareExclusive;
|
||||
end;
|
||||
{$endif solaris}
|
||||
case (mode and (fmShareCompat or fmShareExclusive or fmShareDenyWrite or fmShareDenyRead)) of
|
||||
fmShareCompat,
|
||||
fmShareExclusive:
|
||||
lockop:=LOCK_EX or LOCK_NB;
|
||||
@ -224,10 +238,10 @@ Var
|
||||
LinuxFlags : longint;
|
||||
begin
|
||||
LinuxFlags:=0;
|
||||
Case (Mode and 3) of
|
||||
0 : LinuxFlags:=LinuxFlags or O_RdOnly;
|
||||
1 : LinuxFlags:=LinuxFlags or O_WrOnly;
|
||||
2 : LinuxFlags:=LinuxFlags or O_RdWr;
|
||||
case (Mode and (fmOpenRead or fmOpenWrite or fmOpenReadWrite)) of
|
||||
fmOpenRead : LinuxFlags:=LinuxFlags or O_RdOnly;
|
||||
fmOpenWrite : LinuxFlags:=LinuxFlags or O_WrOnly;
|
||||
fmOpenReadWrite : LinuxFlags:=LinuxFlags or O_RdWr;
|
||||
end;
|
||||
FileOpen:=fpOpen (pointer(FileName),LinuxFlags);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user