0
|
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 2005 Sun Microsystems, Inc. All rights reserved.
|
|
24 * Use is subject to license terms.
|
|
25 */
|
|
26
|
|
27 /*
|
|
28 * Copyright (c) 2008 NEC Corporation
|
|
29 */
|
|
30
|
|
31 #ifndef _MISC_H
|
|
32 #define _MISC_H
|
|
33
|
|
34 #pragma ident "@(#)misc.h 1.17 05/12/06 SMI"
|
|
35
|
|
36 #ifdef __cplusplus
|
|
37 extern "C" {
|
|
38 #endif
|
|
39
|
|
40 /*
|
|
41 * This file contains declarations pertaining to the miscellaneous routines.
|
|
42 */
|
|
43 #include <setjmp.h>
|
|
44 #include <termios.h>
|
|
45
|
|
46 /*
|
|
47 * Define macros bzero and bcopy for convenience
|
|
48 */
|
|
49 #ifndef bzero
|
|
50 #define bzero(p, n) (void) memset((p), 0, (n))
|
|
51 #endif
|
|
52 #ifndef bcopy
|
|
53 #define bcopy(src, dst, n) (void) memcpy((dst), (src), (n))
|
|
54 #endif
|
|
55 #ifndef bcmp
|
|
56 #define bcmp(p1, p2, n) memcmp((p1), (p2), (n))
|
|
57 #endif
|
|
58
|
|
59 /*
|
|
60 * Minimum and maximum macros
|
|
61 */
|
|
62 #ifndef min
|
|
63 #define min(x, y) ((x) < (y) ? (x) : (y))
|
|
64 #endif /* min */
|
|
65 #ifndef max
|
|
66 #define max(x, y) ((x) > (y) ? (x) : (y))
|
|
67 #endif /* max */
|
|
68
|
|
69 /*
|
|
70 * This defines the structure of a saved environment. It consists of the
|
|
71 * environment itself, a pointer to the next environment on the stack, and
|
|
72 * flags to tell whether the environment is active, etc.
|
|
73 */
|
|
74 struct env {
|
|
75 jmp_buf env; /* environment buf */
|
|
76 struct env *ptr; /* ptr to next on list */
|
|
77 char flags; /* flags */
|
|
78 };
|
|
79 extern struct env *current_env;
|
|
80 /*
|
|
81 * This macro saves the current environment in the given structure and
|
|
82 * pushes the structure onto our enivornment stack. It initializes the
|
|
83 * flags to zero (inactive).
|
|
84 */
|
|
85 #define saveenv(x) { \
|
|
86 x.ptr = current_env; \
|
|
87 current_env = &x; \
|
|
88 (void) setjmp(x.env); \
|
|
89 x.flags = 0; \
|
|
90 }
|
|
91 /*
|
|
92 * This macro marks the environment on the top of the stack active. It
|
|
93 * assumes that there is an environment on the stack.
|
|
94 */
|
|
95 #define useenv() (current_env->flags |= ENV_USE)
|
|
96 /*
|
|
97 * This macro marks the environment on the top of the stack inactive. It
|
|
98 * assumes that there is an environment on the stack.
|
|
99 */
|
|
100 #define unuseenv() (current_env->flags &= ~ENV_USE)
|
|
101 /*
|
|
102 * This macro pops an environment off the top of the stack. It
|
|
103 * assumes that there is an environment on the stack.
|
|
104 */
|
|
105 #define clearenv() (current_env = current_env->ptr)
|
|
106 /*
|
|
107 * These are the flags for the environment struct.
|
|
108 */
|
|
109 #define ENV_USE 0x01 /* active */
|
|
110 #define ENV_CRITICAL 0x02 /* in critical zone */
|
|
111 #define ENV_ABORT 0x04 /* abort pending */
|
|
112
|
|
113 /*
|
|
114 * This structure is used to keep track of the state of the tty. This
|
|
115 * is necessary because some of the commands turn off echoing.
|
|
116 */
|
|
117 struct ttystate {
|
|
118 struct termios ttystate; /* buffer for ioctls */
|
|
119 int ttyflags; /* changes to tty state */
|
|
120 int ttyfile; /* file for ioctls */
|
|
121 int vmin; /* min read satisfier */
|
|
122 int vtime; /* read timing */
|
|
123 };
|
|
124
|
|
125 /*
|
|
126 * ttyflags - changes we can make to the tty state.
|
|
127 */
|
|
128 #define TTY_ECHO_OFF 0x01 /* turned echo off */
|
|
129 #define TTY_CBREAK_ON 0x02 /* turned cbreak on */
|
|
130
|
|
131 /*
|
|
132 * This is the number lines assumed for the tty. It is designed to work
|
|
133 * on terminals as well as sun monitors.
|
|
134 */
|
|
135 #define TTY_LINES 24
|
|
136
|
|
137 /*
|
|
138 * format parameter to dump()
|
|
139 */
|
|
140 #define HEX_ONLY 0 /* print hex only */
|
|
141 #define HEX_ASCII 1 /* hex and ascii */
|
|
142
|
|
143
|
|
144 /*
|
|
145 * Prototypes for ANSI C
|
|
146 */
|
|
147 void *zalloc(int count);
|
|
148 void *rezalloc(void *ptr, int count);
|
|
149 void destroy_data(char *data);
|
|
150 int check(char *question);
|
|
151 void cmdabort(int sig);
|
|
152 void onsusp(int sig);
|
|
153 void onalarm(int sig);
|
|
154 void fullabort(void) __NORETURN;
|
|
155 void enter_critical(void);
|
|
156 void exit_critical(void);
|
|
157 void echo_off(void);
|
|
158 void echo_on(void);
|
|
159 void charmode_on(void);
|
|
160 void charmode_off(void);
|
|
161 char *alloc_string(char *s);
|
|
162 char **build_argvlist(char **, int *, int *, char *);
|
|
163 int conventional_name(char *name);
|
|
164
|
|
165 #if defined(_FIRMWARE_NEEDS_FDISK)
|
|
166 int fdisk_physical_name(char *name);
|
|
167 #if defined(_EXTFDISK_PARTITION) && (_EXTFDISK_PARTITION > 0)
|
|
168 int fdisk_logical_name(char *name);
|
|
169 #endif /* defined(_EXTFDISK_PARTITION) && (_EXTFDISK_PARTITION > 0) */
|
|
170 #endif /* defined(_FIRMWARE_NEEDS_FDISK) */
|
|
171
|
|
172 int whole_disk_name(char *name);
|
|
173 int canonical_name(char *name);
|
|
174 int canonical4x_name(char *name);
|
|
175 void canonicalize_name(char *dst, char *src);
|
|
176 int match_substr(char *s1, char *s2);
|
|
177 void dump(char *, caddr_t, int, int);
|
|
178 float bn2mb(uint64_t);
|
|
179 uint_t mb2bn(float);
|
|
180 float bn2gb(uint64_t);
|
|
181 float bn2tb(uint64_t);
|
|
182 uint_t gb2bn(float);
|
|
183 int get_tty_lines();
|
|
184
|
|
185
|
|
186 /*
|
|
187 * Macro to handle internal programming errors that
|
|
188 * should "never happen".
|
|
189 */
|
|
190 #define impossible(msg) {err_print("Internal error: file %s, line %d: %s\n", \
|
|
191 __FILE__, __LINE__, msg); \
|
|
192 fullabort(); }
|
|
193
|
|
194
|
|
195 extern char *confirm_list[];
|
|
196
|
|
197 /*
|
|
198 * This defines the size of the blind selection verfication prompt
|
|
199 */
|
|
200
|
|
201 #define BLIND_SELECT_VER_PROMPT (43 + MAXNAMELEN)
|
|
202
|
|
203 #ifdef __cplusplus
|
|
204 }
|
|
205 #endif
|
|
206
|
|
207 #endif /* _MISC_H */
|