1#!/bin/sh
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance 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 2007 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26#ident	"@(#)mkerror.sh	1.1	06/02/11 SMI"
27
28#pragma ident	"%Z%%M%	%I%	%E% SMI"
29
30
31input="`cat`"
32[ -z "$input" ] && exit 1
33
34if [ $1 = "liberrors" ] ; then
35echo "\
36/*\n\
37 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.\n\
38 * Use is subject to license terms.\n\
39 */\n\
40\n\
41#pragma ident\t\"@(#)mkerror.sh\t1.2\t05/06/08 SMI\"\n\
42\n\
43#include <strings.h>
44#include <topo_error.h>
45#include <topo_mod.h>
46
47\n\
48static const char *const _topo_errstrs[] = {"
49
50pattern='^[ ]*ETOPO_[A-Z0-9_]*.*\* \(.*\) \*.*'
51replace='	"\1",'
52
53echo "$input" | sed -n "s/$pattern/$replace/p" || exit 1
54
55echo "\
56};\n\
57\n\
58static const int _topo_nerrstrs =\n\
59    sizeof (_topo_errstrs) / sizeof (_topo_errstrs[0]);\n\
60\n\
61
62int
63topo_hdl_errno(topo_hdl_t *thp)
64{
65	return (thp->th_errno);
66}
67
68int
69topo_hdl_seterrno(topo_hdl_t *thp, int err)
70{
71	thp->th_errno = err;
72	return (-1);
73}
74
75const char *
76topo_hdl_errmsg(topo_hdl_t *thp)
77{
78	return (topo_strerror(thp->th_errno));
79}"
80
81elif [ $1 = "properrors" ] ; then
82
83echo "\
84\n\
85static const char *const _topo_properrstrs[] = {"
86
87pattern='^[ ]*ETOPO_PROP_[A-Z0-9_]*.*\* \(.*\) \*.*'
88replace='	"\1",'
89
90echo "$input" | sed -n "s/$pattern/$replace/p" || exit 1
91
92echo "\
93};\n\
94\n\
95static const int _topo_nproperrstrs =\n\
96    sizeof (_topo_properrstrs) / sizeof (_topo_properrstrs[0]);"
97
98elif [ $1 = "methoderrors" ] ; then
99
100echo "\
101\n\
102static const char *const _topo_methoderrstrs[] = {"
103
104pattern='^[ ]*ETOPO_METHOD_[A-Z0-9_]*.*\* \(.*\) \*.*'
105replace='	"\1",'
106
107echo "$input" | sed -n "s/$pattern/$replace/p" || exit 1
108
109echo "\
110};\n\
111\n\
112static const int _topo_nmethoderrstrs =\n\
113    sizeof (_topo_methoderrstrs) / sizeof (_topo_methoderrstrs[0]);"
114
115elif [ $1 = "fmrierrors" ] ; then
116
117echo "\
118\n\
119static const char *const _topo_fmrierrstrs[] = {"
120
121pattern='^[ ]*ETOPO_FMRI_[A-Z0-9_]*.*\* \(.*\) \*.*'
122replace='	"\1",'
123
124echo "$input" | sed -n "s/$pattern/$replace/p" || exit 1
125
126echo "\
127};\n\
128\n\
129static const int _topo_nfmrierrstrs =\n\
130    sizeof (_topo_fmrierrstrs) / sizeof (_topo_fmrierrstrs[0]);"
131
132elif [ $1 = "hdlerrors" ] ; then
133
134echo "\
135\n\
136static const char *const _topo_hdlerrstrs[] = {"
137
138pattern='^[ ]*ETOPO_HDL_[A-Z0-9_]*.*\* \(.*\) \*.*'
139replace='	"\1",'
140
141echo "$input" | sed -n "s/$pattern/$replace/p" || exit 1
142
143echo "\
144};\n\
145\n\
146static const int _topo_nhdlerrstrs =\n\
147    sizeof (_topo_hdlerrstrs) / sizeof (_topo_hdlerrstrs[0]);"
148
149else
150
151echo "\
152\n\
153static const char *const _topo_moderrstrs[] = {"
154
155pattern='^[ ]*EMOD_[A-Z0-9_]*.*\* \(.*\) \*.*'
156replace='	"\1",'
157
158echo "$input" | sed -n "s/$pattern/$replace/p" || exit 1
159
160echo "\
161};\n\
162static const int _topo_nmoderrstrs =\n\
163    sizeof (_topo_moderrstrs) / sizeof (_topo_moderrstrs[0]);\n\
164\n\
165
166int
167topo_mod_errno(topo_mod_t *mp)
168{
169	return (mp->tm_errno);
170}
171
172int
173topo_mod_seterrno(topo_mod_t *mp, int err)
174{
175	mp->tm_errno = err;
176	return (-1);
177}
178
179const char *
180topo_mod_errmsg(topo_mod_t *mp)
181{
182	return (topo_strerror(mp->tm_errno));
183}
184
185const char *
186topo_strerror(int err)
187{
188	const char *s;
189
190	if (err >= ETOPO_UNKNOWN && (err - ETOPO_UNKNOWN) < _topo_nerrstrs)
191		s = _topo_errstrs[err - ETOPO_UNKNOWN];
192	else if (err >= EMOD_UNKNOWN && (err - EMOD_UNKNOWN) <
193	    _topo_nmoderrstrs)
194		s = _topo_moderrstrs[err - EMOD_UNKNOWN];
195	else if (err >= ETOPO_PROP_UNKNOWN && (err - ETOPO_PROP_UNKNOWN) <
196	    _topo_nproperrstrs)
197		s = _topo_properrstrs[err - ETOPO_PROP_UNKNOWN];
198	else if (err >= ETOPO_METHOD_UNKNOWN && (err - ETOPO_METHOD_UNKNOWN) <
199	    _topo_nmethoderrstrs)
200		s = _topo_methoderrstrs[err - ETOPO_METHOD_UNKNOWN];
201	else if (err >= ETOPO_HDL_UNKNOWN && (err - ETOPO_HDL_UNKNOWN) <
202	    _topo_nhdlerrstrs)
203		s = _topo_hdlerrstrs[err - ETOPO_HDL_UNKNOWN];
204	else if (err >= ETOPO_FMRI_UNKNOWN && (err - ETOPO_FMRI_UNKNOWN) <
205	    _topo_nfmrierrstrs)
206		s = _topo_fmrierrstrs[err - ETOPO_FMRI_UNKNOWN];
207	else
208		s = _topo_errstrs[0];
209
210	return (s);
211}"
212
213fi
214
215exit 0
216