/* * Copyright (C) 2023 The C++ Plus Project. * This file is part of the cppp-reiconv Library. * * The cppp-reiconv Library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * The cppp-reiconv Library is distributed in the hope that it will be * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with the cppp-reiconv Library; see the file COPYING. * If not, see . */ /* Throw error for reiconv-test. */ #ifndef _THROW_ERROR_HPP #define _THROW_ERROR_HPP #include #ifdef _MSC_VER #include #else #include #endif #ifdef _MSC_VER #define isatty _isatty #define fileno _fileno #endif const bool stderr_is_tty = isatty(fileno(stderr)); void error(const std::string& op, const std::string& msg) { int saved_errno = errno; if(stderr_is_tty) { std::cerr << "\033[31m"; } if(saved_errno) { perror(op.c_str()); } else { std::cerr << op << ": "; } std::cerr << msg << std::endl; if(stderr_is_tty) { std::cerr << "\033[0m"; } if(saved_errno) { exit(saved_errno); } else { exit(1); } } void success(const std::string& op, const std::string& msg) { if(stderr_is_tty) { std::cerr << "\033[32m"; } std::cerr << op << ": "; std::cerr << msg << std::endl; if(stderr_is_tty) { std::cerr << "\033[0m"; } } #endif