// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef RUNTIME_BIN_FDUTILS_H_
#define RUNTIME_BIN_FDUTILS_H_

#include "bin/builtin.h"
#include "platform/globals.h"

namespace dart {
namespace bin {

class FDUtils {
 public:
  static bool SetCloseOnExec(intptr_t fd);

  static bool SetNonBlocking(intptr_t fd);
  static bool SetBlocking(intptr_t fd);

  // Checks whether the file descriptor is blocking. If the function
  // returns true the value pointed to by is_blocking will be set to
  // the blocking state of the file descriptor. If the function
  // returns false the system call for checking the file descriptor
  // failed and the value pointed to by is_blocking is not modified.
  static bool IsBlocking(intptr_t fd, bool* is_blocking);

  static intptr_t AvailableBytes(intptr_t fd);

  // Reads the requested number of bytes from a file descriptor. This
  // function will only return on short reads if an error occours in
  // which case it returns -1 and errno is still valid. The file
  // descriptor must be in blocking mode.
  static ssize_t ReadFromBlocking(int fd, void* buffer, size_t count);

  // Writes the requested number of bytes to a file descriptor. This
  // function will only return on short writes if an error occours in
  // which case it returns -1 and errno is still valid. The file
  // descriptor must be in blocking mode.
  static ssize_t WriteToBlocking(int fd, const void* buffer, size_t count);

  // Closes fd without modifying errno.
  static void SaveErrorAndClose(intptr_t fd);

 private:
  DISALLOW_ALLOCATION();
  DISALLOW_IMPLICIT_CONSTRUCTORS(FDUtils);
};

}  // namespace bin
}  // namespace dart

#endif  // RUNTIME_BIN_FDUTILS_H_
