blob: d2d8078009603baad6e5cc559f0879b51dc108b8 [file] [log] [blame]
// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by the GPL v2 license that can
// be found in the LICENSE file.
//
// Simple wrapper for synchronous file operations
// TODO(wad) clean up the API then propose moving it to a standalone location.
#ifndef VERITY_SIMPLE_FILE_FILE_H__
#define VERITY_SIMPLE_FILE_FILE_H__ 1
#include <fcntl.h>
#include <inttypes.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "verity/logging.h"
#include "verity/simple_file/env.h"
namespace simple_file {
// File wraps normal file interactions to allow for easy mocking. In addition,
// the underlying OS calls can also be mocked using the Env class above.
// This class may not be used by multiple threads at once.
class File {
public:
File() : default_env_(new Env), env_(NULL), fd_(-1), offset_(0) { }
virtual ~File() { if (fd_ >= 0) { env()->Close(fd_); } delete default_env_; }
virtual const Env *env() const;
// Specify the file and the open(2) flags for using it
virtual bool Initialize(const char *path, int flags, const Env *env);
// Read |bytes| into |buf|. |buf| may be altered even on failure.
virtual bool Read(int bytes, uint8_t *buf);
virtual bool ReadAt(int bytes, uint8_t *buf, off_t at);
// Write |bytes| from |buf|
virtual bool Write(int bytes, const uint8_t *buf);
// WriteAt |bytes| from |buf|
virtual bool WriteAt(int bytes, const uint8_t *buf, off_t at);
// Size returns the total File size.
virtual int64_t Size() const;
virtual bool Seek(off_t location, bool absolute);
virtual off_t Whence() const;
// Reset returns the object to state immediately after construction.
virtual void Reset();
private:
Env *default_env_;
const Env *env_;
int fd_;
off_t offset_;
};
} // namespace simple_file
#endif // VERITY_SIMPLE_FILE_H__