file_io.cc revision 8ae18741780300de3126826b72593391f2d00313
1a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley// Use of this source code is governed by a BSD-style license that can be
3a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley// found in the LICENSE file.
4a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
5a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley#include "shill/file_io.h"
6a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
7a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley#include <fcntl.h>
8a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley#include <unistd.h>
9a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
10a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley#include <base/posix/eintr_wrapper.h>
11a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
12a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wileynamespace shill {
13a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
14a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wileynamespace {
15a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
16be0849f4474f6e97496550187bc4256bf0a91d2bBen Chanbase::LazyInstance<FileIO> g_file_io = LAZY_INSTANCE_INITIALIZER;
17a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
18a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley}  // namespace
19a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
20a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher WileyFileIO::FileIO() {}
21a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
22a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher WileyFileIO::~FileIO() {}
23a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
24a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley// static
258ae18741780300de3126826b72593391f2d00313Paul StewartFileIO* FileIO::GetInstance() {
26a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley  return g_file_io.Pointer();
27a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley}
28a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
298ae18741780300de3126826b72593391f2d00313Paul Stewartssize_t FileIO::Write(int fd, const void* buf, size_t count) {
30a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley  return HANDLE_EINTR(write(fd, buf, count));
31a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley}
32a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
338ae18741780300de3126826b72593391f2d00313Paul Stewartssize_t FileIO::Read(int fd, void* buf, size_t count) {
34a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley  return HANDLE_EINTR(read(fd, buf, count));
35a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley}
36a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
37a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wileyint FileIO::Close(int fd) {
382dd351c3121f1257aed9b3a4bda70e32da5df913Mike Frysinger  return IGNORE_EINTR(close(fd));
39a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley}
40a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
41a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wileyint FileIO::SetFdNonBlocking(int fd) {
42a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley  const int flags = HANDLE_EINTR(fcntl(fd, F_GETFL)) | O_NONBLOCK;
43a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley  return HANDLE_EINTR(fcntl(fd, F_SETFL,  flags));
44a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley}
45a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley
46a59f7b9badec5b693661a56f7d7e45feabcaf26eChristopher Wiley}  // namespace shill
47