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/tfile2.pp svneol=native#text/plain
 | 
				
			||||||
tests/test/units/sysutils/tfileage.pp svneol=native#text/pascal
 | 
					tests/test/units/sysutils/tfileage.pp svneol=native#text/pascal
 | 
				
			||||||
tests/test/units/sysutils/tfilename.pp svneol=native#text/plain
 | 
					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/tfloattostr.pp svneol=native#text/plain
 | 
				
			||||||
tests/test/units/sysutils/tformat.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
 | 
					tests/test/units/sysutils/tinttohex.pp svneol=native#text/pascal
 | 
				
			||||||
 | 
				
			|||||||
@ -875,3 +875,28 @@ Function FileSetDateUTC (Const FileName : RawByteString;const FileDateTimeUTC :
 | 
				
			|||||||
begin
 | 
					begin
 | 
				
			||||||
  Result:=FileSetDateUTC(UnicodeString(FileName),FileDateTimeUTC);
 | 
					  Result:=FileSetDateUTC(UnicodeString(FileName),FileDateTimeUTC);
 | 
				
			||||||
end;
 | 
					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) : UnicodeString;
 | 
				
			||||||
Function GetFileAsString(Const aFileName : UnicodeString; aEncoding : TEncoding) : 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)}
 | 
					{$if defined(linux)}
 | 
				
			||||||
    function  FpSchedGetAffinity(pid : pid_t;cpusetsize : size_t;mask : pcpu_set_t) : cint; cdecl; external clib name 'sched_getaffinity';
 | 
					    function  FpSchedGetAffinity(pid : pid_t;cpusetsize : size_t;mask : pcpu_set_t) : cint; cdecl; external clib name 'sched_getaffinity';
 | 
				
			||||||
{$endif}
 | 
					{$endif}
 | 
				
			||||||
 | 
					    Function FpPathconf(path : pchar;name : cint) : clong; cdecl; external clib name 'pathconf';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -55,6 +55,11 @@ uses
 | 
				
			|||||||
{$DEFINE HAVECLOCKGETTIME}
 | 
					{$DEFINE HAVECLOCKGETTIME}
 | 
				
			||||||
{$ENDIF}
 | 
					{$ENDIF}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{$IF defined(DARWIN)}
 | 
				
			||||||
 | 
					{$DEFINE HAS_ISFILENAMECASEPRESERVING}
 | 
				
			||||||
 | 
					{$DEFINE HAS_ISFILENAMECASESENSITIVE}
 | 
				
			||||||
 | 
					{$ENDIF}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{$if defined(LINUX)}
 | 
					{$if defined(LINUX)}
 | 
				
			||||||
  {$if sizeof(clong)<8}
 | 
					  {$if sizeof(clong)<8}
 | 
				
			||||||
    {$DEFINE USE_STATX}
 | 
					    {$DEFINE USE_STATX}
 | 
				
			||||||
@ -1196,6 +1201,42 @@ begin
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
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
 | 
					                              Disk Functions
 | 
				
			||||||
****************************************************************************}
 | 
					****************************************************************************}
 | 
				
			||||||
 | 
				
			|||||||
@ -116,6 +116,9 @@ begin
 | 
				
			|||||||
{$IFDEF DEBUG}
 | 
					{$IFDEF DEBUG}
 | 
				
			||||||
 {$IFDEF FPC}
 | 
					 {$IFDEF FPC}
 | 
				
			||||||
  WriteLn ('FileNameCaseSensitive = ', FileNameCaseSensitive);
 | 
					  WriteLn ('FileNameCaseSensitive = ', FileNameCaseSensitive);
 | 
				
			||||||
 | 
					  WriteLn ('IsFileNameCaseSensitive('''+TempDir+''') = ', IsFileNameCaseSensitive(TempDir));
 | 
				
			||||||
 | 
					  Writeln('Setting FileNameCaseSensitive to result of IsFileNameCaseSensitive('''+TempDir+''');');
 | 
				
			||||||
 | 
					  FileNameCaseSensitive:=IsFileNameCaseSensitive(TempDir);
 | 
				
			||||||
 {$ENDIF FPC}
 | 
					 {$ENDIF FPC}
 | 
				
			||||||
  WriteLn ('TempDir = ', TempDir);
 | 
					  WriteLn ('TempDir = ', TempDir);
 | 
				
			||||||
  WriteLn ('SetCurrentDir result = ', SetCurrentDir (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