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