Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Unified Diff: net/base/file_input_stream_posix.cc

Issue 8843: Add write and read/write support to FileStream (renamed from FileInputStream)... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/base/file_input_stream.h ('k') | net/base/file_input_stream_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/file_input_stream_posix.cc
===================================================================
--- net/base/file_input_stream_posix.cc (revision 4450)
+++ net/base/file_input_stream_posix.cc (working copy)
@@ -1,143 +0,0 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved. Use of this
-// source code is governed by a BSD-style license that can be found in the
-// LICENSE file.
-
-// For 64-bit file access (off_t = off64_t, lseek64, etc).
-#define _FILE_OFFSET_BITS 64
-
-#include "net/base/file_input_stream.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include "base/basictypes.h"
-#include "base/logging.h"
-#include "base/message_loop.h"
-#include "base/string_util.h"
-#include "net/base/net_errors.h"
-
-// We cast back and forth, so make sure it's the size we're expecting.
-COMPILE_ASSERT(sizeof(int64) == sizeof(off_t), off_t_64_bit);
-
-// Make sure our Whence mappings match the system headers.
-COMPILE_ASSERT(net::FROM_BEGIN == SEEK_SET &&
- net::FROM_CURRENT == SEEK_CUR &&
- net::FROM_END == SEEK_END, whence_matches_system);
-
-namespace net {
-
-// FileInputStream::AsyncContext ----------------------------------------------
-
-// TODO(deanm): Figure out how to best do async IO.
-class FileInputStream::AsyncContext {
- public:
-
- CompletionCallback* callback() const { return NULL; }
- private:
-
- DISALLOW_COPY_AND_ASSIGN(AsyncContext);
-};
-
-// FileInputStream ------------------------------------------------------------
-
-FileInputStream::FileInputStream() : fd_(-1) {
- DCHECK(!IsOpen());
-}
-
-FileInputStream::~FileInputStream() {
- Close();
-}
-
-void FileInputStream::Close() {
- if (fd_ != -1) {
- if (close(fd_) != 0) {
- NOTREACHED();
- }
- fd_ = -1;
- }
- async_context_.reset();
-}
-
-// Map from errno to net error codes.
-static int64 MapErrorCode(int err) {
- switch(err) {
- case ENOENT:
- return ERR_FILE_NOT_FOUND;
- case EACCES:
- return ERR_ACCESS_DENIED;
- default:
- LOG(WARNING) << "Unknown error " << err << " mapped to net::ERR_FAILED";
- return ERR_FAILED;
- }
-}
-
-int FileInputStream::Open(const std::wstring& path, bool asynchronous_mode) {
- // We don't need O_LARGEFILE here since we set the 64-bit off_t feature.
- fd_ = open(WideToUTF8(path).c_str(), 0, O_RDONLY);
- if (fd_ == -1)
- return MapErrorCode(errno);
-
- return OK;
-}
-
-bool FileInputStream::IsOpen() const {
- return fd_ != -1;
-}
-
-int64 FileInputStream::Seek(Whence whence, int64 offset) {
- if (!IsOpen())
- return ERR_UNEXPECTED;
-
- // If we're in async, make sure we don't have a request in flight.
- DCHECK(!async_context_.get() || !async_context_->callback());
-
- off_t res = lseek(fd_, static_cast<off_t>(offset), static_cast<int>(whence));
- if (res == static_cast<off_t>(-1))
- return MapErrorCode(errno);
-
- return res;
-}
-
-int64 FileInputStream::Available() {
- if (!IsOpen())
- return ERR_UNEXPECTED;
-
- int64 cur_pos = Seek(FROM_CURRENT, 0);
- if (cur_pos < 0)
- return cur_pos;
-
- struct stat info;
- if (fstat(fd_, &info) != 0)
- return MapErrorCode(errno);
-
- int64 size = static_cast<int64>(info.st_size);
- DCHECK(size >= cur_pos);
-
- return size - cur_pos;
-}
-
-// TODO(deanm): async.
-int FileInputStream::Read(
- char* buf, int buf_len, CompletionCallback* callback) {
- // read(..., 0) will return 0, which indicates end-of-file.
- DCHECK(buf_len > 0 && buf_len <= SSIZE_MAX);
-
- if (!IsOpen())
- return ERR_UNEXPECTED;
-
- // Loop in the case of getting interrupted by a signal.
- for (;;) {
- ssize_t res = read(fd_, buf, static_cast<size_t>(buf_len));
- if (res == static_cast<ssize_t>(-1)) {
- if (errno == EINTR)
- continue;
- return MapErrorCode(errno);
- }
- return static_cast<int>(res);
- }
-}
-
-} // namespace net
« no previous file with comments | « net/base/file_input_stream.h ('k') | net/base/file_input_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698