/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1994, by Sun Microsytems, Inc.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include "libtnf.h"
#include <libintl.h>
#if !defined(TEXT_DOMAIN)
#define TEXT_DOMAIN "SYS_TEST"
#endif
/*
*
*/
static tnf_error_handler_t *_err_handler = &tnf_default_error_handler;
static void *_err_arg = 0;
/*
*
*/
void
tnf_set_error_handler(tnf_error_handler_t *handler, void *arg)
{
/* XXX Not MT-safe */
_err_arg = arg;
_err_handler = handler;
}
/*
*
*/
void
_tnf_error(TNF *tnf, tnf_errcode_t err)
{
(*_err_handler)(_err_arg, tnf, err);
}
/*
*
*/
char *
tnf_error_message(tnf_errcode_t err)
{
if (err == TNF_ERR_NONE)
return (dgettext(TEXT_DOMAIN, "no error"));
else if (err <= TNF_ERRNO_MAX)
return (strerror(err));
else {
switch (err) {
case TNF_ERR_NOTTNF:
return (dgettext(TEXT_DOMAIN, "not a TNF file"));
case TNF_ERR_BADDATUM:
return (dgettext(TEXT_DOMAIN,
"operation on bad or NULL data handle"));
case TNF_ERR_TYPEMISMATCH:
return (dgettext(TEXT_DOMAIN, "type mismatch"));
case TNF_ERR_BADINDEX:
return (dgettext(TEXT_DOMAIN, "index out of bounds"));
case TNF_ERR_BADSLOT:
return (dgettext(TEXT_DOMAIN, "no such slot"));
case TNF_ERR_BADREFTYPE:
return (dgettext(TEXT_DOMAIN, "bad reference type"));
case TNF_ERR_ALLOCFAIL:
return (dgettext(TEXT_DOMAIN,
"memory allocation failure"));
case TNF_ERR_BADTNF:
return (dgettext(TEXT_DOMAIN, "bad TNF file"));
case TNF_ERR_INTERNAL:
return (dgettext(TEXT_DOMAIN, "internal error"));
default:
return (dgettext(TEXT_DOMAIN, "unknown error code"));
}
}
}
/*
*
*/
void
/* ARGSUSED */
tnf_default_error_handler(void *arg, TNF *tnf, tnf_errcode_t err)
{
fprintf(stderr, dgettext(TEXT_DOMAIN, "error: libtnf: %d: %s\n"),
err, tnf_error_message(err));
abort();
}