|
@@ -25,78 +25,66 @@
|
|
|
{ close a file from the handle value }
|
|
|
procedure do_close(handle: THandle);
|
|
|
begin
|
|
|
- if FileIODevice.FileIO.DoClose <> nil then
|
|
|
- FileIODevice.FileIO.DoClose(handle);
|
|
|
- //_fclose (_PFILE(pointer(handle))^);
|
|
|
+ fclose(P_FILE(Handle));
|
|
|
end;
|
|
|
|
|
|
procedure do_erase(p: pchar);
|
|
|
begin
|
|
|
- if FileIODevice.FileIO.DoErase <> nil then
|
|
|
- FileIODevice.FileIO.DoErase(p);
|
|
|
-// _unlink(p);
|
|
|
+ unlink(p);
|
|
|
end;
|
|
|
|
|
|
procedure do_rename(p1, p2: pchar);
|
|
|
begin
|
|
|
-// _rename(p1, p2);
|
|
|
- if FileIODevice.FileIO.DoRename <> nil then
|
|
|
- FileIODevice.FileIO.DoRename(p1, p2);
|
|
|
+ rename(p1, p2);
|
|
|
end;
|
|
|
|
|
|
function do_write(h: THandle; addr: pointer; len: longint) : longint;
|
|
|
begin
|
|
|
-// result := _fwrite(addr, 1, len, _PFILE(pointer(h))^);
|
|
|
- if FileIODevice.FileIO.DoWrite <> nil then
|
|
|
- result := FileIODevice.FileIO.DoWrite(h, addr, len);
|
|
|
+ result := fwrite(addr, 1, len, P_FILE(h));
|
|
|
end;
|
|
|
|
|
|
function do_read(h: THandle; addr: pointer; len: longint) : longint;
|
|
|
begin
|
|
|
-// result := _fread(addr, 1, len, _PFILE(pointer(h))^);
|
|
|
- if FileIODevice.FileIO.DoRead <> nil then
|
|
|
- result := FileIODevice.FileIO.DoRead(h, addr, len);
|
|
|
+ result := fread(addr, 1, len, P_FILE(h));
|
|
|
end;
|
|
|
|
|
|
function do_filepos(handle: THandle): longint;
|
|
|
begin
|
|
|
-// result := _ftell(_PFILE(pointer(handle))^);
|
|
|
- if FileIODevice.FileIO.DoFilePos <> nil then
|
|
|
- result := FileIODevice.FileIO.DoFilePos(handle);
|
|
|
+ result := ftell(P_FILE(handle));
|
|
|
end;
|
|
|
|
|
|
procedure do_seek(handle: THandle; pos: longint);
|
|
|
begin
|
|
|
- //_fseek(_PFILE(pointer(handle))^, pos, SEEK_SET);
|
|
|
- if FileIODevice.FileIO.DoSeek <> nil then
|
|
|
- FileIODevice.FileIO.DoSeek(handle, pos);
|
|
|
+ fseek(P_FILE(handle), pos, SEEK_SET);
|
|
|
end;
|
|
|
|
|
|
function do_seekend(handle: THandle): longint;
|
|
|
begin
|
|
|
-// result := _fseek(_PFILE(pointer(handle))^, 0, SEEK_END);
|
|
|
- if FileIODevice.FileIO.DoSeekend <> nil then
|
|
|
- result := FileIODevice.FileIO.DoSeekend(handle);
|
|
|
+ result := fseek(P_FILE(handle), 0, SEEK_END);
|
|
|
end;
|
|
|
|
|
|
function do_filesize(handle: THandle): longint;
|
|
|
+var
|
|
|
+ res : LONGINT;
|
|
|
+ statbuf : TStat;
|
|
|
begin
|
|
|
-// result := -1;
|
|
|
- if FileIODevice.FileIO.DoFilesize <> nil then
|
|
|
- result := FileIODevice.FileIO.DoFilesize(handle);
|
|
|
+ res := fstat(fileno(P_FILE(handle)), statbuf);
|
|
|
+ if res = 0 then
|
|
|
+ result := statbuf.st_size
|
|
|
+ else
|
|
|
+ result := -1;
|
|
|
end;
|
|
|
|
|
|
{ truncate at a given position }
|
|
|
procedure do_truncate(handle: THandle; pos: longint);
|
|
|
begin
|
|
|
-// _ftruncate(_fileno(_PFILE(pointer(handle))^), pos);
|
|
|
- if FileIODevice.FileIO.DoTruncate <> nil then
|
|
|
- FileIODevice.FileIO.DoTruncate(handle, pos);
|
|
|
+ ftruncate(fileno(P_FILE(handle)), pos);
|
|
|
end;
|
|
|
|
|
|
procedure do_open(var f; p: pchar; flags: longint);
|
|
|
+var
|
|
|
+ oflags : string[10];
|
|
|
begin
|
|
|
-(*
|
|
|
{ close first if opened }
|
|
|
if ((flags and $10000) = 0) then
|
|
|
begin
|
|
@@ -105,7 +93,7 @@ begin
|
|
|
fmclosed : ;
|
|
|
else
|
|
|
begin
|
|
|
-// inoutres:=102; {not assigned}
|
|
|
+ inoutres:=102; {not assigned}
|
|
|
exit;
|
|
|
end;
|
|
|
end;
|
|
@@ -137,43 +125,44 @@ begin
|
|
|
else
|
|
|
if (flags and $100)=$100 then
|
|
|
oflags:=oflags or (O_APPEND);}
|
|
|
-
|
|
|
{ empty name is special }
|
|
|
if p[0]=#0 then
|
|
|
- begin
|
|
|
- case FileRec(f).mode of
|
|
|
- fminput: FileRec(f).Handle:=StdInputHandle;
|
|
|
- fminout, { this is set by rewrite }
|
|
|
- fmoutput: FileRec(f).Handle:=StdOutputHandle;
|
|
|
- fmappend:
|
|
|
- begin
|
|
|
- FileRec(f).Handle:=StdOutputHandle;
|
|
|
- FileRec(f).mode:=fmoutput; {fool fmappend}
|
|
|
- end;
|
|
|
- end;
|
|
|
- exit;
|
|
|
- end;
|
|
|
-
|
|
|
+ begin
|
|
|
+ case FileRec(f).mode of
|
|
|
+ fminput :
|
|
|
+ FileRec(f).Handle:=StdInputHandle;
|
|
|
+ fminout, { this is set by rewrite }
|
|
|
+ fmoutput :
|
|
|
+ FileRec(f).Handle:=StdOutputHandle;
|
|
|
+ fmappend :
|
|
|
+ begin
|
|
|
+ FileRec(f).Handle:=StdOutputHandle;
|
|
|
+ FileRec(f).mode:=fmoutput; {fool fmappend}
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ exit;
|
|
|
+ end;
|
|
|
{ real open call }
|
|
|
- FileRec(f).Handle := longint(fopen(p, @oflags[1]));//_open(p,oflags,438);
|
|
|
+ FileRec(f).Handle := THandle(fopen(p, @oflags[1]));//_open(p,oflags,438);
|
|
|
+ //WriteLn ('_open (',p,') returned ',ErrNo, 'Handle: ',FileRec(f).Handle);
|
|
|
// errno does not seem to be set on succsess ??
|
|
|
+ {IF FileRec(f).Handle < 0 THEN
|
|
|
+ if (ErrNo=Sys_EROFS) and ((OFlags and O_RDWR)<>0) then
|
|
|
+ begin // i.e. for cd-rom
|
|
|
+ Oflags:=Oflags and not(O_RDWR);
|
|
|
+ FileRec(f).Handle := _open(p,oflags,438);
|
|
|
+ end;}
|
|
|
{
|
|
|
if FileRec(f).Handle = 0 then
|
|
|
Errno2Inoutres
|
|
|
else
|
|
|
InOutRes := 0;
|
|
|
}
|
|
|
-*)
|
|
|
-// FileRec(f).Handle := THandle (_fopen(p, @oflags[1]));
|
|
|
- if FileIODevice.FileIO.DoOpen <> nil then
|
|
|
- FileIODevice.FileIO.DoOpen(f, p, flags);
|
|
|
end;
|
|
|
|
|
|
function do_isdevice(handle: THandle): boolean;
|
|
|
begin
|
|
|
-// result := (_isatty(_fileno(_PFILE(pointer(handle))^)) > 0);
|
|
|
- if FileIODevice.FileIO.DoIsdevice <> nil then
|
|
|
- result := FileIODevice.FileIO.DoIsdevice(handle);
|
|
|
+ result := (isatty(fileno(P_FILE(handle))) > 0);
|
|
|
end;
|
|
|
|
|
|
|