13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 23839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Header file for common error description library. 33839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 43839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Copyright 1988, Student Information Processing Board of the 53839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Massachusetts Institute of Technology. 63839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 73839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * For copyright and distribution info, see the documentation supplied 83839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * with this package. 93839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 1158f9d9e679152742f1352adc0c072176d128a4d4Theodore Ts'o#if !defined(__COM_ERR_H) && !defined(__COM_ERR_H__) 123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 132540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o#ifdef __GNUC__ 142540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o#define COM_ERR_ATTR(x) __attribute__(x) 152540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o#else 162540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o#define COM_ERR_ATTR(x) 172540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o#endif 182540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o 191601b10e65a55a1f8e4b262fa295cdab8cb5d98dTheodore Ts'o#include <stddef.h> 2091835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'o#include <stdarg.h> 2191835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'o 223839e65723771b85975f4263102dd3ceec4523cTheodore Ts'otypedef long errcode_t; 233839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2400aba96743c1b76eb9c242368f582c65ecdbe47cTheodore Ts'ostruct error_table { 2500aba96743c1b76eb9c242368f582c65ecdbe47cTheodore Ts'o char const * const * msgs; 2691835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'o long base; 278ce230959ce99e02da84f1d1fba76c78eafce3f3Theodore Ts'o int n_msgs; 2800aba96743c1b76eb9c242368f582c65ecdbe47cTheodore Ts'o}; 2991835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'ostruct et_list; 30f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 312540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'oextern void com_err (const char *, long, const char *, ...) 322540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o COM_ERR_ATTR((format(printf, 3, 4))); 332540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o 3491835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'oextern void com_err_va (const char *whoami, errcode_t code, const char *fmt, 352540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o va_list args) 362540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o COM_ERR_ATTR((format(printf, 3, 0))); 372540bb79b728cbfb88ed80e8ca2c2d8c0edc129bTheodore Ts'o 3891835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'oextern char const *error_message (long); 39f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oextern void (*com_err_hook) (const char *, long, const char *, va_list); 40efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'oextern void (*set_com_err_hook (void (*) (const char *, long, 4191835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'o const char *, va_list))) 4291835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'o (const char *, long, const char *, va_list); 43efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'oextern void (*reset_com_err_hook (void)) (const char *, long, 4491835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'o const char *, va_list); 4558f9d9e679152742f1352adc0c072176d128a4d4Theodore Ts'oextern int init_error_table(const char * const *msgs, long base, int count); 46e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern char *(*set_com_err_gettext (char *(*) (const char *))) 47e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall (const char *); 4891835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'o 4991835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'oextern errcode_t add_error_table(const struct error_table * et); 5091835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'oextern errcode_t remove_error_table(const struct error_table * et); 5191835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'oextern void add_to_error_table(struct et_list *new_table); 5291835c151fd48fd03bfe74133b8214486af18c12Theodore Ts'o 53d03550970c57100dbafd8941f34acafd208ec52eTheodore Ts'o/* Provided for Heimdall compatibility */ 54d03550970c57100dbafd8941f34acafd208ec52eTheodore Ts'oextern const char *com_right(struct et_list *list, long code); 551601b10e65a55a1f8e4b262fa295cdab8cb5d98dTheodore Ts'oextern const char *com_right_r(struct et_list *list, long code, char *str, size_t len); 56efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'oextern void initialize_error_table_r(struct et_list **list, 57efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o const char **messages, 58d03550970c57100dbafd8941f34acafd208ec52eTheodore Ts'o int num_errors, 59d03550970c57100dbafd8941f34acafd208ec52eTheodore Ts'o long base); 60d03550970c57100dbafd8941f34acafd208ec52eTheodore Ts'oextern void free_error_table(struct et_list *et); 613839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 62d3395ae71a38ff562e0af3a174ecbc5b523057d6Theodore Ts'o/* Provided for compatibility with other com_err libraries */ 63d3395ae71a38ff562e0af3a174ecbc5b523057d6Theodore Ts'oextern int et_list_lock(void); 64d3395ae71a38ff562e0af3a174ecbc5b523057d6Theodore Ts'oextern int et_list_unlock(void); 65d3395ae71a38ff562e0af3a174ecbc5b523057d6Theodore Ts'o 663839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define __COM_ERR_H 6758f9d9e679152742f1352adc0c072176d128a4d4Theodore Ts'o#define __COM_ERR_H__ 6858f9d9e679152742f1352adc0c072176d128a4d4Theodore Ts'o#endif /* !defined(__COM_ERR_H) && !defined(__COM_ERR_H__)*/ 69