xref: /titanic_50/usr/src/cmd/fm/fmd/common/mkerror.sh (revision 174bc6499d233e329ecd3d98a880a7b07df16bfa)
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, Version 1.0 only
7# (the "License").  You may not use this file except in compliance
8# with the License.
9#
10# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
11# or http://www.opensolaris.org/os/licensing.
12# See the License for the specific language governing permissions
13# and limitations under the License.
14#
15# When distributing Covered Code, include this CDDL HEADER in each
16# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
17# If applicable, add the following below this CDDL HEADER, with the
18# fields enclosed by brackets "[]" replaced with your own identifying
19# information: Portions Copyright [yyyy] [name of copyright owner]
20#
21# CDDL HEADER END
22#
23#
24# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
25# Use is subject to license terms.
26#
27#ident	"%Z%%M%	%I%	%E% SMI"
28
29#pragma ident	"%Z%%M%	%I%	%E% SMI"
30
31input="`cat`"
32[ -z "$input" ] && exit 1
33
34echo "\
35/*\n\
36 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.\n\
37 * Use is subject to license terms.\n\
38 */\n\
39\n\
40#pragma ident\t\"%Z%%M%\t%I%\t%E% SMI\"\n\
41\n\
42#include <strings.h>
43#include <fmd_error.h>
44\n\
45static const char *const _fmd_ereports[] = {"
46
47pattern='^[ ]*EFMD_\([A-Z0-9_]*\).*,*'
48replace='	"ereport.fm.fmd.\1",'
49
50echo "$input" | sed -n "s/$pattern/$replace/p" | tr '[A-Z]' '[a-z]' || exit 1
51
52echo "\
53};\n\
54\n\
55static const char *const _fmd_errstrs[] = {"
56
57pattern='^[ ]*EFMD_[A-Z0-9_]*.*\* \(.*\) \*.*'
58replace='	"\1",'
59
60echo "$input" | sed -n "s/$pattern/$replace/p" || exit 1
61
62echo "\
63};\n\
64\n\
65static const int _fmd_nereports =\n\
66    sizeof (_fmd_ereports) / sizeof (_fmd_ereports[0]);\n\
67\n\
68static const int _fmd_nerrstrs =\n\
69    sizeof (_fmd_errstrs) / sizeof (_fmd_errstrs[0]);\n\
70\n\
71const char *
72fmd_errclass(int err)
73{
74	const char *c;
75
76	if (err >= EFMD_UNKNOWN && (err - EFMD_UNKNOWN) < _fmd_nereports)
77		c = _fmd_ereports[err - EFMD_UNKNOWN];
78	else
79		c = _fmd_ereports[0];
80
81	return (c);
82}
83
84const char *
85fmd_strerror(int err)
86{
87	const char *s;
88
89	if (err >= EFMD_UNKNOWN && (err - EFMD_UNKNOWN) < _fmd_nerrstrs)
90		s = _fmd_errstrs[err - EFMD_UNKNOWN];
91	else if (err < 0 || (s = strerror(err)) == NULL)
92		s = _fmd_errstrs[0];
93
94	return (s);
95}
96
97int
98fmd_set_errno(int err)
99{
100	errno = err;
101	return (-1);
102}"
103
104exit 0
105