mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 07:09:29 +02:00
+ initial implementation of path dependent IsFileNameCaseSensitive/IsFileNameCasePreserving functions for darwin
git-svn-id: trunk@49164 -
This commit is contained in:
parent
ad66a19666
commit
c1f85ac3a1
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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
|
||||
|
@ -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}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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';
|
||||
|
||||
|
@ -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
|
||||
****************************************************************************}
|
||||
|
@ -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));
|
||||
|
29
tests/test/units/sysutils/tfilenamecase1.pp
Normal file
29
tests/test/units/sysutils/tfilenamecase1.pp
Normal 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.
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user