* Added share mode argument to FileCreate call

git-svn-id: trunk@17548 -
This commit is contained in:
michael 2011-05-23 21:11:07 +00:00
parent d89aeeadaf
commit a201f07420
19 changed files with 133 additions and 31 deletions

View File

@ -150,7 +150,13 @@ begin
end; end;
function FileCreate(const FileName: string; Mode: integer): LongInt; function FileCreate(const FileName: string; Rights: integer): LongInt;
begin
{$WARNING FIX ME! To do: FileCreate Access Modes}
FileCreate:=FileCreate(FileName);
end;
function FileCreate(const FileName: string; ShareMode: integer; Rights : Integer): LongInt;
begin begin
{$WARNING FIX ME! To do: FileCreate Access Modes} {$WARNING FIX ME! To do: FileCreate Access Modes}
FileCreate:=FileCreate(FileName); FileCreate:=FileCreate(FileName);

View File

@ -430,7 +430,12 @@ asm
end {['eax', 'ebx', 'ecx', 'edx']}; end {['eax', 'ebx', 'ecx', 'edx']};
function FileCreate (const FileName: string; Mode: integer): longint; function FileCreate (const FileName: string; Rights: integer): longint;
begin
FileCreate:=FileCreate(FileName);
end;
function FileCreate (const FileName: string; ShareMode : integer; Rights: integer): longint;
begin begin
FileCreate:=FileCreate(FileName); FileCreate:=FileCreate(FileName);
end; end;

View File

@ -69,7 +69,13 @@ begin
end; end;
function FileCreate(const FileName: string; Mode: integer): LongInt; function FileCreate(const FileName: string; Rights: integer): LongInt;
begin
result := -1;
end;
function FileCreate(const FileName: string; ShareMode: integer; rights : integer): LongInt;
begin begin
result := -1; result := -1;
end; end;

View File

@ -130,7 +130,13 @@ begin
end; end;
Function FileCreate (Const FileName : String; Mode:longint) : Longint; Function FileCreate (Const FileName : String; ShareMode:longint; Rights : longint) : Longint;
begin
FileCreate:=FileCreate(FileName);
end;
Function FileCreate (Const FileName : String; Rights:longint) : Longint;
begin begin
FileCreate:=FileCreate(FileName); FileCreate:=FileCreate(FileName);
end; end;

View File

@ -93,7 +93,23 @@ begin
end; end;
Function FileCreate (Const FileName : String;Mode : Longint) : Longint; Function FileCreate (Const FileName : String;Rights : Longint) : Longint;
Var LinuxFlags : longint;
BEGIN
(* TODO fix
LinuxFlags:=0;
Case (Mode and 3) of
0 : LinuxFlags:=LinuxFlags or Open_RdOnly;
1 : LinuxFlags:=LinuxFlags or Open_WrOnly;
2 : LinuxFlags:=LinuxFlags or Open_RdWr;
end;
FileCreate:=fdOpen(FileName,LinuxFlags or Open_Creat or Open_Trunc);
*)
end;
Function FileCreate (Const FileName : String;ShareMode : Longint; Rights : Longint) : Longint;
Var LinuxFlags : longint; Var LinuxFlags : longint;

View File

@ -151,7 +151,13 @@ begin
end; end;
function FileCreate(const FileName: string; Mode: integer): LongInt; function FileCreate(const FileName: string; Rights: integer): LongInt;
begin
{$WARNING FIX ME! To do: FileCreate Access Modes}
FileCreate:=FileCreate(FileName);
end;
function FileCreate(const FileName: string; ShareMode: integer; Rights : integer): LongInt;
begin begin
{$WARNING FIX ME! To do: FileCreate Access Modes} {$WARNING FIX ME! To do: FileCreate Access Modes}
FileCreate:=FileCreate(FileName); FileCreate:=FileCreate(FileName);

View File

@ -87,7 +87,13 @@ begin
end; end;
function FileCreate(const FileName : String; Mode: longint) : THandle; function FileCreate(const FileName : String; Rights: longint) : THandle;
begin
FileCreate := FileCreate(FileName);
end;
function FileCreate(const FileName : String; ShareMode : longint; Rights: longint) : THandle;
begin begin
FileCreate := FileCreate(FileName); FileCreate := FileCreate(FileName);
end; end;

View File

@ -69,7 +69,13 @@ begin
end; end;
function FileCreate(const FileName: string; Mode: integer): LongInt; function FileCreate(const FileName: string; Rights: integer): LongInt;
begin
result := -1;
end;
function FileCreate(const FileName: string; ShareMode : Integer; Rights: integer): LongInt;
begin begin
result := -1; result := -1;
end; end;

View File

@ -106,7 +106,14 @@ begin
FileCreate:=_open(Pchar(FileName),O_RdWr or O_Creat or O_Trunc,0); FileCreate:=_open(Pchar(FileName),O_RdWr or O_Creat or O_Trunc,0);
end; end;
Function FileCreate (Const FileName : String; mode:longint) : THandle; Function FileCreate (Const FileName : String; Rights:longint) : THandle;
begin
FileCreate:=FileCreate (FileName);
end;
Function FileCreate (Const FileName : String; ShareMode: Longint; Rights:longint) : THandle;
begin begin
FileCreate:=FileCreate (FileName); FileCreate:=FileCreate (FileName);

View File

@ -109,7 +109,13 @@ begin
FileSetAttr (Filename, 0); // dont know why but open always sets ReadOnly flag FileSetAttr (Filename, 0); // dont know why but open always sets ReadOnly flag
end; end;
Function FileCreate (Const FileName : String; mode:longint) : THandle; Function FileCreate (Const FileName : String; rights:longint) : THandle;
begin
FileCreate:=FileCreate (FileName);
end;
Function FileCreate (Const FileName : String; ShareMode:longint; rights : longint) : THandle;
begin begin
FileCreate:=FileCreate (FileName); FileCreate:=FileCreate (FileName);
end; end;

View File

@ -73,7 +73,7 @@ const
{ TFileStream create mode } { TFileStream create mode }
const const
fmCreate = $FFFF; fmCreate = $FF00;
fmOpenRead = 0; fmOpenRead = 0;
fmOpenWrite = 1; fmOpenWrite = 1;
fmOpenReadWrite = 2; fmOpenReadWrite = 2;

View File

@ -476,8 +476,8 @@ constructor TFileStream.Create(const AFileName: string; Mode: Word);
begin begin
FFileName:=AFileName; FFileName:=AFileName;
If Mode=fmcreate then If (Mode and fmCreate) > 0 then
FHandle:=FileCreate(AFileName) FHandle:=FileCreate(AFileName,Mode)
else else
FHAndle:=FileOpen(AFileName,Mode); FHAndle:=FileOpen(AFileName,Mode);
@ -493,8 +493,8 @@ constructor TFileStream.Create(const AFileName: string; Mode: Word; Rights: Card
begin begin
FFileName:=AFileName; FFileName:=AFileName;
If Mode=fmcreate then If (Mode and fmCreate) > 0 then
FHandle:=FileCreate(AFileName,Rights) FHandle:=FileCreate(AFileName,Mode,Rights)
else else
FHAndle:=FileOpen(AFileName,Mode); FHAndle:=FileOpen(AFileName,Mode);

View File

@ -73,7 +73,8 @@ Const
Function FileOpen (Const FileName : string; Mode : Integer) : THandle; Function FileOpen (Const FileName : string; Mode : Integer) : THandle;
Function FileCreate (Const FileName : String) : THandle; Function FileCreate (Const FileName : String) : THandle;
Function FileCreate (Const FileName : String; Mode : Integer) : THandle; Function FileCreate (Const FileName : String; Rights : Integer) : THandle;
Function FileCreate (Const FileName : String; ShareMode : Integer; Rights : Integer) : THandle;
Function FileRead (Handle : THandle; out Buffer; Count : longint) : Longint; Function FileRead (Handle : THandle; out Buffer; Count : longint) : Longint;
Function FileWrite (Handle : THandle; const Buffer; Count : Longint) : Longint; Function FileWrite (Handle : THandle; const Buffer; Count : Longint) : Longint;
Function FileSeek (Handle : THandle; FOffset, Origin: Longint) : Longint; Function FileSeek (Handle : THandle; FOffset, Origin: Longint) : Longint;

View File

@ -510,11 +510,16 @@ Begin
FileCreate:=feInvalidHandle; FileCreate:=feInvalidHandle;
End; End;
function FileCreate (const FileName: string; Mode: integer): THandle; function FileCreate (const FileName: string; Rights: integer): THandle;
begin begin
FileCreate := FileCreate(FileName); FileCreate := FileCreate(FileName);
end; end;
function FileCreate (const FileName: string; ShareMode : Integer; Rights: integer): THandle;
begin
FileCreate := FileCreate(FileName);
end;
function FileRead (Handle: THandle; Out Buffer; Count: longint): longint; function FileRead (Handle: THandle; Out Buffer; Count: longint): longint;
Var Var

View File

@ -442,14 +442,21 @@ begin
end; end;
Function FileCreate (Const FileName : String;Mode : Longint) : Longint; Function FileCreate (Const FileName : String;Rights : Longint) : Longint;
begin begin
repeat repeat
FileCreate:=fpOpen(pointer(FileName),O_RdWr or O_Creat or O_Trunc,Mode); FileCreate:=fpOpen(pointer(FileName),O_RdWr or O_Creat or O_Trunc,Rights);
until (FileCreate<>-1) or (fpgeterrno<>ESysEINTR); until (FileCreate<>-1) or (fpgeterrno<>ESysEINTR);
end; end;
Function FileCreate (Const FileName : String; ShareMode : Longint; Rights:LongInt ) : Longint;
begin
Result:=FileCreate( FileName, Rights );
Result:=DoFileLocking(Result,ShareMode);
end;
Function FileRead (Handle : Longint; out Buffer; Count : longint) : Longint; Function FileRead (Handle : Longint; out Buffer; Count : longint) : Longint;

View File

@ -135,7 +135,12 @@ begin
end; end;
Function FileCreate (Const FileName : String; Mode:longint) : Longint; Function FileCreate (Const FileName : String; Rights:longint) : Longint;
begin
FileCreate:=FileCreate(FileName);
end;
Function FileCreate (Const FileName : String; ShareMode:longint; Rights: Longint) : Longint;
begin begin
FileCreate:=FileCreate(FileName); FileCreate:=FileCreate(FileName);
end; end;

View File

@ -69,7 +69,12 @@ begin
end; end;
function FileCreate(const FileName: string; Mode: integer): LongInt; function FileCreate(const FileName: string; Rights: integer): LongInt;
begin
result := -1;
end;
function FileCreate(const FileName: string; ShareMode: integer; Rights: integer): LongInt;
begin begin
result := -1; result := -1;
end; end;

View File

@ -213,38 +213,41 @@ end;
File Functions File Functions
****************************************************************************} ****************************************************************************}
Function FileOpen (Const FileName : string; Mode : Integer) : THandle;
const const
AccessMode: array[0..2] of Cardinal = ( AccessMode: array[0..2] of Cardinal = (
GENERIC_READ, GENERIC_READ,
GENERIC_WRITE, GENERIC_WRITE,
GENERIC_READ or GENERIC_WRITE); GENERIC_READ or GENERIC_WRITE);
ShareMode: array[0..4] of Integer = ( ShareModes: array[0..4] of Integer = (
0, 0,
0, 0,
FILE_SHARE_READ, FILE_SHARE_READ,
FILE_SHARE_WRITE, FILE_SHARE_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE); FILE_SHARE_READ or FILE_SHARE_WRITE);
Function FileOpen (Const FileName : string; Mode : Integer) : THandle;
begin begin
result := CreateFile(PChar(FileName), dword(AccessMode[Mode and 3]), result := CreateFile(PChar(FileName), dword(AccessMode[Mode and 3]),
dword(ShareMode[(Mode and $F0) shr 4]), nil, OPEN_EXISTING, dword(ShareModes[(Mode and $F0) shr 4]), nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0); FILE_ATTRIBUTE_NORMAL, 0);
//if fail api return feInvalidHandle (INVALIDE_HANDLE=feInvalidHandle=-1) //if fail api return feInvalidHandle (INVALIDE_HANDLE=feInvalidHandle=-1)
end; end;
Function FileCreate (Const FileName : String) : THandle; Function FileCreate (Const FileName : String) : THandle;
begin begin
Result := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, FileCreate:=FileCreate(FileName, fmShareExclusive);
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
end; end;
Function FileCreate (Const FileName : String; Rights:longint) : THandle;
Function FileCreate (Const FileName : String; Mode:longint) : THandle;
begin begin
FileCreate:=FileCreate(FileName); FileCreate:=FileCreate(FileName, Mode, 0);
end; end;
Function FileCreate (Const FileName : String; ShareMode : Integer; Rights : Integer) : THandle;
begin
Result := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
dword(ShareModes[(ShareMode and $F0) shr 4]), nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
end;
Function FileRead (Handle : THandle; out Buffer; Count : longint) : Longint; Function FileRead (Handle : THandle; out Buffer; Count : longint) : Longint;
Var Var

View File

@ -165,7 +165,13 @@ begin
end; end;
Function FileCreate (Const FileName : String; Mode:longint) : THandle; Function FileCreate (Const FileName : String; Rights:longint) : THandle;
begin
FileCreate:=FileCreate(FileName);
end;
Function FileCreate (Const FileName : String; ShareMode:longint; Rights:longint) : THandle;
begin begin
FileCreate:=FileCreate(FileName); FileCreate:=FileCreate(FileName);
end; end;