vector<unsigned char> ReadBytes(FILE* file, size_t numBytes) { if(file == NULL) { throw logic_error("Assertion failed: file is null."); } vector<unsigned char> buffer(numBytes, 0); if(numBytes == 0) { return buffer; } size_t bytesRead = fread(&buffer[0], 1, numBytes, file); if(ferror(file) != 0) { throw IoError("Error reading from file."); } if(bytesRead < numBytes) { buffer.resize(bytesRead); } return buffer; }
void SeekOrDie(FILE* file, long offset, SeekOrigin origin) { int seekSuccess = fseek(file, offset, static_cast<int>(origin)); if(seekSuccess != 0) { throw IoError("Error while seeking."); } }
long TellOrDie(FILE* file) { long seekPosition = ftell(file); if(seekPosition == -1) { throw IoError("Error while getting file position."); } return seekPosition; }
vector<unsigned char> ReadBytesOrDie(FILE* file, size_t numBytes) { vector<unsigned char> bytes = ReadBytes(file, numBytes); if(bytes.size() < numBytes) { throw IoError("Unexpected end of file."); } else { return bytes; } }
static int signalSqlite3ErrorAndThrow(const char * file_name, sqlite3 * connection) { auto message = boost::format("Error operating on SQLite3 " "database %1%: \"%2%\"") % file_name % sqlite3_errmsg(connection); Logger * log = Logger::get_instance(); log->error(message); throw IoError(message); }
FILE* OpenOrDie(const char* filename, const char* mode) { FILE* file = fopen(filename, mode); if(file == NULL) { throw IoError(string("Could not open file ") + filename + "."); } else { return file; } #ifdef _MSC_VER #pragma warning(default:4996) #endif }