+ initial implementation of path dependent IsFileNameCaseSensitive/IsFileNameCasePreserving functions for darwin

git-svn-id: trunk@49164 -
This commit is contained in:
florian 2021-04-10 13:29:59 +00:00
parent ad66a19666
commit c1f85ac3a1
7 changed files with 107 additions and 0 deletions

1
.gitattributes vendored
View File

@ -16346,6 +16346,7 @@ tests/test/units/sysutils/tfile1.pp svneol=native#text/plain
tests/test/units/sysutils/tfile2.pp svneol=native#text/plain
tests/test/units/sysutils/tfileage.pp svneol=native#text/pascal
tests/test/units/sysutils/tfilename.pp svneol=native#text/plain
tests/test/units/sysutils/tfilenamecase1.pp svneol=native#text/pascal
tests/test/units/sysutils/tfloattostr.pp svneol=native#text/plain
tests/test/units/sysutils/tformat.pp svneol=native#text/plain
tests/test/units/sysutils/tinttohex.pp svneol=native#text/pascal

View File

@ -875,3 +875,28 @@ Function FileSetDateUTC (Const FileName : RawByteString;const FileDateTimeUTC :
begin
Result:=FileSetDateUTC(UnicodeString(FileName),FileDateTimeUTC);
end;
{$IFNDEF HAS_ISFILENAMECASESENSITIVE}
Function IsFileNameCaseSensitive(Const aFileName : RawByteString) : Boolean;
begin
Result:=FileNameCaseSensitive;
end;
Function IsFileNameCaseSensitive(Const aFileName : UnicodeString) : Boolean;
begin
Result:=FileNameCaseSensitive;
end;
{$ENDIF HAS_ISFILENAMECASESENSITIVE}
{$IFNDEF HAS_ISFILENAMECASEPRESERVING}
Function IsFileNameCasePreserving(Const aFileName : RawByteString) : Boolean;
begin
Result:=FileNameCasePreserving;
end;
Function IsFileNameCasePreserving(Const aFileName : UnicodeString) : Boolean;
begin
Result:=FileNameCasePreserving;
end;
{$ENDIF HAS_ISFILENAMECASEPRESERVING}

View File

@ -252,3 +252,9 @@ Function GetFileAsString(Const aFileName : RawByteString; aEncoding : TEncoding)
Function GetFileAsString(Const aFileName : UnicodeString) : UnicodeString;
Function GetFileAsString(Const aFileName : UnicodeString; aEncoding : TEncoding) : UnicodeString;
Function IsFileNameCaseSensitive(Const aFileName : RawByteString) : Boolean;
Function IsFileNameCaseSensitive(Const aFileName : UnicodeString) : Boolean;
Function IsFileNameCasePreserving(Const aFileName : RawByteString) : Boolean;
Function IsFileNameCasePreserving(Const aFileName : UnicodeString) : Boolean;

View File

@ -183,3 +183,5 @@ const
{$if defined(linux)}
function FpSchedGetAffinity(pid : pid_t;cpusetsize : size_t;mask : pcpu_set_t) : cint; cdecl; external clib name 'sched_getaffinity';
{$endif}
Function FpPathconf(path : pchar;name : cint) : clong; cdecl; external clib name 'pathconf';

View File

@ -55,6 +55,11 @@ uses
{$DEFINE HAVECLOCKGETTIME}
{$ENDIF}
{$IF defined(DARWIN)}
{$DEFINE HAS_ISFILENAMECASEPRESERVING}
{$DEFINE HAS_ISFILENAMECASESENSITIVE}
{$ENDIF}
{$if defined(LINUX)}
{$if sizeof(clong)<8}
{$DEFINE USE_STATX}
@ -1196,6 +1201,42 @@ begin
end
end;
{$IF defined(DARWIN)}
Function IsFileNameCaseSensitive(Const aFileName : RawByteString) : Boolean;
var
res : clong;
begin
res:=FpPathconf(PChar(aFileName),11 {_PC_CASE_SENSITIVE });
{ fall back to default if path is not found }
if res<0 then
Result:=FileNameCaseSensitive
else
Result:=res<>0;
end;
Function IsFileNameCaseSensitive(Const aFileName : UnicodeString) : Boolean;
begin
Result:=IsFileNameCaseSensitive(RawByteString(aFileName));
end;
Function IsFileNameCasePreserving(Const aFileName : RawByteString) : Boolean;
var
res : clong;
begin
res:=FpPathconf(PChar(aFileName),12 { _PC_CASE_PRESERVING });
if res<0 then
{ fall back to default if path is not found }
Result:=FileNameCasePreserving
else
Result:=res<>0;
end;
Function IsFileNameCasePreserving(Const aFileName : UnicodeString) : Boolean;
begin
Result:=IsFileNameCasePreserving(RawByteString(aFileName));
end;
{$ENDIF defined(DARWIN)}
{****************************************************************************
Disk Functions
****************************************************************************}

View File

@ -116,6 +116,9 @@ begin
{$IFDEF DEBUG}
{$IFDEF FPC}
WriteLn ('FileNameCaseSensitive = ', FileNameCaseSensitive);
WriteLn ('IsFileNameCaseSensitive('''+TempDir+''') = ', IsFileNameCaseSensitive(TempDir));
Writeln('Setting FileNameCaseSensitive to result of IsFileNameCaseSensitive('''+TempDir+''');');
FileNameCaseSensitive:=IsFileNameCaseSensitive(TempDir);
{$ENDIF FPC}
WriteLn ('TempDir = ', TempDir);
WriteLn ('SetCurrentDir result = ', SetCurrentDir (TempDir));

View File

@ -0,0 +1,29 @@
uses
Sysutils;
var
f : file;
Begin
Writeln('IsFileNameCaseSensitive: ',IsFileNameCaseSensitive('tfilenamecase1.dat'));
Writeln('IsFileNameCasePreserving ',IsFileNameCasePreserving('tfilenamecase1.dat'));
Assign(f,'tfilenamecase1.dat');
Rewrite(f);
Close(f);
if IsFileNameCaseSensitive('tfilenamecase1.dat') then
begin
if FileExists('Tfilenamecase1.dat') then
halt(1);
end
else
begin
if not(FileExists('Tfilenamecase1.dat')) then
halt(2);
end;
if IsFileNameCasePreserving('tfilenamecase1.dat') then
begin
if not(FileExists('Tfilenamecase1.dat')) then
halt(1);
end;
End.