struct NaClDesc *NaClDescIoDescFromHandleAllocCtor(NaClHandle handle, int flags) { int posix_d; #if NACL_WINDOWS int win_flags = 0; switch (flags & NACL_ABI_O_ACCMODE) { case NACL_ABI_O_RDONLY: win_flags = _O_RDONLY | _O_BINARY; break; case NACL_ABI_O_WRONLY: win_flags = _O_WRONLY | _O_BINARY; break; case NACL_ABI_O_RDWR: win_flags = _O_RDWR | _O_BINARY; break; } if (0 == win_flags) { return NULL; } posix_d = _open_osfhandle((intptr_t) handle, win_flags); if (-1 == posix_d) { return NULL; } #else posix_d = handle; #endif return NaClDescIoDescFromDescAllocCtor(posix_d, flags); }
static struct NaClDesc *IrtDescFromFd(int irt_fd) { struct NaClDesc *irt_desc; if (irt_fd == -1) { NaClLog(LOG_FATAL, "IrtDescFromFd: Integrated runtime (IRT) not present.\n"); } /* Takes ownership of the FD. */ irt_desc = NaClDescIoDescFromDescAllocCtor(irt_fd, NACL_ABI_O_RDONLY); if (NULL == irt_desc) { NaClLog(LOG_FATAL, "IrtDescFromFd: failed to construct NaClDesc object from" " descriptor\n"); } return irt_desc; }