xref: /titanic_44/usr/src/lib/libast/common/include/ast_std.h (revision c39526b769298791ff5b0b6c5e761f49aabaeb4e)
1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 1985-2010 AT&T Intellectual Property          *
5 *                      and is licensed under the                       *
6 *                  Common Public License, Version 1.0                  *
7 *                    by AT&T Intellectual Property                     *
8 *                                                                      *
9 *                A copy of the License is available at                 *
10 *            http://www.opensource.org/licenses/cpl1.0.txt             *
11 *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12 *                                                                      *
13 *              Information and Software Systems Research               *
14 *                            AT&T Research                             *
15 *                           Florham Park NJ                            *
16 *                                                                      *
17 *                 Glenn Fowler <gsf@research.att.com>                  *
18 *                  David Korn <dgk@research.att.com>                   *
19 *                   Phong Vo <kpv@research.att.com>                    *
20 *                                                                      *
21 ***********************************************************************/
22 #pragma prototyped
23 /*
24  * Advanced Software Technology Library
25  * AT&T Research
26  *
27  * a union of standard headers that works
28  * with local extensions enabled
29  * and local omission compensation
30  */
31 
32 #ifndef _AST_STD_H
33 #define _AST_STD_H		1
34 #define _AST_STD_I		1
35 
36 #include <ast_common.h>
37 
38 #if _BLD_ast
39 #define _BLD_cdt	1
40 #define _BLD_sfio	1
41 #if !_UWIN
42 #define _BLD_vmalloc	1
43 #endif
44 #endif
45 
46 #ifdef	_SFSTDIO_H
47 #define _SKIP_SFSTDIO_H
48 #else
49 #define _SFSTDIO_H
50 #ifndef FILE
51 #ifndef _SFIO_H
52 struct _sfio_s;
53 #endif
54 #define FILE		struct _sfio_s
55 #ifndef	__FILE_typedef
56 #define __FILE_typedef	1
57 #endif
58 #ifndef _FILEDEFED
59 #define _FILEDEFED	1
60 #endif
61 #endif
62 #endif
63 
64 #include <ast_lib.h>
65 #include <ast_sys.h>
66 #include <ast_getopt.h>	/* <stdlib.h> does this */
67 #include <ast_fcntl.h>
68 #include <ast_limits.h>
69 #include <ast_botch.h>
70 
71 #ifdef	_SKIP_SFSTDIO_H
72 #undef	_SKIP_SFSTDIO_H
73 #else
74 #undef	_SFSTDIO_H
75 #undef	FILE
76 #endif
77 
78 /* locale stuff */
79 
80 #if !_hdr_locale
81 
82 struct lconv
83 {
84 	char*	decimal_point;
85 	char*	thousands_sep;
86 	char*	grouping;
87 	char*	int_curr_symbol;
88 	char*	currency_symbol;
89 	char*	mon_decimal_point;
90 	char*	mon_thousands_sep;
91 	char*	mon_grouping;
92 	char*	positive_sign;
93 	char*	negative_sign;
94 	char	int_frac_digits;
95 	char	frac_digits;
96 	char	p_cs_precedes;
97 	char	p_sep_by_space;
98 	char	n_cs_precedes;
99 	char	n_sep_by_space;
100 	char	p_sign_posn;
101 	char	n_sign_posn;
102 };
103 
104 #endif
105 
106 #if _BLD_ast && defined(__EXPORT__)
107 #define extern		__EXPORT__
108 #endif
109 
110 #if !_UWIN /* for ast54 compatibility */
111 
112 #undef	getenv
113 #define getenv		_ast_getenv
114 
115 #undef	setenviron
116 #define setenviron	_ast_setenviron
117 
118 extern char*		getenv(const char*);
119 
120 #endif
121 
122 #undef	localeconv
123 #define localeconv	_ast_localeconv
124 
125 #undef	setlocale
126 #define setlocale	_ast_setlocale
127 
128 #undef	strerror
129 #define strerror	_ast_strerror
130 
131 extern struct lconv*	localeconv(void);
132 extern char*		setenviron(const char*);
133 extern char*		setlocale(int, const char*);
134 extern char*		strerror(int);
135 
136 #define AST_MESSAGE_SET		3	/* see <mc.h> mcindex()		*/
137 
138 /*
139  * maintain this order when adding categories
140  */
141 
142 #define AST_LC_ALL		0
143 #define AST_LC_COLLATE		1
144 #define AST_LC_CTYPE		2
145 #define AST_LC_MESSAGES		3
146 #define AST_LC_MONETARY		4
147 #define AST_LC_NUMERIC		5
148 #define AST_LC_TIME		6
149 #define AST_LC_IDENTIFICATION	7
150 #define AST_LC_ADDRESS		8
151 #define AST_LC_NAME		9
152 #define AST_LC_TELEPHONE	10
153 #define AST_LC_XLITERATE	11
154 #define AST_LC_MEASUREMENT	12
155 #define AST_LC_PAPER		13
156 #define AST_LC_COUNT		14
157 #define AST_LC_LANG		255
158 
159 #define AST_LC_internal		1
160 #define AST_LC_setenv		(1L<<27)
161 #define AST_LC_find		(1L<<28)
162 #define AST_LC_debug		(1L<<29)
163 #define AST_LC_setlocale	(1L<<30)
164 #define AST_LC_translate	(1L<<31)
165 
166 #ifndef LC_ALL
167 #define LC_ALL			(-AST_LC_ALL)
168 #endif
169 #ifndef LC_COLLATE
170 #define LC_COLLATE		(-AST_LC_COLLATE)
171 #endif
172 #ifndef LC_CTYPE
173 #define LC_CTYPE		(-AST_LC_CTYPE)
174 #endif
175 #ifndef LC_MESSAGES
176 #define LC_MESSAGES		(-AST_LC_MESSAGES)
177 #endif
178 #ifndef LC_MONETARY
179 #define LC_MONETARY		(-AST_LC_MONETARY)
180 #endif
181 #ifndef LC_NUMERIC
182 #define LC_NUMERIC		(-AST_LC_NUMERIC)
183 #endif
184 #ifndef LC_TIME
185 #define LC_TIME			(-AST_LC_TIME)
186 #endif
187 #ifndef LC_ADDRESS
188 #define LC_ADDRESS		(-AST_LC_ADDRESS)
189 #endif
190 #ifndef LC_IDENTIFICATION
191 #define LC_IDENTIFICATION	(-AST_LC_IDENTIFICATION)
192 #endif
193 #ifndef LC_NAME
194 #define LC_NAME			(-AST_LC_NAME)
195 #endif
196 #ifndef LC_TELEPHONE
197 #define LC_TELEPHONE		(-AST_LC_TELEPHONE)
198 #endif
199 #ifndef LC_XLITERATE
200 #define LC_XLITERATE		(-AST_LC_XLITERATE)
201 #endif
202 #ifndef LC_MEASUREMENT
203 #define LC_MEASUREMENT		(-AST_LC_MEASUREMENT)
204 #endif
205 #ifndef LC_PAPER
206 #define LC_PAPER		(-AST_LC_PAPER)
207 #endif
208 #ifndef LC_LANG
209 #define LC_LANG			(-AST_LC_LANG)
210 #endif
211 
212 #undef	extern
213 
214 #undef	strcoll
215 #if _std_strcoll
216 #define strcoll		_ast_info.collate
217 #else
218 #define strcoll		strcmp
219 #endif
220 
221 typedef struct
222 {
223 
224 	char*		id;
225 
226 	struct
227 	{
228 	uint32_t	serial;
229 	uint32_t	set;
230 	}		locale;
231 
232 	long		tmp_long;
233 	size_t		tmp_size;
234 	short		tmp_short;
235 	char		tmp_char;
236 	wchar_t		tmp_wchar;
237 
238 	int		(*collate)(const char*, const char*);
239 
240 	int		tmp_int;
241 	void*		tmp_pointer;
242 
243 	int		mb_cur_max;
244 	int		(*mb_len)(const char*, size_t);
245 	int		(*mb_towc)(wchar_t*, const char*, size_t);
246 	size_t		(*mb_xfrm)(char*, const char*, size_t);
247 	int		(*mb_width)(wchar_t);
248 	int		(*mb_conv)(char*, wchar_t);
249 
250 	uint32_t	env_serial;
251 	uint32_t	mb_sync;
252 	uint32_t	version;
253 
254 	char		pad[936];
255 
256 } _Ast_info_t;
257 
258 #if _BLD_ast && defined(__EXPORT__)
259 #define extern		extern __EXPORT__
260 #endif
261 #if !_BLD_ast && defined(__IMPORT__)
262 #define extern		extern __IMPORT__
263 #endif
264 
265 extern _Ast_info_t	_ast_info;
266 
267 #undef	extern
268 
269 /* largefile hackery -- ast uses the large versions by default */
270 
271 #if _typ_off64_t
272 #undef	off_t
273 #define off_t		off64_t
274 #endif
275 #if !defined(ftruncate) && _lib_ftruncate64
276 #define ftruncate	ftruncate64
277 extern int		ftruncate64(int, off64_t);
278 #endif
279 #if !defined(lseek) && _lib_lseek64
280 #define lseek		lseek64
281 extern off64_t		lseek64(int, off64_t, int);
282 #endif
283 #if !defined(truncate) && _lib_truncate64
284 #define truncate	truncate64
285 extern int		truncate64(const char*, off64_t);
286 #endif
287 
288 /* direct macro access for bsd crossover */
289 
290 #if !defined(__cplusplus)
291 
292 #if !defined(memcpy) && !defined(_lib_memcpy) && defined(_lib_bcopy)
293 #define memcpy(t,f,n)	(bcopy(f,t,n),(t))
294 #endif
295 
296 #if !defined(memzero) && !defined(_lib_memzero)
297 #if defined(_lib_memset) || !defined(_lib_bzero)
298 #define memzero(b,n)	memset(b,0,n)
299 #else
300 #define memzero(b,n)	(bzero(b,n),(b))
301 #endif
302 #endif
303 
304 #endif
305 
306 #if !defined(remove)
307 extern int		remove(const char*);
308 #endif
309 
310 #if !defined(rename)
311 extern int		rename(const char*, const char*);
312 #endif
313 
314 #if !defined(strchr) && !defined(_lib_strchr) && defined(_lib_index)
315 #define strchr(s,c)	index(s,c)
316 #endif
317 
318 #if !defined(strrchr) && !defined(_lib_strrchr) && defined(_lib_rindex)
319 #define strrchr(s,c)	rindex(s,c)
320 #endif
321 
322 /* and now introducing prototypes botched by the standard(s) */
323 
324 #if _BLD_ast && defined(__EXPORT__)
325 #define extern		__EXPORT__
326 #endif
327 
328 #undef	getpgrp
329 #define	getpgrp()	_ast_getpgrp()
330 extern int		_ast_getpgrp(void);
331 
332 #undef	extern
333 
334 /*
335  * and finally, standard interfaces hijacked by ast
336  * _AST_STD_I delays headers that require <ast_map.h>
337  */
338 
339 #include <ast_map.h>
340 
341 #undef	_AST_STD_I
342 
343 #if _AST_GETOPT_H < 0
344 #undef	_AST_GETOPT_H
345 #include <ast_getopt.h>
346 #endif
347 
348 #if _GETOPT_H < 0
349 #undef	_GETOPT_H
350 #include <getopt.h>
351 #endif
352 
353 #if _REGEX_H < 0
354 #undef	_REGEX_H
355 #include <regex.h>
356 #endif
357 
358 #endif
359