diff options
Diffstat (limited to 'sources/shiboken6/tests/libsample/simplefile.cpp')
-rw-r--r-- | sources/shiboken6/tests/libsample/simplefile.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/sources/shiboken6/tests/libsample/simplefile.cpp b/sources/shiboken6/tests/libsample/simplefile.cpp new file mode 100644 index 000000000..e51b14088 --- /dev/null +++ b/sources/shiboken6/tests/libsample/simplefile.cpp @@ -0,0 +1,73 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include "simplefile.h" + +#include <cstdlib> +#include <cstdio> +#include <string> +#include <filesystem> + +class SimpleFilePrivate +{ +public: + LIBMINIMAL_DISABLE_COPY_MOVE(SimpleFilePrivate) + + SimpleFilePrivate(const char *filename) : m_filename(filename) {} + ~SimpleFilePrivate() = default; + + std::string m_filename; + FILE *m_descriptor = nullptr; + long m_size = 0; +}; + +SimpleFile::SimpleFile(const char *filename) : + p(std::make_unique<SimpleFilePrivate>(filename)) +{ +} + +SimpleFile::~SimpleFile() +{ + close(); +} + +const char *SimpleFile::filename() +{ + return p->m_filename.c_str(); +} + +long SimpleFile::size() const +{ + return p->m_size; +} + +bool SimpleFile::open() +{ + auto *descriptor = std::fopen(p->m_filename.c_str(), "rb"); + if (descriptor == nullptr) + return false; + + p->m_descriptor = descriptor; + const auto size = std::filesystem::file_size(std::filesystem::path(p->m_filename)); + p->m_size = long(size); + + return true; +} + +void SimpleFile::close() +{ + if (p->m_descriptor != nullptr) { + std::fclose(p->m_descriptor); + p->m_descriptor = nullptr; + } +} + +bool SimpleFile::exists() const +{ + return std::filesystem::exists(std::filesystem::path(p->m_filename)); +} + +bool SimpleFile::exists(const char *filename) +{ + return std::filesystem::exists(std::filesystem::path(filename)); +} |