Browse Source

+ implemented do_isdevice for WASI

git-svn-id: branches/wasm@48308 -
nickysn 4 years ago
parent
commit
9b173ac119
2 changed files with 71 additions and 0 deletions
  1. 4 0
      rtl/wasi/sysos.inc
  2. 67 0
      rtl/wasi/system.pp

+ 4 - 0
rtl/wasi/sysos.inc

@@ -37,5 +37,9 @@ end;}
 *****************************************************************************}
 
 function Do_IsDevice(Handle:THandle):boolean;
+var
+  ourfdstat: __wasi_fdstat_t;
 begin
+  fd_fdstat_get(Handle,@ourfdstat);
+  Do_IsDevice:=ourfdstat.fs_filetype in [__WASI_FILETYPE_BLOCK_DEVICE,__WASI_FILETYPE_CHARACTER_DEVICE];
 end;

+ 67 - 0
rtl/wasi/system.pp

@@ -64,6 +64,71 @@ type
 
   __wasi_exitcode_t = UInt32;
 
+  __wasi_filetype_t = UInt8;
+
+const
+  __WASI_FILETYPE_UNKNOWN          = 0;
+  __WASI_FILETYPE_BLOCK_DEVICE     = 1;
+  __WASI_FILETYPE_CHARACTER_DEVICE = 2;
+  __WASI_FILETYPE_DIRECTORY        = 3;
+  __WASI_FILETYPE_REGULAR_FILE     = 4;
+  __WASI_FILETYPE_SOCKET_DGRAM     = 5;
+  __WASI_FILETYPE_SOCKET_STREAM    = 6;
+  __WASI_FILETYPE_SYMBOLIC_LINK    = 7;
+
+type
+  __wasi_fdflags_t = UInt16;
+
+const
+  __WASI_FDFLAGS_APPEND   = 1;
+  __WASI_FDFLAGS_DSYNC    = 2;
+  __WASI_FDFLAGS_NONBLOCK = 4;
+  __WASI_FDFLAGS_RSYNC    = 8;
+  __WASI_FDFLAGS_SYNC     = 16;
+
+type
+  __wasi_rights_t = UInt64;
+
+const
+  __WASI_RIGHTS_FD_DATASYNC             = 1;
+  __WASI_RIGHTS_FD_READ                 = 2;
+  __WASI_RIGHTS_FD_SEEK                 = 4;
+  __WASI_RIGHTS_FD_FDSTAT_SET_FLAGS     = 8;
+  __WASI_RIGHTS_FD_SYNC                 = 16;
+  __WASI_RIGHTS_FD_TELL                 = 32;
+  __WASI_RIGHTS_FD_WRITE                = 64;
+  __WASI_RIGHTS_FD_ADVISE               = 128;
+  __WASI_RIGHTS_FD_ALLOCATE             = 256;
+  __WASI_RIGHTS_PATH_CREATE_DIRECTORY   = 512;
+  __WASI_RIGHTS_PATH_CREATE_FILE        = 1024;
+  __WASI_RIGHTS_PATH_LINK_SOURCE        = 2048;
+  __WASI_RIGHTS_PATH_LINK_TARGET        = 4096;
+  __WASI_RIGHTS_PATH_OPEN               = 8192;
+  __WASI_RIGHTS_FD_READDIR              = 16384;
+  __WASI_RIGHTS_PATH_READLINK           = 32768;
+  __WASI_RIGHTS_PATH_RENAME_SOURCE      = 65536;
+  __WASI_RIGHTS_PATH_RENAME_TARGET      = 131072;
+  __WASI_RIGHTS_PATH_FILESTAT_GET       = 262144;
+  __WASI_RIGHTS_PATH_FILESTAT_SET_SIZE  = 524288;
+  __WASI_RIGHTS_PATH_FILESTAT_SET_TIMES = 1048576;
+  __WASI_RIGHTS_FD_FILESTAT_GET         = 2097152;
+  __WASI_RIGHTS_FD_FILESTAT_SET_SIZE    = 4194304;
+  __WASI_RIGHTS_FD_FILESTAT_SET_TIMES   = 8388608;
+  __WASI_RIGHTS_PATH_SYMLINK            = 16777216;
+  __WASI_RIGHTS_PATH_REMOVE_DIRECTORY   = 33554432;
+  __WASI_RIGHTS_PATH_UNLINK_FILE        = 67108864;
+  __WASI_RIGHTS_POLL_FD_READWRITE       = 134217728;
+  __WASI_RIGHTS_SOCK_SHUTDOWN           = 268435456;
+
+type
+  P__wasi_fdstat_t = ^__wasi_fdstat_t;
+  __wasi_fdstat_t = record
+    fs_filetype: __wasi_filetype_t;
+    fs_flags: __wasi_fdflags_t;
+    fs_rights_base: __wasi_rights_t;
+    fs_rights_inheriting: __wasi_rights_t;
+  end;
+
 function fd_write(fd: __wasi_fd_t;
                   iovs: P__wasi_ciovec_t;
                   iovs_len: size_t;
@@ -73,6 +138,8 @@ function fd_read(fd: __wasi_fd_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';
+function fd_fdstat_get(fd: __wasi_fd_t;
+                       stat: P__wasi_fdstat_t): __wasi_errno_t; external 'wasi_snapshot_preview1';
 
 {$I system.inc}