mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 09:39:32 +01: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