diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2021-10-01 16:51:36 +0200 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2021-10-01 19:03:02 +0200 |
| commit | 01ea77ed88269930688f41449168103dbbbc1985 (patch) | |
| tree | 8b688001f8ae5980e631f7d574ef47261bc73a83 /src | |
| parent | 66c0bf4811abc3502d7fe1900289908c590b5cfb (diff) | |
Refactor class Fl_Image_Reader to FLTK coding style
... and separate constructors for memory reader with and w/o length
argument for better documentation.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Image_Reader.cxx | 104 | ||||
| -rw-r--r-- | src/Fl_Image_Reader.h | 51 |
2 files changed, 83 insertions, 72 deletions
diff --git a/src/Fl_Image_Reader.cxx b/src/Fl_Image_Reader.cxx index b9a242552..e15d3434e 100644 --- a/src/Fl_Image_Reader.cxx +++ b/src/Fl_Image_Reader.cxx @@ -41,68 +41,82 @@ int Fl_Image_Reader::open(const char *filename) { if (!filename) return -1; - pName = fl_strdup(filename); - if ( (pFile = fl_fopen(filename, "rb")) == NULL ) { + name_ = fl_strdup(filename); + if ((file_ = fl_fopen(filename, "rb")) == NULL) { return -1; } - pIsFile = 1; + is_file_ = 1; return 0; } -// Initialize the reader for memory access, name is copied and stored -int Fl_Image_Reader::open(const char *imagename, const unsigned char *data, const long datasize) { +// Initialize the reader for memory access, name is copied and stored. +int Fl_Image_Reader::open(const char *imagename, const unsigned char *data, const size_t datasize) { if (imagename) - pName = fl_strdup(imagename); + name_ = fl_strdup(imagename); if (data) { - pStart = pData = data; - pIsData = 1; - if (datasize > 0) { - pEnd = pStart + datasize; - } + start_ = data_ = data; + is_data_ = 1; + end_ = start_ + datasize; + return 0; + } + return -1; +} + + +// Initialize the reader for memory access, name is copied and stored. +// Deprecated, DO NOT USE! Buffer overruns will not be checked! +// Please use instead: +// Fl_Image_Reader::open(const char *imagename, const unsigned char *data, const size_t datasize) + +int Fl_Image_Reader::open(const char *imagename, const unsigned char *data) { + if (imagename) + name_ = fl_strdup(imagename); + if (data) { + start_ = data_ = data; + is_data_ = 1; return 0; - } else { - return -1; } + return -1; } // Close and destroy the reader Fl_Image_Reader::~Fl_Image_Reader() { - if (pIsFile && pFile) { - fclose(pFile); + if (is_file_ && file_) { + fclose(file_); } - if (pName) - ::free(pName); + if (name_) + free(name_); } // Read a single byte from memory or a file uchar Fl_Image_Reader::read_byte() { if (error()) // don't read after read error or EOF return 0; - if (pIsFile) { - int ret = getc(pFile); + if (is_file_) { + int ret = getc(file_); if (ret < 0) { - if (feof(pFile)) - pError = 1; - else if (ferror(pFile)) - pError = 2; + if (feof(file_)) + error_ = 1; + else if (ferror(file_)) + error_ = 2; else - pError = 3; // unknown error + error_ = 3; // unknown error return 0; } return ret; - } else if (pIsData) { - if (pData < pEnd) - return *pData++; - pError = 1; // EOF + } else if (is_data_) { + if (data_ < end_) + return *data_++; + error_ = 1; // EOF return 0; } - pError = 3; // undefined mode + error_ = 3; // undefined mode return 0; } // Read a 16-bit unsigned integer, LSB-first unsigned short Fl_Image_Reader::read_word() { - unsigned char b0, b1; // Bytes from file or memory + unsigned char b0, b1; // Bytes from file or memory b0 = read_byte(); b1 = read_byte(); if (error()) @@ -112,7 +126,7 @@ unsigned short Fl_Image_Reader::read_word() { // Read a 32-bit unsigned integer, LSB-first unsigned int Fl_Image_Reader::read_dword() { - unsigned char b0, b1, b2, b3; // Bytes from file or memory + unsigned char b0, b1, b2, b3; // Bytes from file or memory b0 = read_byte(); b1 = read_byte(); b2 = read_byte(); @@ -125,24 +139,24 @@ unsigned int Fl_Image_Reader::read_dword() { // Move the current read position to a byte offset from the beginning // of the file or the original start address in memory. // This method clears the error flag if the position is valid. -// If reading from memory and (pStart + n) overflows, then the result is undefined. +// If reading from memory and (start_ + n) overflows, then the result is undefined. void Fl_Image_Reader::seek(unsigned int n) { - pError = 0; - if (pIsFile) { - int ret = fseek(pFile, n , SEEK_SET); + error_ = 0; + if (is_file_) { + int ret = fseek(file_, n, SEEK_SET); if (ret < 0) - pError = 2; // read / position error + error_ = 2; // read / position error return; - } else if (pIsData) { - if (pStart + n <= pEnd) - pData = pStart + n; + } else if (is_data_) { + if (start_ + n <= end_) + data_ = start_ + n; else - pError = 2; // read / position error + error_ = 2; // read / position error return; } // unknown mode (not initialized ?) - pError = 3; + error_ = 3; } // Get the current read position as a byte offset from the @@ -152,10 +166,10 @@ void Fl_Image_Reader::seek(unsigned int n) { // return -1 or any error code from ftell(). long Fl_Image_Reader::tell() const { - if (pIsFile) { - return ftell(pFile); - } else if (pIsData) { - return long(pData - pStart); + if (is_file_) { + return ftell(file_); + } else if (is_data_) { + return long(data_ - start_); } return 0; } diff --git a/src/Fl_Image_Reader.h b/src/Fl_Image_Reader.h index e9b2937b2..ef327922a 100644 --- a/src/Fl_Image_Reader.h +++ b/src/Fl_Image_Reader.h @@ -29,25 +29,27 @@ #include <stdio.h> -class Fl_Image_Reader -{ +class Fl_Image_Reader { public: // Create the reader. - Fl_Image_Reader() : - pIsFile(0), pIsData(0), - pFile(0L), pData(0L), - pStart(0L), - pEnd((const unsigned char *)(-1L)), - pName(0L), - pError(0) - {} + Fl_Image_Reader() + : is_file_(0) + , is_data_(0) + , file_(0L) + , data_(0L) + , start_(0L) + , end_((const unsigned char *)(-1L)) + , name_(0L) + , error_(0) {} // Initialize the reader to access the file system, filename is copied // and stored. int open(const char *filename); // Initialize the reader for memory access, name is copied and stored - int open(const char *imagename, const unsigned char *data, const long datasize = -1); + int open(const char *imagename, const unsigned char *data, const size_t datasize); + // Deprecated, DO NOT USE! + int open(const char *imagename, const unsigned char *data); // Close and destroy the reader ~Fl_Image_Reader(); @@ -62,9 +64,7 @@ public: unsigned int read_dword(); // Read a 32-bit signed integer, LSB-first - int read_long() { - return (int)read_dword(); - } + int read_long() { return (int)read_dword(); } // Move the current read position to a byte offset from the beginning // of the file or the original start address in memory @@ -75,36 +75,33 @@ public: long tell() const; // Get the current EOF or error status of the file or data block - int error() const { - return pError; - } + int error() const { return error_; } // return the name or filename for this reader - const char *name() const { return pName; } + const char *name() const { return name_; } // skip a given number of bytes void skip(unsigned int n) { seek(tell() + n); } private: - // open() sets this if we read from a file - char pIsFile; + char is_file_; // open() sets this if we read from memory - char pIsData; + char is_data_; // a pointer to the opened file - FILE *pFile; + FILE *file_; // a pointer to the current byte in memory - const unsigned char *pData; + const unsigned char *data_; // a pointer to the start of the image data - const unsigned char *pStart; + const unsigned char *start_; // a pointer to the end of image data if reading from memory, otherwise undefined // note: currently (const unsigned char *)(-1L) if end of memory is not available // ... which means "unlimited" - const unsigned char *pEnd; + const unsigned char *end_; // a copy of the name associated with this reader - char *pName; + char *name_; // a flag to store EOF or error status - int pError; + int error_; }; #endif // FL_IMAGE_READER_H |
