xref: /freebsd-src/contrib/xz/src/xz/message.h (revision 3b35e7ee8de9b0260149a2b77e87a2b9c7a36244)
1 // SPDX-License-Identifier: 0BSD
2 
3 ///////////////////////////////////////////////////////////////////////////////
4 //
5 /// \file       message.h
6 /// \brief      Printing messages to stderr
7 //
8 //  Author:     Lasse Collin
9 //
10 ///////////////////////////////////////////////////////////////////////////////
11 
12 /// Verbosity levels
13 enum message_verbosity {
14 	V_SILENT,   ///< No messages
15 	V_ERROR,    ///< Only error messages
16 	V_WARNING,  ///< Errors and warnings
17 	V_VERBOSE,  ///< Errors, warnings, and verbose statistics
18 	V_DEBUG,    ///< Very verbose
19 };
20 
21 
22 /// \brief      Signals used for progress message handling
23 extern const int message_progress_sigs[];
24 
25 
26 /// \brief      Initializes the progress message functions
27 ///
28 /// message_fatal() and such can be called even before message_init()
29 /// has been called.
30 ///
31 /// If an error occurs, this function doesn't return.
32 ///
33 extern void message_init(void);
34 
35 
36 /// Increase verbosity level by one step unless it was at maximum.
37 extern void message_verbosity_increase(void);
38 
39 /// Decrease verbosity level by one step unless it was at minimum.
40 extern void message_verbosity_decrease(void);
41 
42 /// Get the current verbosity level.
43 extern enum message_verbosity message_verbosity_get(void);
44 
45 
46 /// \brief      Print a message if verbosity level is at least "verbosity"
47 ///
48 /// This doesn't touch the exit status.
49 lzma_attribute((__format__(__printf__, 2, 3)))
50 extern void message(enum message_verbosity verbosity, const char *fmt, ...);
51 
52 
53 /// \brief      Prints a warning and possibly sets exit status
54 ///
55 /// The message is printed only if verbosity level is at least V_WARNING.
56 /// The exit status is set to WARNING unless it was already at ERROR.
57 lzma_attribute((__format__(__printf__, 1, 2)))
58 extern void message_warning(const char *fmt, ...);
59 
60 
61 /// \brief      Prints an error message and sets exit status
62 ///
63 /// The message is printed only if verbosity level is at least V_ERROR.
64 /// The exit status is set to ERROR.
65 lzma_attribute((__format__(__printf__, 1, 2)))
66 extern void message_error(const char *fmt, ...);
67 
68 
69 /// \brief      Prints an error message and exits with EXIT_ERROR
70 ///
71 /// The message is printed only if verbosity level is at least V_ERROR.
72 tuklib_attr_noreturn
73 lzma_attribute((__format__(__printf__, 1, 2)))
74 extern void message_fatal(const char *fmt, ...);
75 
76 
77 /// Print an error message that an internal error occurred and exit with
78 /// EXIT_ERROR.
79 tuklib_attr_noreturn
80 extern void message_bug(void);
81 
82 
83 /// Print a message that establishing signal handlers failed, and exit with
84 /// exit status ERROR.
85 tuklib_attr_noreturn
86 extern void message_signal_handler(void);
87 
88 
89 /// Convert lzma_ret to a string.
90 extern const char *message_strm(lzma_ret code);
91 
92 
93 /// Display how much memory was needed and how much the limit was.
94 extern void message_mem_needed(enum message_verbosity v, uint64_t memusage);
95 
96 
97 /// Print the filter chain.
98 extern void message_filters_show(
99 		enum message_verbosity v, const lzma_filter *filters);
100 
101 
102 /// Print a message that user should try --help.
103 extern void message_try_help(void);
104 
105 
106 /// Prints the version number to stdout and exits with exit status SUCCESS.
107 tuklib_attr_noreturn
108 extern void message_version(void);
109 
110 
111 /// Print the help message.
112 tuklib_attr_noreturn
113 extern void message_help(bool long_help);
114 
115 
116 /// Prints a help message specifically for using the --filters and
117 /// --filtersX command line options.
118 tuklib_attr_noreturn
119 extern void message_filters_help(void);
120 
121 
122 /// \brief      Set the total number of files to be processed
123 ///
124 /// Standard input is counted as a file here. This is used when printing
125 /// the filename via message_filename().
126 extern void message_set_files(unsigned int files);
127 
128 
129 /// \brief      Set the name of the current file and possibly print it too
130 ///
131 /// The name is printed immediately if --list was used or if --verbose
132 /// was used and stderr is a terminal. Even when the filename isn't printed,
133 /// it is stored so that it can be printed later if needed for progress
134 /// messages.
135 extern void message_filename(const char *src_name);
136 
137 
138 /// \brief      Start progress info handling
139 ///
140 /// message_filename() must be called before this function to set
141 /// the filename.
142 ///
143 /// This must be paired with a call to message_progress_end() before the
144 /// given *strm becomes invalid.
145 ///
146 /// \param      strm      Pointer to lzma_stream used for the coding.
147 /// \param      in_size   Size of the input file, or zero if unknown.
148 ///
149 extern void message_progress_start(lzma_stream *strm,
150 		bool is_passthru, uint64_t in_size);
151 
152 
153 /// Update the progress info if in verbose mode and enough time has passed
154 /// since the previous update. This can be called only when
155 /// message_progress_start() has already been used.
156 extern void message_progress_update(void);
157 
158 
159 /// \brief      Finishes the progress message if we were in verbose mode
160 ///
161 /// \param      finished    True if the whole stream was successfully coded
162 ///                         and output written to the output stream.
163 ///
164 extern void message_progress_end(bool finished);
165