// 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 occurs 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 occurs 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_
