Annotation of gforth/libltdl/lt_error.c, revision 1.1
1.1 ! anton 1: /* lt_error.c -- error propogation interface
! 2:
! 3: Copyright (C) 1999, 2000, 2001, 2004, 2005, 2007 Free Software Foundation, Inc.
! 4: Written by Thomas Tanner, 1999
! 5:
! 6: NOTE: The canonical source of this file is maintained with the
! 7: GNU Libtool package. Report bugs to bug-libtool@gnu.org.
! 8:
! 9: GNU Libltdl is free software; you can redistribute it and/or
! 10: modify it under the terms of the GNU Lesser General Public
! 11: License as published by the Free Software Foundation; either
! 12: version 2 of the License, or (at your option) any later version.
! 13:
! 14: As a special exception to the GNU Lesser General Public License,
! 15: if you distribute this file as part of a program or library that
! 16: is built using GNU Libtool, you may include this file under the
! 17: same distribution terms that you use for the rest of that program.
! 18:
! 19: GNU Libltdl is distributed in the hope that it will be useful,
! 20: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 21: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 22: GNU Lesser General Public License for more details.
! 23:
! 24: You should have received a copy of the GNU Lesser General Public
! 25: License along with GNU Libltdl; see the file COPYING.LIB. If not, a
! 26: copy can be downloaded from http://www.gnu.org/licenses/lgpl.html,
! 27: or obtained by writing to the Free Software Foundation, Inc.,
! 28: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
! 29: */
! 30:
! 31: #include "lt__private.h"
! 32: #include "lt_error.h"
! 33:
! 34: static const char *last_error = 0;
! 35: static const char error_strings[LT_ERROR_MAX][LT_ERROR_LEN_MAX + 1] =
! 36: {
! 37: #define LT_ERROR(name, diagnostic) diagnostic,
! 38: lt_dlerror_table
! 39: #undef LT_ERROR
! 40: };
! 41:
! 42: static const char **user_error_strings = 0;
! 43: static int errorcount = LT_ERROR_MAX;
! 44:
! 45: int
! 46: lt_dladderror (const char *diagnostic)
! 47: {
! 48: int errindex = 0;
! 49: int result = -1;
! 50: const char **temp = (const char **) 0;
! 51:
! 52: assert (diagnostic);
! 53:
! 54: errindex = errorcount - LT_ERROR_MAX;
! 55: temp = REALLOC (const char *, user_error_strings, 1 + errindex);
! 56: if (temp)
! 57: {
! 58: user_error_strings = temp;
! 59: user_error_strings[errindex] = diagnostic;
! 60: result = errorcount++;
! 61: }
! 62:
! 63: return result;
! 64: }
! 65:
! 66: int
! 67: lt_dlseterror (int errindex)
! 68: {
! 69: int errors = 0;
! 70:
! 71: if (errindex >= errorcount || errindex < 0)
! 72: {
! 73: /* Ack! Error setting the error message! */
! 74: LT__SETERROR (INVALID_ERRORCODE);
! 75: ++errors;
! 76: }
! 77: else if (errindex < LT_ERROR_MAX)
! 78: {
! 79: /* No error setting the error message! */
! 80: LT__SETERRORSTR (error_strings[errindex]);
! 81: }
! 82: else
! 83: {
! 84: /* No error setting the error message! */
! 85: LT__SETERRORSTR (user_error_strings[errindex - LT_ERROR_MAX]);
! 86: }
! 87:
! 88: return errors;
! 89: }
! 90:
! 91: const char *
! 92: lt__error_string (int errorcode)
! 93: {
! 94: assert (errorcode >= 0);
! 95: assert (errorcode < LT_ERROR_MAX);
! 96:
! 97: return error_strings[errorcode];
! 98: }
! 99:
! 100: const char *
! 101: lt__get_last_error (void)
! 102: {
! 103: return last_error;
! 104: }
! 105:
! 106: const char *
! 107: lt__set_last_error (const char *errormsg)
! 108: {
! 109: return last_error = errormsg;
! 110: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>