Browse Source

+ implemented SysUtils.FileRead for WASI

Nikolay Nikolov 3 years ago
parent
commit
977b2f2a4b
1 changed files with 13 additions and 0 deletions
  1. 13 0
      rtl/wasi/sysutils.pp

+ 13 - 0
rtl/wasi/sysutils.pp

@@ -201,7 +201,20 @@ end;
 
 
 
 
 Function FileRead (Handle : THandle; Out Buffer; Count : longint) : Longint;
 Function FileRead (Handle : THandle; Out Buffer; Count : longint) : Longint;
+var
+  our_iov: __wasi_iovec_t;
+  our_nread: __wasi_size_t;
+  res: __wasi_errno_t;
 begin
 begin
+  repeat
+    our_iov.buf:=@Buffer;
+    our_iov.buf_len:=Count;
+    res:=__wasi_fd_read(Handle,@our_iov,1,@our_nread);
+  until (res=__WASI_ERRNO_SUCCESS) or ((res<>__WASI_ERRNO_INTR) and (res<>__WASI_ERRNO_AGAIN));
+  if res=__WASI_ERRNO_SUCCESS then
+    Result:=our_nread
+  else
+    Result:=-1;
 end;
 end;