Project CS 3377

Suvrat
FileReader.cpp.pdf

4/6/2021 https://elearning.utdallas.edu/bbcswebdav/pid-4080035-dt-content-rid-103310991_1/courses/2212-merged-CS3377501-SE3377501/FileReader.cpp

https://elearning.utdallas.edu/bbcswebdav/pid-4080035-dt-content-rid-103310991_1/courses/2212-merged-CS3377501-SE3377501/FileReader.cpp 1/2

// // Created by Erik Peterson on 2/9/21. //

#include <fcntl.h> #include <cerrno> #include <unistd.h> #include <cstring> #include "FileReader.h" #include "FileModifyException.h" #include "Util.h"

using namespace std;

char nameFirst[50] = "A Programming Guide to Linux Commands, Editors, a"; char nameSecond[50] = "Advanced Programming in the UNIX Environment by S";

string FileReader::getErrnoString() { return strerror(errno); }

void FileReader::verifyNumBytes(ssize_t expected, ssize_t actual) { if ( expected != actual) { throw FileModifyException("Bytes read/written (" + to_string(expected) + ") don't match actual (" + to_string(actual) + ")"); } }

void FileReader::readEntries(std::list<EntryInfo>& entryList, const char* fileName) { int fileDescriptor = open(fileName, O_RDONLY); if ( fileDescriptor < 0) { close(fileDescriptor); throw FileModifyException("Unable to open output file: " + getErrnoString()); } readEntries(entryList, fileDescriptor); close(fileDescriptor); }

void FileReader::readEntries(list<EntryInfo> &entryList, int fileDescriptor) { int numItems; size_t amountRead = read(fileDescriptor, &numItems, sizeof(int)); if ( amountRead <= 0) { close(fileDescriptor); throw FileModifyException("File is empty/error reading"); }

for (int i=0; i < numItems; i++) {

4/6/2021 https://elearning.utdallas.edu/bbcswebdav/pid-4080035-dt-content-rid-103310991_1/courses/2212-merged-CS3377501-SE3377501/FileReader.cpp

https://elearning.utdallas.edu/bbcswebdav/pid-4080035-dt-content-rid-103310991_1/courses/2212-merged-CS3377501-SE3377501/FileReader.cpp 2/2

EntryInfo incoming; verifyNumBytes(sizeof(time_t), read(fileDescriptor, &incoming.timestamp, sizeof(time_t))); verifyNumBytes(sizeof(int), read(fileDescriptor, &incoming.itemID, sizeof(int))); char* inputName = new char[50]; verifyNumBytes(50, read(fileDescriptor, inputName, 50 * sizeof(char))); incoming.itemName = inputName; verifyNumBytes(sizeof(int), read(fileDescriptor, &incoming.quantity, sizeof(int))); verifyNumBytes(sizeof(float), read(fileDescriptor, &incoming.price, sizeof(float))); entryList.push_back(incoming); } }

void FileReader::addMissingEntries(list<EntryInfo> & entries) { EntryInfo additionalFirst; additionalFirst.timestamp = 1612195200; // (2/1/2020 4 PM GMT) additionalFirst.itemID = 4636152; additionalFirst.itemName = nameFirst; additionalFirst.quantity = 70; additionalFirst.price = 70.99; entries.push_back(additionalFirst);

EntryInfo additionalSecond; additionalSecond.timestamp = 1613412000; //(2/15/2020 6 PM GMT) additionalSecond.itemID = 6530927; additionalSecond.itemName = nameSecond; additionalSecond.quantity = 68; additionalSecond.price = 89.99; entries.push_back(additionalSecond); }