| Index: third_party/crazy_linker/crazy_linker/src/crazy_linker_system.h
|
| diff --git a/third_party/crazy_linker/crazy_linker/src/crazy_linker_system.h b/third_party/crazy_linker/crazy_linker/src/crazy_linker_system.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b4cd0d3f752c5735bd2126ed1949a5d204eededd
|
| --- /dev/null
|
| +++ b/third_party/crazy_linker/crazy_linker/src/crazy_linker_system.h
|
| @@ -0,0 +1,86 @@
|
| +// Copyright (c) 2013 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.
|
| +
|
| +#ifndef CRAZY_LINKER_SYSTEM_H
|
| +#define CRAZY_LINKER_SYSTEM_H
|
| +
|
| +#include <errno.h>
|
| +#include <stdio.h>
|
| +#include <stdlib.h>
|
| +#include <sys/mman.h>
|
| +#include <unistd.h>
|
| +
|
| +#include "crazy_linker_util.h" // for String
|
| +
|
| +// System abstraction used by the crazy linker.
|
| +// This is used to make unit testing easier without using tons of
|
| +// dependency injection in the rest of the code base.
|
| +//
|
| +// In a nutshell: in a normal build, this will wrap normal open() / read()
|
| +// calls. During unit testing, everything is mocked, see
|
| +// crazy_linker_system_mock.cpp
|
| +
|
| +namespace crazy {
|
| +
|
| +enum FileOpenMode {
|
| + FILE_OPEN_READ_ONLY = 0,
|
| + FILE_OPEN_READ_WRITE,
|
| + FILE_OPEN_WRITE
|
| +};
|
| +
|
| +// Scoping file descriptor class.
|
| +class FileDescriptor {
|
| +public:
|
| +#ifdef UNIT_TESTS
|
| +# define kEmptyFD NULL
|
| + typedef void* HandleType;
|
| +#else
|
| +# define kEmptyFD (-1)
|
| + typedef int HandleType;
|
| +#endif
|
| +
|
| + FileDescriptor() : fd_(kEmptyFD) {}
|
| +
|
| + FileDescriptor(const char* path) : fd_(kEmptyFD) {
|
| + OpenReadOnly(path);
|
| + }
|
| +
|
| + ~FileDescriptor() {
|
| + Close();
|
| + }
|
| +
|
| + bool IsOk() const { return fd_ != kEmptyFD; }
|
| + HandleType Get() const { return fd_; }
|
| + bool OpenReadOnly(const char* path);
|
| + bool OpenReadWrite(const char* path);
|
| + int Read(void* buffer, size_t buffer_size);
|
| + int SeekTo(off_t offset);
|
| + void* Map(void* address, size_t length, int prot_flags,
|
| + int flags, off_t offset);
|
| + void Close();
|
| +
|
| +private:
|
| + HandleType fd_;
|
| +};
|
| +
|
| +// Returns true iff a given file path exists.
|
| +bool PathExists(const char* path_name);
|
| +
|
| +// Returns true iff a given path is a regular file (or link to a regular
|
| +// file).
|
| +bool PathIsFile(const char* path_name);
|
| +
|
| +// Returns the current directory, as a string.
|
| +String GetCurrentDirectory();
|
| +
|
| +// Returns the value of a given environment variable.
|
| +const char* GetEnv(const char* var_name);
|
| +
|
| +// Returns true iff |lib_name| corresponds to one of the NDK-exposed
|
| +// system libraries.
|
| +bool IsSystemLibrary(const char* lib_name);
|
| +
|
| +} // namespace crazy
|
| +
|
| +#endif // CRAZY_LINKER_SYSTEM_H
|
|
|