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 (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26 #ifndef _SPCS_S_U_H
27 #define _SPCS_S_U_H
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 /*
34 * USER level status support utilities
35 */
36
37 #include <stdio.h>
38
39 /*
40 * Create and initialize local status. Call this prior to invoking
41 * an ioctl
42 * @return The status or NULL if malloc failed
43 */
44
45 spcs_s_info_t
46 spcs_s_ucreate();
47
48 /*
49 * Initialize ioctl status storage to "remove" any status present
50 * @param ustatus The status
51 */
52
53 void
54 spcs_s_uinit(spcs_s_info_t ustatus);
55
56 /*
57 * Return a string with the module label and next status message text or
58 * NULL if none left. Supplemental values are edited into the text and
59 * the used status and values are removed so that subsequent calls will
60 * access the next piece of information.
61 * Note that status codes and supplemental values are processed in
62 * the reverse order of their insertion by SPCS kernel code. That is,
63 * spcs_s_string returns the "youngest" status information first (i.e.
64 * LIFO).
65 * Note that spcs_s_string will not have any error information in
66 * the special case where Solaris has aborted an ioctl and returned an
67 * error code via errno or the ioctl service code had an "early" error
68 * from copyin or could not allocate its status area. In this case
69 * spcs_s_string will return NULL the first time it is called and a
70 * positive integer error code will be present in errno and should get
71 * handled by the spcs_s_string caller appropriately by using strerror.
72 * @param ustatus The status
73 * @param msg A char array of at least SPCS_S_MAXTEXT length
74 * @return status message string or NULL if no more status present
75 */
76
77 char *spcs_s_string(spcs_s_info_t ustatus, char *msg);
78
79 /*
80 * Write status info to the file specified
81 * Uses spsc_s_string to edit status into strings and output them
82 * to the file specifed in the same order that the status was inserted.
83 * If there is no status present but errno contains a positive value
84 * then it will be treated as a Solaris error code and its message text
85 * will be written. Note that this routine does NOT remove status
86 * information so it can be called more than once.
87 * @param ustatus The status
88 * @param fd The file descriptor to use for output
89 */
90
91 void spcs_s_report(spcs_s_info_t ustatus, FILE *fd);
92
93 /*
94 * Release (free) ioctl status storage.
95 * Note that this interface is an extension to SPARC 1998/038 10/22/98
96 * commitment.
97 * @param ustatus_a The address of the status (set to NULL)
98 */
99
100 void
101 spcs_s_ufree(spcs_s_info_t *ustatus_a);
102
103 /*
104 * Write message to log file.
105 * @param product Product code for tagging in log file.
106 * @param ustatus The status - may be NULL.
107 * @param format printf style format.
108 */
109
110 void
111 spcs_log(const char *product, spcs_s_info_t *ustatus, const char *format, ...);
112
113 #ifdef __cplusplus
114 }
115 #endif
116
117 #endif /* _SPCS_S_U_H */