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