diff options
Diffstat (limited to 'compiler/circledump/src/Load.cpp')
-rw-r--r-- | compiler/circledump/src/Load.cpp | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/compiler/circledump/src/Load.cpp b/compiler/circledump/src/Load.cpp deleted file mode 100644 index 67e7fa5a6..000000000 --- a/compiler/circledump/src/Load.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <circleread/Model.h> - -#include <fcntl.h> -#include <unistd.h> -#include <sys/stat.h> -#include <sys/mman.h> - -namespace -{ - -class MemoryMappedModel final : public circleread::Model -{ -public: - /** - * @require fd and data SHOULD be valid - */ - explicit MemoryMappedModel(int fd, void *data, size_t size) : _fd{fd}, _data{data}, _size{size} - { - // DO NOTHING - } - -public: - ~MemoryMappedModel() - { - munmap(_data, _size); - close(_fd); - } - -public: - MemoryMappedModel(const MemoryMappedModel &) = delete; - MemoryMappedModel(MemoryMappedModel &&) = delete; - -public: - const ::circle::Model *model(void) const override { return ::circle::GetModel(_data); } - -private: - int _fd = -1; - void *_data = nullptr; - size_t _size = 0; -}; - -class FileDescriptor final -{ -public: - FileDescriptor(int value) : _value{value} - { - // DO NOTHING - } - -public: - // NOTE Copy is not allowed - FileDescriptor(const FileDescriptor &) = delete; - -public: - // NOTE Move is allowed - FileDescriptor(FileDescriptor &&fd) { _value = fd.release(); } - -public: - ~FileDescriptor() - { - if (_value != -1) - { - // Close on destructor - close(_value); - } - } - -public: - int value(void) const { return _value; } - -public: - int release(void) - { - auto res = _value; - _value = -1; - return res; - } - -private: - int _value = -1; -}; - -} // namespace - -namespace circleread -{ - -std::unique_ptr<Model> load_circle(const std::string &path) -{ - FileDescriptor fd = open(path.c_str(), O_RDONLY); - - if (fd.value() == -1) - { - // Return nullptr on open failure - return nullptr; - } - - struct stat st; - if (fstat(fd.value(), &st) == -1) - { - // Return nullptr on fstat failure - return nullptr; - } - - auto size = st.st_size; - auto data = mmap(nullptr, size, PROT_READ, MAP_SHARED, fd.value(), 0); - - if (data == MAP_FAILED) - { - // Return nullptr on mmap failure - return nullptr; - } - - return std::unique_ptr<circleread::Model>{new MemoryMappedModel(fd.release(), data, size)}; -} - -} // namespace circleread |