1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#pragma ident	"%Z%%M%	%I%	%E% SMI"
28
29#include <stdlib.h>
30#include <stdarg.h>
31#include <stdio.h>
32#include <errno.h>
33#include <string.h>
34
35#include "volume_error.h"
36
37#define	VOLUME_ERROR_BUFSIZE	1024
38static char	volume_error[VOLUME_ERROR_BUFSIZE];
39
40/*
41 * Retrieve the error string for the given error code.
42 *
43 * @param       error
44 *              If error is less than zero, it is assumed to be a
45 *              custom error code.  If error is greater than zero, it
46 *              is assumed to be an error defined in errno.h.
47 *
48 * @return      the error string set by volume_set_error()
49 *              if error < 0
50 *
51 * @return      the error string returned by strerror()
52 *              if error > 0
53 */
54char *
55get_error_string(
56	int error)
57{
58	if (error < 0) {
59	    return (volume_error);
60	}
61
62	if (error > 0) {
63	    return (strerror(error));
64	}
65
66	return (NULL);
67}
68
69/*
70 * Set the error string for the most recent error.  This message can
71 * be retrieved with get_error_string(error), assuming error is less
72 * than zero.
73 *
74 * @param       fmt
75 *              printf format string
76 *
77 * @return      the number of characters formatted
78 *              if successful
79 *
80 * @return      negative value
81 *              if an error occurred
82 */
83/*PRINTFLIKE1*/
84int
85volume_set_error(
86	char 	*fmt,
87	...)
88{
89	int ret = 0;
90
91	va_list ap;
92	va_start(ap, fmt);
93	ret = vsnprintf(volume_error, VOLUME_ERROR_BUFSIZE, fmt, ap);
94	va_end(ap);
95
96	return (ret);
97}
98