// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIB_FDIO_FDIO_UNISTD_H_
#define LIB_FDIO_FDIO_UNISTD_H_

#include <lib/fdio/unsafe.h>

#include <cerrno>

// needed for e.g. fdio_release; see fd_to_io below.
#include "internal.h"

// fd_to_io calls fdio_acquire on the fd, must call fdio_release() when done.
#define fd_to_io(n) fdio_unsafe_fd_to_io(n)

int fdio_status_to_errno(zx_status_t status);

// set errno to the closest match for error and return -1
static inline int ERROR(zx_status_t error) {
  errno = fdio_status_to_errno(error);
  return -1;
}

// if status is negative, set errno as appropriate and return -1
// otherwise return status
static inline int STATUS(zx_status_t status) {
  if (status < 0) {
    errno = fdio_status_to_errno(status);
    return -1;
  } else {
    return status;
  }
}

// set errno to e, return -1
static inline int ERRNO(int e) {
  errno = e;
  return -1;
}

#endif  // LIB_FDIO_FDIO_UNISTD_H_
