/usr/include/gtextutils/exit_manip.h is in libgtextutils-dev 0.7-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | /*
Gordon's Text-Utilities Library
Copyright (C) 2009-2013 Assaf Gordon (assafgordon@gmail.com)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
*/
#ifndef __EXIT_MANIP__
#define __EXIT_MANIP__
/*
Easily terminates a program while printing an error message.
Tries to be an STL spirited version of errx(3)
Usage:
// from where ever in the code you wish to print message and terminate:
// will print message to STDERR and exit with exit code 1
cerr << "Error: something failed. " << exit_program(1);
// if you want file+list information, use:
cerr << "Error: something failed. " << exit_program_with_source(1);
*/
struct exit_process_struct
{
int exitcode;
bool show_source;
const char* source_file;
size_t source_file_line_number ;
} ;
#define exit_program_with_source(exitcode) exit_program((exitcode),__FILE__,__LINE__)
inline exit_process_struct exit_program(int exitcode, const char* filename = NULL, const size_t line = 0 )
{
exit_process_struct eps;
eps.exitcode = exitcode ;
if ( filename == NULL || line == 0 )
eps.show_source = false ;
else {
eps.show_source = true ;
eps.source_file = filename ;
eps.source_file_line_number = line ;
}
return eps;
}
inline std::ostream& operator<< ( std::ostream& strm, const exit_process_struct& eps )
{
if (eps.show_source)
strm << " [ "
<< eps.source_file
<< " : " << eps.source_file_line_number << " ]";
strm << std::endl;
exit(eps.exitcode);
return strm ;
}
#endif
|