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