1 /*
2  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #pragma ident	"%Z%%M%	%I%	%E% SMI"
7 
8 #include <strings.h>
9 #include <scsi/libses.h>
10 
11 static const struct {
12 	char *se_name;		/* error name */
13 	char *se_msg;		/* error message */
14 } _ses_errstr[] = {
15 	{ "ESES_NONE",	"no error" },
16 	{ "ESES_NOMEM",	"no memory" },
17 	{ "ESES_ZERO_LENGTH","zero-length allocation requested" },
18 	{ "ESES_VERSION",	"library version mismatch" },
19 	{ "ESES_NVL",	"nvlist manipulation error" },
20 	{ "ESES_BAD_NODE",	"bad node" },
21 	{ "ESES_INVALID_OP","invalid operation" },
22 	{ "ESES_RANGE",	"value out of range" },
23 	{ "ESES_INVALID_PROP","nonexistent or immutable property" },
24 	{ "ESES_BAD_TYPE",	"incorrect property type" },
25 	{ "ESES_BAD_PAGE",	"bad page number" },
26 	{ "ESES_BAD_RESPONSE","bad response from target" },
27 	{ "ESES_BUSY",	"target busy" },
28 	{ "ESES_TOOMUCHCHANGE","target configuration changing too rapidly" },
29 	{ "ESES_LIBSCSI",	"SCSI error" },
30 	{ "ESES_NOTSUP",	"operation not supported" },
31 	{ "ESES_UNKNOWN",	"error of unknown type" },
32 	{ "ESES_CHANGED",	"generation count has changed" },
33 	{ "ESES_PLUGIN",	"invalid or missing plugin" },
34 	{ "ESES_MAX",	"maximum libses errno value" },
35 };
36 
37 static int _ses_nerrno = sizeof (_ses_errstr) / sizeof (_ses_errstr[0]);
38 
39 const char *
40 ses_strerror(ses_errno_t err)
41 {
42 	return (err < 0 || err >= _ses_nerrno ? "unknown error" :
43 	     _ses_errstr[err].se_msg);
44 }
45 
46 const char *
47 ses_errname(ses_errno_t err)
48 {
49 	return (err < 0 || err >= _ses_nerrno ? NULL :
50 	     _ses_errstr[err].se_name);
51 }
52 
53 ses_errno_t
54 ses_errcode(const char *name)
55 {
56 	ses_errno_t err;
57 
58 	for (err = 0; err < _ses_nerrno; err++) {
59 		if (strcmp(name, _ses_errstr[err].se_name) == 0)
60 			return (err);
61 	}
62 
63 	return (ESES_UNKNOWN);
64 }
65