[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [PATCH 3/5] Pascal-RTL: DirectoryExists



On Sun, Oct 26 15:51, Kevin Wolf wrote:
> + Pascal-RTL: sysutils.DirectoryExists
> ! Pascal-RTL: sysutils.FileExists gibt auch bei Verzeichnissen true zurueck
> ---
>  src/modules/pas/lib/rtl/sysutils.pp |   26 +++++++++++++++++++++++++-
>  1 files changed, 25 insertions(+), 1 deletions(-)
> 
> diff --git a/src/modules/pas/lib/rtl/sysutils.pp b/src/modules/pas/lib/rtl/sysutils.pp
> index a106650..f4fd8fc 100644
> --- a/src/modules/pas/lib/rtl/sysutils.pp
> +++ b/src/modules/pas/lib/rtl/sysutils.pp
> @@ -48,6 +48,22 @@ function c_fseek(f: longint; offset, whence: longint): longint; cdecl; external
>  
>  function c_feof(f: longint): boolean; cdecl; external name 'feof';
>  
> +type
> +    DirEntry = record
> +        name:   array [1..32] of char;
> +        ftype:  byte;
> +        size:   qword;
> +
> +        ctime,
> +        mtime,
> +        atime:  qword;
> +    end;
> +    PDirEntry = ^DirEntry;
> +
> +function c_directory_open(dirname: PChar): Pointer; cdecl; external name 'directory_open';
> +function c_directory_close(handle: Pointer): longint; cdecl; external name 'directory_close';
> +function c_directory_read(handle: Pointer): PDirEntry; cdecl; external name 'directory_read';

Gibts in der Datei noch Verzeichnisfunktionen die man implementieren
müsste, oder warum muss das da rein?

> +
>  
>  function FileOpen(const filename: String; mode: Integer): LongInt;
>  var
> @@ -101,6 +117,8 @@ begin
>      FileExists := handle <> -1;
>      if FileExists then begin
>          FileClose(handle);
> +    end else begin
> +        FileExists := DirectoryExists(FileName);
>      end;
>  end;
>  
> @@ -196,8 +214,14 @@ begin
>  end;    
>  
>  function DirectoryExists(const directory: AnsiString):Boolean;
> +var
> +    handle: Pointer;
>  begin
> -    Result := true; // FIXME
> +    handle := c_directory_open(@directory[1]);

Wenn AnsiStrings nullterminiert sind, bin ich einverstanden. ;-)

> +    DirectoryExists := (handle <> nil);
> +    if DirectoryExists then begin
> +        c_directory_close(handle);
> +    end;
>  end;
>  
>  function FindFirst(const path: AnsiString; attr: LongInt;out rslt: TSearchRec):LongInt;

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgpPSHmel2itG.pgp
Description: PGP signature