1//===- BinaryStreamError.cpp - Error extensions for streams -----*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#include "llvm/Support/BinaryStreamError.h" 10#include "llvm/Support/ErrorHandling.h" 11 12using namespace llvm; 13 14char BinaryStreamError::ID = 0; 15 16BinaryStreamError::BinaryStreamError(stream_error_code C) 17 : BinaryStreamError(C, "") {} 18 19BinaryStreamError::BinaryStreamError(StringRef Context) 20 : BinaryStreamError(stream_error_code::unspecified, Context) {} 21 22BinaryStreamError::BinaryStreamError(stream_error_code C, StringRef Context) 23 : Code(C) { 24 ErrMsg = "Stream Error: "; 25 switch (C) { 26 case stream_error_code::unspecified: 27 ErrMsg += "An unspecified error has occurred."; 28 break; 29 case stream_error_code::stream_too_short: 30 ErrMsg += "The stream is too short to perform the requested operation."; 31 break; 32 case stream_error_code::invalid_array_size: 33 ErrMsg += "The buffer size is not a multiple of the array element size."; 34 break; 35 case stream_error_code::invalid_offset: 36 ErrMsg += "The specified offset is invalid for the current stream."; 37 break; 38 case stream_error_code::filesystem_error: 39 ErrMsg += "An I/O error occurred on the file system."; 40 break; 41 } 42 43 if (!Context.empty()) { 44 ErrMsg += " "; 45 ErrMsg += Context; 46 } 47} 48 49void BinaryStreamError::log(raw_ostream &OS) const { OS << ErrMsg; } 50 51StringRef BinaryStreamError::getErrorMessage() const { return ErrMsg; } 52 53std::error_code BinaryStreamError::convertToErrorCode() const { 54 return inconvertibleErrorCode(); 55} 56