| /////////////////////////////////////////////////////////////////////////////// |
| // |
| /// \file message.h |
| /// \brief Printing messages to stderr |
| // |
| // Author: Lasse Collin |
| // |
| // This file has been put into the public domain. |
| // You can do whatever you want with this file. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| /// Verbosity levels |
| enum message_verbosity { |
| V_SILENT, ///< No messages |
| V_ERROR, ///< Only error messages |
| V_WARNING, ///< Errors and warnings |
| V_VERBOSE, ///< Errors, warnings, and verbose statistics |
| V_DEBUG, ///< Very verbose |
| }; |
| |
| |
| /// \brief Signals used for progress message handling |
| extern const int message_progress_sigs[]; |
| |
| |
| /// \brief Initializes the message functions |
| /// |
| /// If an error occurs, this function doesn't return. |
| /// |
| extern void message_init(void); |
| |
| |
| /// Increase verbosity level by one step unless it was at maximum. |
| extern void message_verbosity_increase(void); |
| |
| /// Decrease verbosity level by one step unless it was at minimum. |
| extern void message_verbosity_decrease(void); |
| |
| /// Get the current verbosity level. |
| extern enum message_verbosity message_verbosity_get(void); |
| |
| |
| /// \brief Print a message if verbosity level is at least "verbosity" |
| /// |
| /// This doesn't touch the exit status. |
| extern void message(enum message_verbosity verbosity, const char *fmt, ...) |
| lzma_attribute((__format__(__printf__, 2, 3))); |
| |
| |
| /// \brief Prints a warning and possibly sets exit status |
| /// |
| /// The message is printed only if verbosity level is at least V_WARNING. |
| /// The exit status is set to WARNING unless it was already at ERROR. |
| extern void message_warning(const char *fmt, ...) |
| lzma_attribute((__format__(__printf__, 1, 2))); |
| |
| |
| /// \brief Prints an error message and sets exit status |
| /// |
| /// The message is printed only if verbosity level is at least V_ERROR. |
| /// The exit status is set to ERROR. |
| extern void message_error(const char *fmt, ...) |
| lzma_attribute((__format__(__printf__, 1, 2))); |
| |
| |
| /// \brief Prints an error message and exits with EXIT_ERROR |
| /// |
| /// The message is printed only if verbosity level is at least V_ERROR. |
| extern void message_fatal(const char *fmt, ...) |
| lzma_attribute((__format__(__printf__, 1, 2))) |
| lzma_attribute((__noreturn__)); |
| |
| |
| /// Print an error message that an internal error occurred and exit with |
| /// EXIT_ERROR. |
| extern void message_bug(void) lzma_attribute((__noreturn__)); |
| |
| |
| /// Print a message that establishing signal handlers failed, and exit with |
| /// exit status ERROR. |
| extern void message_signal_handler(void) lzma_attribute((__noreturn__)); |
| |
| |
| /// Convert lzma_ret to a string. |
| extern const char *message_strm(lzma_ret code); |
| |
| |
| /// Display how much memory was needed and how much the limit was. |
| extern void message_mem_needed(enum message_verbosity v, uint64_t memusage); |
| |
| |
| /// Buffer size for message_filters_to_str() |
| #define FILTERS_STR_SIZE 512 |
| |
| |
| /// \brief Get the filter chain as a string |
| /// |
| /// \param buf Pointer to caller allocated buffer to hold |
| /// the filter chain string |
| /// \param filters Pointer to the filter chain |
| /// \param all_known If true, all filter options are printed. |
| /// If false, only the options that get stored |
| /// into .xz headers are printed. |
| extern void message_filters_to_str(char buf[FILTERS_STR_SIZE], |
| const lzma_filter *filters, bool all_known); |
| |
| |
| /// Print the filter chain. |
| extern void message_filters_show( |
| enum message_verbosity v, const lzma_filter *filters); |
| |
| |
| /// Print a message that user should try --help. |
| extern void message_try_help(void); |
| |
| |
| /// Prints the version number to stdout and exits with exit status SUCCESS. |
| extern void message_version(void) lzma_attribute((__noreturn__)); |
| |
| |
| /// Print the help message. |
| extern void message_help(bool long_help) lzma_attribute((__noreturn__)); |
| |
| |
| /// \brief Set the total number of files to be processed |
| /// |
| /// Standard input is counted as a file here. This is used when printing |
| /// the filename via message_filename(). |
| extern void message_set_files(unsigned int files); |
| |
| |
| /// \brief Set the name of the current file and possibly print it too |
| /// |
| /// The name is printed immediately if --list was used or if --verbose |
| /// was used and stderr is a terminal. Even when the filename isn't printed, |
| /// it is stored so that it can be printed later if needed for progress |
| /// messages. |
| extern void message_filename(const char *src_name); |
| |
| |
| /// \brief Start progress info handling |
| /// |
| /// message_filename() must be called before this function to set |
| /// the filename. |
| /// |
| /// This must be paired with a call to message_progress_end() before the |
| /// given *strm becomes invalid. |
| /// |
| /// \param strm Pointer to lzma_stream used for the coding. |
| /// \param in_size Size of the input file, or zero if unknown. |
| /// |
| extern void message_progress_start(lzma_stream *strm, uint64_t in_size); |
| |
| |
| /// Update the progress info if in verbose mode and enough time has passed |
| /// since the previous update. This can be called only when |
| /// message_progress_start() has already been used. |
| extern void message_progress_update(void); |
| |
| |
| /// \brief Finishes the progress message if we were in verbose mode |
| /// |
| /// \param finished True if the whole stream was successfully coded |
| /// and output written to the output stream. |
| /// |
| extern void message_progress_end(bool finished); |