Răsfoiți Sursa

+ implemented do_read for WASI

git-svn-id: branches/wasm@48307 -
nickysn 4 ani în urmă
părinte
comite
d6038c5709
2 a modificat fișierele cu 17 adăugiri și 1 ștergeri
  1. 7 1
      rtl/wasi/sysfile.inc
  2. 10 0
      rtl/wasi/system.pp

+ 7 - 1
rtl/wasi/sysfile.inc

@@ -45,8 +45,14 @@ begin
 end;
 
 function Do_Read(Handle:thandle;Addr:Pointer;Len:Longint):Longint;
+var
+  our_iov: __wasi_iovec_t;
+  our_nread: __wasi_size_t;
 begin
-  DebugWriteLn('Do_Read');
+  our_iov.buf:=Addr;
+  our_iov.buf_len:=Len;
+  fd_read(Handle,@our_iov,1,@our_nread);
+  Do_Read:=our_nread;
 end;
 
 function Do_FilePos(Handle: thandle):Int64;

+ 10 - 0
rtl/wasi/system.pp

@@ -50,6 +50,12 @@ type
   size_t = longint;
   __wasi_errno_t = longint;
 
+  P__wasi_iovec_t = ^__wasi_iovec_t;
+  __wasi_iovec_t = record
+    buf: PUInt8;
+    buf_len: __wasi_size_t;
+  end;
+
   P__wasi_ciovec_t = ^__wasi_ciovec_t;
   __wasi_ciovec_t = record
     buf: pointer;
@@ -62,6 +68,10 @@ function fd_write(fd: __wasi_fd_t;
                   iovs: P__wasi_ciovec_t;
                   iovs_len: size_t;
                   nwritten: P__wasi_size_t): __wasi_errno_t; external 'wasi_snapshot_preview1';
+function fd_read(fd: __wasi_fd_t;
+                 iovs: P__wasi_iovec_t;
+                 iovs_len: size_t;
+                 nread: P__wasi_size_t): __wasi_errno_t; external 'wasi_snapshot_preview1';
 procedure proc_exit(rval: __wasi_exitcode_t); noreturn; external 'wasi_snapshot_preview1';
 
 {$I system.inc}