Browse Source

* Added share mode argument to FileCreate call

git-svn-id: trunk@17548 -
michael 14 years ago
parent
commit
a201f07420

+ 7 - 1
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);

+ 6 - 1
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;

+ 7 - 1
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;

+ 7 - 1
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;

+ 17 - 1
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;
 

+ 7 - 1
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);

+ 7 - 1
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;

+ 7 - 1
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;

+ 8 - 1
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);

+ 7 - 1
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;

+ 1 - 1
rtl/objpas/classes/classesh.inc

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

+ 4 - 4
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);
 

+ 2 - 1
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;

+ 6 - 1
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

+ 9 - 2
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;
 

+ 6 - 1
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;

+ 6 - 1
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;

+ 12 - 9
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

+ 7 - 1
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;