Skip to content

Commit 1243e5e

Browse files
committed
add __WASI_FILETYPE_FIFO type
snapshot_preview2 added support for FIFO types. Prior to this, FIFOs were treated as sockets and unknown files. Refs: #59
1 parent 909a340 commit 1243e5e

File tree

6 files changed

+20
-1
lines changed

6 files changed

+20
-1
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1878,6 +1878,10 @@ Possible values:
18781878

18791879
The file refers to a symbolic link inode.
18801880

1881+
- <a href="#filetype.fifo" name="filetype.fifo"></a>**`UVWASI_FILETYPE_FIFO`**
1882+
1883+
The file descriptor or file refers to a FIFO.
1884+
18811885
### <a href="#fstflags" name="fstflags"></a>`uvwasi_fstflags_t` (`uint16_t` bitfield)
18821886

18831887
Which file time attributes to adjust.

include/wasi_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ typedef uint8_t uvwasi_filetype_t;
141141
#define UVWASI_FILETYPE_SOCKET_DGRAM 5
142142
#define UVWASI_FILETYPE_SOCKET_STREAM 6
143143
#define UVWASI_FILETYPE_SYMBOLIC_LINK 7
144+
#define UVWASI_FILETYPE_FIFO 8
144145

145146
typedef uint16_t uvwasi_fstflags_t; /* Bitfield */
146147
#define UVWASI_FILESTAT_SET_ATIM (1 << 0)

src/uv_mapping.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ uvwasi_filetype_t uvwasi__stat_to_filetype(const uv_stat_t* stat) {
134134

135135
#ifdef S_ISFIFO
136136
if (S_ISFIFO(mode))
137-
return UVWASI_FILETYPE_SOCKET_STREAM;
137+
return UVWASI_FILETYPE_FIFO;
138138
#endif /* S_ISFIFO */
139139

140140
#ifdef S_ISBLK

src/uvwasi.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,6 +1468,8 @@ uvwasi_errno_t uvwasi_fd_readdir(uvwasi_t* uvwasi,
14681468
dirent.d_type = UVWASI_FILETYPE_BLOCK_DEVICE;
14691469
break;
14701470
case UV_DIRENT_FIFO:
1471+
dirent.d_type = UVWASI_FILETYPE_FIFO;
1472+
break;
14711473
case UV_DIRENT_UNKNOWN:
14721474
default:
14731475
dirent.d_type = UVWASI_FILETYPE_UNKNOWN;

src/wasi_rights.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ uvwasi_errno_t uvwasi__get_rights(uv_file fd,
4545
*rights_inheriting = UVWASI__RIGHTS_BLOCK_DEVICE_INHERITING;
4646
break;
4747

48+
case UVWASI_FILETYPE_FIFO:
49+
*rights_base = UVWASI__RIGHTS_FIFO_BASE;
50+
*rights_inheriting = UVWASI__RIGHTS_FIFO_INHERITING;
51+
break;
52+
4853
default:
4954
*rights_base = 0;
5055
*rights_inheriting = 0;

src/wasi_rights.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,13 @@
9393
UVWASI_RIGHT_POLL_FD_READWRITE)
9494
#define UVWASI__RIGHTS_TTY_INHERITING 0
9595

96+
#define UVWASI__RIGHTS_FIFO_BASE (UVWASI_RIGHT_FD_READ | \
97+
UVWASI_RIGHT_FD_FDSTAT_SET_FLAGS | \
98+
UVWASI_RIGHT_FD_WRITE | \
99+
UVWASI_RIGHT_FD_FILESTAT_GET | \
100+
UVWASI_RIGHT_POLL_FD_READWRITE)
101+
#define UVWASI__RIGHTS_FIFO_INHERITING UVWASI__RIGHTS_ALL
102+
96103

97104
uvwasi_errno_t uvwasi__get_rights(uv_file fd,
98105
int flags,

0 commit comments

Comments
 (0)