Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}