1 /* 2 Copyright (C) 2009 Andreas Gruenbacher <agruen (at) suse.de> 3 4 This program is free software: you can redistribute it and/or modify it 5 under the terms of the GNU Lesser General Public License as published by 6 the Free Software Foundation, either version 2.1 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #ifndef __ERROR_CONTEXT_T 19 #define __ERROR_CONTEXT_T 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 struct error_context { 26 /* Process an error message */ 27 void (*error) (struct error_context *, const char *, ...); 28 29 /* Quote a file name for including in an error message */ 30 const char *(*quote) (struct error_context *, const char *); 31 32 /* Free a quoted name */ 33 void (*quote_free) (struct error_context *, const char *); 34 }; 35 36 #ifdef ERROR_CONTEXT_MACROS 37 # define error(ctx, args...) do { \ 38 if ((ctx) && (ctx)->error) \ 39 (ctx)->error((ctx), args); \ 40 } while(0) 41 # define quote(ctx, name) \ 42 ( ((ctx) && (ctx)->quote) ? (ctx)->quote((ctx), (name)) : (name) ) 43 # define quote_free(ctx, name) do { \ 44 if ((ctx) && (ctx)->quote_free) \ 45 (ctx)->quote_free((ctx), (name)); \ 46 } while(0) 47 #endif 48 49 #ifdef __cplusplus 50 } 51 #endif 52 53 #endif /* __ERROR_CONTEXT_T */ 54