1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the test suite of Qt for Python. 7 ** 8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT 21 ** included in the packaging of this file. Please review the following 22 ** information to ensure the GNU General Public License requirements will 23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 24 ** 25 ** $QT_END_LICENSE$ 26 ** 27 ****************************************************************************/ 28 29 #include <stdlib.h> 30 #include <string.h> 31 #include <fstream> 32 #include "simplefile.h" 33 34 class SimpleFile_p 35 { 36 public: SimpleFile_p(const char * filename)37 SimpleFile_p(const char* filename) : m_descriptor(nullptr), m_size(0) 38 { 39 m_filename = strdup(filename); 40 } 41 ~SimpleFile_p()42 ~SimpleFile_p() 43 { 44 free(m_filename); 45 } 46 47 char* m_filename; 48 FILE* m_descriptor; 49 long m_size; 50 }; 51 SimpleFile(const char * filename)52SimpleFile::SimpleFile(const char* filename) 53 { 54 p = new SimpleFile_p(filename); 55 } 56 ~SimpleFile()57SimpleFile::~SimpleFile() 58 { 59 close(); 60 delete p; 61 } 62 filename()63const char* SimpleFile::filename() 64 { 65 return p->m_filename; 66 } 67 size()68long SimpleFile::size() 69 { 70 return p->m_size; 71 } 72 73 bool open()74SimpleFile::open() 75 { 76 if ((p->m_descriptor = fopen(p->m_filename, "rb")) == nullptr) 77 return false; 78 79 fseek(p->m_descriptor, 0, SEEK_END); 80 p->m_size = ftell(p->m_descriptor); 81 rewind(p->m_descriptor); 82 83 return true; 84 } 85 86 void close()87SimpleFile::close() 88 { 89 if (p->m_descriptor) { 90 fclose(p->m_descriptor); 91 p->m_descriptor = nullptr; 92 } 93 } 94 95 bool exists() const96SimpleFile::exists() const 97 { 98 std::ifstream ifile(p->m_filename); 99 return !ifile.fail(); 100 } 101 102 bool exists(const char * filename)103SimpleFile::exists(const char* filename) 104 { 105 std::ifstream ifile(filename); 106 return !ifile.fail(); 107 } 108 109