%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
#include "uv.h"
#include "wasi_rights.h"
#include "wasi_types.h"
uvwasi_errno_t uvwasi__get_rights(uv_file fd,
int flags,
uvwasi_filetype_t type,
uvwasi_rights_t* rights_base,
uvwasi_rights_t* rights_inheriting) {
int read_or_write_only;
if (type == UVWASI_FILETYPE_UNKNOWN)
return UVWASI_EINVAL;
switch (type) {
case UVWASI_FILETYPE_REGULAR_FILE:
*rights_base = UVWASI__RIGHTS_REGULAR_FILE_BASE;
*rights_inheriting = UVWASI__RIGHTS_REGULAR_FILE_INHERITING;
break;
case UVWASI_FILETYPE_DIRECTORY:
*rights_base = UVWASI__RIGHTS_DIRECTORY_BASE;
*rights_inheriting = UVWASI__RIGHTS_DIRECTORY_INHERITING;
break;
case UVWASI_FILETYPE_SOCKET_STREAM:
case UVWASI_FILETYPE_SOCKET_DGRAM:
*rights_base = UVWASI__RIGHTS_SOCKET_BASE;
*rights_inheriting = UVWASI__RIGHTS_SOCKET_INHERITING;
break;
case UVWASI_FILETYPE_CHARACTER_DEVICE:
if (uv_guess_handle(fd) == UV_TTY) {
*rights_base = UVWASI__RIGHTS_TTY_BASE;
*rights_inheriting = UVWASI__RIGHTS_TTY_INHERITING;
} else {
*rights_base = UVWASI__RIGHTS_CHARACTER_DEVICE_BASE;
*rights_inheriting = UVWASI__RIGHTS_CHARACTER_DEVICE_INHERITING;
}
break;
case UVWASI_FILETYPE_BLOCK_DEVICE:
*rights_base = UVWASI__RIGHTS_BLOCK_DEVICE_BASE;
*rights_inheriting = UVWASI__RIGHTS_BLOCK_DEVICE_INHERITING;
break;
default:
*rights_base = 0;
*rights_inheriting = 0;
}
/* Disable read/write bits depending on access mode. */
read_or_write_only = flags & (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR);
if (read_or_write_only == UV_FS_O_RDONLY)
*rights_base &= ~UVWASI_RIGHT_FD_WRITE;
else if (read_or_write_only == UV_FS_O_WRONLY)
*rights_base &= ~UVWASI_RIGHT_FD_READ;
return UVWASI_ESUCCESS;
}