38 lines
		
	
	
		
			828 B
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			828 B
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| unit uMyUnix;
 | |
| {$mode objfpc}{$H+}
 | |
| {$packrecords c}
 | |
| 
 | |
| {$IF NOT DEFINED(LINUX)}
 | |
| {$DEFINE FPC_USE_LIBC}
 | |
| {$ENDIF}
 | |
| interface
 | |
| uses
 | |
|   Classes, SysUtils, BaseUnix, CTypes, uDrive;
 | |
| function fpSystemStatus(Command: string): cint;
 | |
| function EjectDrive(Drive: PDrive): Boolean;
 | |
| implementation
 | |
| 
 | |
| uses
 | |
|   URIParser, Unix, Process, LazUTF8
 | |
| {$IF (NOT DEFINED(FPC_USE_LIBC)) or (DEFINED(BSD) AND NOT DEFINED(DARWIN))}
 | |
|   , SysCall
 | |
| {$ENDIF}
 | |
| ;
 | |
| 
 | |
| function fpSystemStatus(Command: string): cint;
 | |
| begin
 | |
|   Result := fpSystem(UTF8ToSys(Command));
 | |
|   if wifexited(Result) then
 | |
|     Result := wexitStatus(Result);
 | |
| end;
 | |
| 
 | |
| function EjectDrive(Drive: PDrive): Boolean;
 | |
| begin
 | |
| {$IF DEFINED(DARWIN)}
 | |
|   Result := fpSystemStatus('diskutil eject ' + Drive^.DeviceId) = 0;
 | |
|   if not Result then
 | |
| {$ENDIF}
 | |
|   Result := fpSystemStatus('eject ' + Drive^.DeviceId) = 0;
 | |
| end;
 | |
| end.
 |