Home | History | Annotate | Download | only in attr
      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