1// Copyright 2015 The Chromium OS Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef _BSDIFF_FILE_H_ 6#define _BSDIFF_FILE_H_ 7 8#include <memory> 9 10#include "bsdiff/file_interface.h" 11 12namespace bsdiff { 13 14class File : public FileInterface { 15 public: 16 // Opens a file |pathname| with flags |flags| as defined by open(2). In case 17 // of error, an empty unique_ptr is returned and errno is set accordingly. 18 static std::unique_ptr<File> FOpen(const char* pathname, int flags); 19 20 ~File() override; 21 22 // FileInterface overrides. 23 bool Read(void* buf, size_t count, size_t* bytes_read) override; 24 bool Write(const void* buf, size_t count, size_t* bytes_written) override; 25 bool Seek(off_t pos) override; 26 bool Close() override; 27 bool GetSize(uint64_t* size) override; 28 29 private: 30 // Creates the File instance for the |fd|. Takes ownership of the file 31 // descriptor. 32 explicit File(int fd); 33 34 int fd_; 35}; 36 37} // namespace bsdiff 38 39#endif // _BSDIFF_FILE_H_ 40