From a201f07420443923d6fabca2c73f5b56918e9a8d Mon Sep 17 00:00:00 2001 From: michael Date: Mon, 23 May 2011 21:11:07 +0000 Subject: [PATCH] * Added share mode argument to FileCreate call git-svn-id: trunk@17548 - --- rtl/amiga/sysutils.pp | 8 +++++++- rtl/emx/sysutils.pp | 7 ++++++- rtl/gba/sysutils.pp | 8 +++++++- rtl/go32v2/sysutils.pp | 8 +++++++- rtl/macos/sysutils.pp | 18 +++++++++++++++++- rtl/morphos/sysutils.pp | 8 +++++++- rtl/nativent/sysutils.pp | 8 +++++++- rtl/nds/sysutils.pp | 8 +++++++- rtl/netware/sysutils.pp | 9 ++++++++- rtl/netwlibc/sysutils.pp | 8 +++++++- rtl/objpas/classes/classesh.inc | 2 +- rtl/objpas/classes/streams.inc | 8 ++++---- rtl/objpas/sysutils/filutilh.inc | 3 ++- rtl/os2/sysutils.pp | 7 ++++++- rtl/unix/sysutils.pp | 11 +++++++++-- rtl/watcom/sysutils.pp | 7 ++++++- rtl/wii/sysutils.pp | 7 ++++++- rtl/win/sysutils.pp | 21 ++++++++++++--------- rtl/wince/sysutils.pp | 8 +++++++- 19 files changed, 133 insertions(+), 31 deletions(-) diff --git a/rtl/amiga/sysutils.pp b/rtl/amiga/sysutils.pp index da7629adb5..1dd3dc99fb 100644 --- a/rtl/amiga/sysutils.pp +++ b/rtl/amiga/sysutils.pp @@ -150,7 +150,13 @@ begin 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 {$WARNING FIX ME! To do: FileCreate Access Modes} FileCreate:=FileCreate(FileName); diff --git a/rtl/emx/sysutils.pp b/rtl/emx/sysutils.pp index 62c6f989ad..33a5eaaffa 100644 --- a/rtl/emx/sysutils.pp +++ b/rtl/emx/sysutils.pp @@ -430,7 +430,12 @@ asm 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 FileCreate:=FileCreate(FileName); end; diff --git a/rtl/gba/sysutils.pp b/rtl/gba/sysutils.pp index b04e3fa6b3..86fefd02c9 100644 --- a/rtl/gba/sysutils.pp +++ b/rtl/gba/sysutils.pp @@ -69,7 +69,13 @@ begin 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 result := -1; end; diff --git a/rtl/go32v2/sysutils.pp b/rtl/go32v2/sysutils.pp index f90dec4dd1..9551e72120 100644 --- a/rtl/go32v2/sysutils.pp +++ b/rtl/go32v2/sysutils.pp @@ -130,7 +130,13 @@ begin 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 FileCreate:=FileCreate(FileName); end; diff --git a/rtl/macos/sysutils.pp b/rtl/macos/sysutils.pp index 0566ba5bda..e1b11108e6 100644 --- a/rtl/macos/sysutils.pp +++ b/rtl/macos/sysutils.pp @@ -93,7 +93,23 @@ begin 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; diff --git a/rtl/morphos/sysutils.pp b/rtl/morphos/sysutils.pp index fa60d4ff50..886d8b1743 100644 --- a/rtl/morphos/sysutils.pp +++ b/rtl/morphos/sysutils.pp @@ -151,7 +151,13 @@ begin 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 {$WARNING FIX ME! To do: FileCreate Access Modes} FileCreate:=FileCreate(FileName); diff --git a/rtl/nativent/sysutils.pp b/rtl/nativent/sysutils.pp index 783ba661a8..5f3159abbb 100644 --- a/rtl/nativent/sysutils.pp +++ b/rtl/nativent/sysutils.pp @@ -87,7 +87,13 @@ begin 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 FileCreate := FileCreate(FileName); end; diff --git a/rtl/nds/sysutils.pp b/rtl/nds/sysutils.pp index 66b4eb7f3e..9a37d6f998 100644 --- a/rtl/nds/sysutils.pp +++ b/rtl/nds/sysutils.pp @@ -69,7 +69,13 @@ begin 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 result := -1; end; diff --git a/rtl/netware/sysutils.pp b/rtl/netware/sysutils.pp index 01361cf1ca..77096b2bb4 100644 --- a/rtl/netware/sysutils.pp +++ b/rtl/netware/sysutils.pp @@ -106,7 +106,14 @@ begin FileCreate:=_open(Pchar(FileName),O_RdWr or O_Creat or O_Trunc,0); 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 FileCreate:=FileCreate (FileName); diff --git a/rtl/netwlibc/sysutils.pp b/rtl/netwlibc/sysutils.pp index 71f0bc4ef7..20d618a4c3 100644 --- a/rtl/netwlibc/sysutils.pp +++ b/rtl/netwlibc/sysutils.pp @@ -109,7 +109,13 @@ begin FileSetAttr (Filename, 0); // dont know why but open always sets ReadOnly flag 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 FileCreate:=FileCreate (FileName); end; diff --git a/rtl/objpas/classes/classesh.inc b/rtl/objpas/classes/classesh.inc index a33117ebd0..ec6b73d6ff 100644 --- a/rtl/objpas/classes/classesh.inc +++ b/rtl/objpas/classes/classesh.inc @@ -73,7 +73,7 @@ const { TFileStream create mode } const - fmCreate = $FFFF; + fmCreate = $FF00; fmOpenRead = 0; fmOpenWrite = 1; fmOpenReadWrite = 2; diff --git a/rtl/objpas/classes/streams.inc b/rtl/objpas/classes/streams.inc index c3c139b7da..b7944af851 100644 --- a/rtl/objpas/classes/streams.inc +++ b/rtl/objpas/classes/streams.inc @@ -476,8 +476,8 @@ constructor TFileStream.Create(const AFileName: string; Mode: Word); begin FFileName:=AFileName; - If Mode=fmcreate then - FHandle:=FileCreate(AFileName) + If (Mode and fmCreate) > 0 then + FHandle:=FileCreate(AFileName,Mode) else FHAndle:=FileOpen(AFileName,Mode); @@ -493,8 +493,8 @@ constructor TFileStream.Create(const AFileName: string; Mode: Word; Rights: Card begin FFileName:=AFileName; - If Mode=fmcreate then - FHandle:=FileCreate(AFileName,Rights) + If (Mode and fmCreate) > 0 then + FHandle:=FileCreate(AFileName,Mode,Rights) else FHAndle:=FileOpen(AFileName,Mode); diff --git a/rtl/objpas/sysutils/filutilh.inc b/rtl/objpas/sysutils/filutilh.inc index bf98320bb4..fef670004f 100644 --- a/rtl/objpas/sysutils/filutilh.inc +++ b/rtl/objpas/sysutils/filutilh.inc @@ -73,7 +73,8 @@ Const Function FileOpen (Const FileName : string; Mode : Integer) : 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 FileWrite (Handle : THandle; const Buffer; Count : Longint) : Longint; Function FileSeek (Handle : THandle; FOffset, Origin: Longint) : Longint; diff --git a/rtl/os2/sysutils.pp b/rtl/os2/sysutils.pp index 181ccf25ae..1fef40a43a 100644 --- a/rtl/os2/sysutils.pp +++ b/rtl/os2/sysutils.pp @@ -510,11 +510,16 @@ Begin FileCreate:=feInvalidHandle; End; -function FileCreate (const FileName: string; Mode: integer): THandle; +function FileCreate (const FileName: string; Rights: integer): THandle; begin FileCreate := FileCreate(FileName); 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; Var diff --git a/rtl/unix/sysutils.pp b/rtl/unix/sysutils.pp index 34d9d99b2d..cb56f95d3f 100644 --- a/rtl/unix/sysutils.pp +++ b/rtl/unix/sysutils.pp @@ -442,14 +442,21 @@ begin end; -Function FileCreate (Const FileName : String;Mode : Longint) : Longint; +Function FileCreate (Const FileName : String;Rights : Longint) : Longint; begin 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); 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; diff --git a/rtl/watcom/sysutils.pp b/rtl/watcom/sysutils.pp index 3c93ba5e4d..92c039e422 100644 --- a/rtl/watcom/sysutils.pp +++ b/rtl/watcom/sysutils.pp @@ -135,7 +135,12 @@ begin 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 FileCreate:=FileCreate(FileName); end; diff --git a/rtl/wii/sysutils.pp b/rtl/wii/sysutils.pp index 184e01a5f1..0ebb1797ca 100644 --- a/rtl/wii/sysutils.pp +++ b/rtl/wii/sysutils.pp @@ -69,7 +69,12 @@ begin 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 result := -1; end; diff --git a/rtl/win/sysutils.pp b/rtl/win/sysutils.pp index 5ba35eb4fa..ca40c0cec5 100644 --- a/rtl/win/sysutils.pp +++ b/rtl/win/sysutils.pp @@ -213,38 +213,41 @@ end; File Functions ****************************************************************************} -Function FileOpen (Const FileName : string; Mode : Integer) : THandle; const AccessMode: array[0..2] of Cardinal = ( GENERIC_READ, GENERIC_WRITE, GENERIC_READ or GENERIC_WRITE); - ShareMode: array[0..4] of Integer = ( + ShareModes: array[0..4] of Integer = ( 0, 0, FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE); + +Function FileOpen (Const FileName : string; Mode : Integer) : THandle; begin 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); //if fail api return feInvalidHandle (INVALIDE_HANDLE=feInvalidHandle=-1) end; - Function FileCreate (Const FileName : String) : THandle; begin - Result := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, - 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); + FileCreate:=FileCreate(FileName, fmShareExclusive); end; - -Function FileCreate (Const FileName : String; Mode:longint) : THandle; +Function FileCreate (Const FileName : String; Rights:longint) : THandle; begin - FileCreate:=FileCreate(FileName); + FileCreate:=FileCreate(FileName, Mode, 0); 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; Var diff --git a/rtl/wince/sysutils.pp b/rtl/wince/sysutils.pp index 129aef56c3..ca9af81492 100644 --- a/rtl/wince/sysutils.pp +++ b/rtl/wince/sysutils.pp @@ -165,7 +165,13 @@ begin 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 FileCreate:=FileCreate(FileName); end;