No empty .Rs/.Re
[netbsd-mini2440.git] / crypto / dist / heimdal / lib / krb5 / error_string.c
blob77d16e3bef107d5b3137052ef20fe416517dac6e
1 /*
2 * Copyright (c) 2001, 2003, 2005 - 2006 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the Institute nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
34 #include "krb5_locl.h"
36 __RCSID("$Heimdal: error_string.c 22142 2007-12-04 16:56:02Z lha $"
37 "$NetBSD$");
39 #undef __attribute__
40 #define __attribute__(X)
42 void KRB5_LIB_FUNCTION
43 krb5_free_error_string(krb5_context context, char *str)
45 HEIMDAL_MUTEX_lock(context->mutex);
46 if (str != context->error_buf)
47 free(str);
48 HEIMDAL_MUTEX_unlock(context->mutex);
51 void KRB5_LIB_FUNCTION
52 krb5_clear_error_string(krb5_context context)
54 HEIMDAL_MUTEX_lock(context->mutex);
55 if (context->error_string != NULL
56 && context->error_string != context->error_buf)
57 free(context->error_string);
58 context->error_string = NULL;
59 HEIMDAL_MUTEX_unlock(context->mutex);
62 krb5_error_code KRB5_LIB_FUNCTION
63 krb5_set_error_string(krb5_context context, const char *fmt, ...)
64 __attribute__((format (printf, 2, 3)))
66 krb5_error_code ret;
67 va_list ap;
69 va_start(ap, fmt);
70 ret = krb5_vset_error_string (context, fmt, ap);
71 va_end(ap);
72 return ret;
75 krb5_error_code KRB5_LIB_FUNCTION
76 krb5_vset_error_string(krb5_context context, const char *fmt, va_list args)
77 __attribute__ ((format (printf, 2, 0)))
79 krb5_clear_error_string(context);
80 HEIMDAL_MUTEX_lock(context->mutex);
81 vasprintf(&context->error_string, fmt, args);
82 if(context->error_string == NULL) {
83 vsnprintf (context->error_buf, sizeof(context->error_buf), fmt, args);
84 context->error_string = context->error_buf;
86 HEIMDAL_MUTEX_unlock(context->mutex);
87 return 0;
90 /**
91 * Return the error message in context. On error or no error string,
92 * the function returns NULL.
94 * @param context Kerberos 5 context
96 * @return an error string, needs to be freed with
97 * krb5_free_error_string(). The functions return NULL on error.
99 * @ingroup krb5_error
102 char * KRB5_LIB_FUNCTION
103 krb5_get_error_string(krb5_context context)
105 char *ret = NULL;
107 HEIMDAL_MUTEX_lock(context->mutex);
108 if (context->error_string)
109 ret = strdup(context->error_string);
110 HEIMDAL_MUTEX_unlock(context->mutex);
111 return ret;
114 krb5_boolean KRB5_LIB_FUNCTION
115 krb5_have_error_string(krb5_context context)
117 char *str;
118 HEIMDAL_MUTEX_lock(context->mutex);
119 str = context->error_string;
120 HEIMDAL_MUTEX_unlock(context->mutex);
121 return str != NULL;
125 * Return the error message for `code' in context. On error the
126 * function returns NULL.
128 * @param context Kerberos 5 context
129 * @param code Error code related to the error
131 * @return an error string, needs to be freed with
132 * krb5_free_error_string(). The functions return NULL on error.
134 * @ingroup krb5_error
137 char * KRB5_LIB_FUNCTION
138 krb5_get_error_message(krb5_context context, krb5_error_code code)
140 const char *cstr;
141 char *str;
143 str = krb5_get_error_string(context);
144 if (str)
145 return str;
147 cstr = krb5_get_err_text(context, code);
148 if (cstr)
149 return strdup(cstr);
151 if (asprintf(&str, "<unknown error: %d>", code) == -1)
152 return NULL;
154 return str;