1/***********************************************************************
2*                                                                      *
3*               This software is part of the ast package               *
4*          Copyright (c) 1985-2011 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/*
25 * some systems may pull in <ast_common.h> and its <ast_map.h>
26 * which we are in the process of generating ... this prevents it
27 */
28
29#define _def_map_ast	1
30
31#include "FEATURE/lib"
32#include "FEATURE/mmap"
33#include "FEATURE/options"
34#include "FEATURE/vmalloc"
35#include "FEATURE/eaccess"
36#include "FEATURE/api"
37
38#if _opt_map_libc && !defined(_map_libc)
39#define _map_libc	1
40#endif
41
42int
43main()
44{
45	printf("#pragma prototyped\n");
46	printf("\n");
47	printf("/*\n");
48	printf(" * prototypes provided for standard interfaces hijacked\n");
49	printf(" * by ast and mapped to _ast_* but already prototyped\n");
50	printf(" * unmapped in native headers included by <ast_std.h>\n");
51	printf(" */\n");
52	printf("\n");
53	printf("#if _BLD_ast && defined(__EXPORT__)\n");
54	printf("#define extern		__EXPORT__\n");
55	printf("#endif\n");
56	printf("\n");
57#if __MVS__
58#undef	_map_libc
59#define _map_libc	1
60	printf("\n");
61	printf("/* mvs.390 libc.dll routines can't be intercepted by user dlls */\n");
62	printf("#undef	_mem_dd_fd_DIR\n");
63	printf("#undef	_typ_long_double\n");
64#endif
65#if _map_libc
66#undef	_map_malloc
67#define _map_malloc	1
68	printf("\n");
69	printf("#define	_map_libc	1\n");
70	printf("#undef	basename\n");
71	printf("#define basename	_ast_basename\n");
72	printf("#undef	dirname\n");
73	printf("#define dirname		_ast_dirname\n");
74#if !_lib_eaccess
75	printf("#undef	eaccess\n");
76	printf("#define eaccess		_ast_eaccess\n");
77#endif
78#if !_lib_execvpe
79	printf("#undef	execvpe\n");
80	printf("#define execvpe		_ast_execvpe\n");
81	printf("extern int		execvpe(const char*, char* const[], char* const[]);\n");
82#endif
83	printf("#undef	fnmatch\n");
84	printf("#define fnmatch		_ast_fnmatch\n");
85	printf("#undef	fts_children\n");
86	printf("#define fts_children    _ast_fts_children\n");
87	printf("#undef	fts_close\n");
88	printf("#define fts_close       _ast_fts_close\n");
89	printf("#undef	fts_flags\n");
90	printf("#define fts_flags       _ast_fts_flags\n");
91	printf("#undef	fts_notify\n");
92	printf("#define fts_notify      _ast_fts_notify\n");
93	printf("#undef	fts_open\n");
94	printf("#define fts_open	_ast_fts_open\n");
95	printf("#undef	fts_read\n");
96	printf("#define fts_read	_ast_fts_read\n");
97	printf("#undef	fts_set\n");
98	printf("#define fts_set		_ast_fts_set\n");
99	printf("#undef	ftw\n");
100	printf("#define ftw		_ast_ftw\n");
101	printf("#undef	ftwalk\n");
102	printf("#define ftwalk		_ast_ftwalk\n");
103	printf("#undef	ftwflags\n");
104	printf("#define ftwflags	_ast_ftwflags\n");
105#if !_WINIX
106	printf("#undef	getcwd\n");
107	printf("#define getcwd		_ast_getcwd\n");
108	printf("extern char*		getcwd(char*, size_t);\n");
109#endif
110	printf("#undef	getdate\n");
111	printf("#define getdate		_ast_getdate\n");
112#if _lib_getopt || _lib_getsubopt || _lib_getopt_long || _lib_getopt_long_only
113	printf("#undef	getopt\n");
114	printf("#define getopt		_ast_getopt\n");
115	printf("#undef	getsubopt\n");
116	printf("#define getsubopt       _ast_getsubopt\n");
117	printf("#undef	getopt_long\n");
118	printf("#define getopt_long	_ast_getopt_long\n");
119	printf("#undef	getopt_long_only\n");
120	printf("#define getopt_long_only _ast_getopt_long_only\n");
121	printf("#undef	optopt\n");
122	printf("#define optopt		_ast_optopt\n");
123	printf("#undef	optarg\n");
124	printf("#define optarg		_ast_optarg\n");
125	printf("#undef	optind\n");
126	printf("#define optind		_ast_optind\n");
127	printf("#undef	opterr\n");
128	printf("#define opterr		_ast_opterr\n");
129#endif
130	printf("#undef	getwd\n");
131	printf("#define getwd		_ast_getwd\n");
132	printf("extern char*		getwd(char*);\n");
133	printf("#undef	glob\n");
134	printf("#define glob		_ast_glob\n");
135	printf("#undef	globfree\n");
136	printf("#define globfree	_ast_globfree\n");
137	printf("#undef	memdup\n");
138	printf("#define memdup		_ast_memdup\n");
139	printf("#undef	memfatal\n");
140	printf("#define memfatal	_ast_memfatal\n");
141	printf("#undef	memhash\n");
142	printf("#define memhash		_ast_memhash\n");
143	printf("#undef	memsum\n");
144	printf("#define memsum		_ast_memsum\n");
145	printf("#undef	mkstemp\n");
146	printf("#define mkstemp		_ast_mkstemp\n");
147	printf("extern int		mkstemp(char*);\n");
148	printf("#undef	mktemp\n");
149	printf("#define mktemp		_ast_mktemp\n");
150	printf("extern char*		mktemp(char*);\n");
151	printf("#undef	mktime\n");
152	printf("#define mktime		_ast_mktime\n");
153	printf("#undef	nftw\n");
154	printf("#define nftw		_ast_nftw\n");
155	printf("#undef	optctx\n");
156	printf("#define optctx		_ast_optctx\n");
157	printf("#undef	optesc\n");
158	printf("#define optesc		_ast_optesc\n");
159	printf("#undef	optget\n");
160	printf("#define optget		_ast_optget\n");
161	printf("#undef	opthelp\n");
162	printf("#define opthelp		_ast_opthelp\n");
163	printf("#undef	optjoin\n");
164	printf("#define optjoin		_ast_optjoin\n");
165	printf("#undef	optstr\n");
166	printf("#define optstr		_ast_optstr\n");
167	printf("#undef	optusage\n");
168	printf("#define optusage	_ast_optusage\n");
169	printf("#undef	pathaccess\n");
170	printf("#define pathaccess	_ast_pathaccess\n");
171	printf("#undef	pathbin\n");
172	printf("#define pathbin		_ast_pathbin\n");
173	printf("#undef	pathcanon\n");
174	printf("#define pathcanon	_ast_pathcanon\n");
175	printf("#undef	pathcat\n");
176	printf("#define pathcat		_ast_pathcat\n");
177	printf("#undef	pathcd\n");
178	printf("#define pathcd		_ast_pathcd\n");
179	printf("#undef	pathcheck\n");
180	printf("#define pathcheck	_ast_pathcheck\n");
181	printf("#undef	pathexists\n");
182	printf("#define pathexists	_ast_pathexists\n");
183	printf("#undef	pathfind\n");
184	printf("#define pathfind	_ast_pathfind\n");
185	printf("#undef	pathgetlink\n");
186	printf("#define pathgetlink	_ast_pathgetlink\n");
187	printf("#undef	pathinclude\n");
188	printf("#define pathinclude	_ast_pathinclude\n");
189	printf("#undef	pathkey\n");
190	printf("#define pathkey		_ast_pathkey\n");
191	printf("#undef	pathnative\n");
192	printf("#define pathnative	_ast_pathnative\n");
193	printf("#undef	pathpath\n");
194	printf("#define pathpath	_ast_pathpath\n");
195	printf("#undef	pathposix\n");
196	printf("#define pathposix	_ast_pathposix\n");
197	printf("#undef	pathprobe\n");
198	printf("#define pathprobe	_ast_pathprobe\n");
199	printf("#undef	pathprog\n");
200	printf("#define pathprog	_ast_pathprog\n");
201	printf("#undef	pathrepl\n");
202	printf("#define pathrepl	_ast_pathrepl\n");
203	printf("#undef	pathsetlink\n");
204	printf("#define pathsetlink	_ast_pathsetlink\n");
205	printf("#undef	pathshell\n");
206	printf("#define pathshell	_ast_pathshell\n");
207	printf("#undef	pathstat\n");
208	printf("#define pathstat	_ast_pathstat\n");
209	printf("#undef	pathtemp\n");
210	printf("#define pathtemp	_ast_pathtemp\n");
211	printf("#undef	pathtmp\n");
212	printf("#define pathtmp		_ast_pathtmp\n");
213	printf("#undef	procclose\n");
214	printf("#define procclose	_ast_procclose\n");
215	printf("#undef	procfree\n");
216	printf("#define procfree	_ast_procfree\n");
217	printf("#undef	procopen\n");
218	printf("#define procopen	_ast_procopen\n");
219	printf("#undef	procrun\n");
220	printf("#define procrun		_ast_procrun\n");
221	printf("#undef	putenv\n");
222	printf("#define putenv		_ast_putenv\n");
223	printf("#undef	re_comp\n");
224	printf("#define re_comp		_ast_re_comp\n");
225	printf("#undef	re_exec\n");
226	printf("#define re_exec		_ast_re_exec\n");
227	printf("#undef	realpath\n");
228	printf("#define realpath	_ast_realpath\n");
229	printf("extern char*		realpath(const char*, char*);\n");
230	printf("#undef	regaddclass\n");
231	printf("#define regaddclass	_ast_regaddclass\n");
232	printf("#undef	regalloc\n");
233	printf("#define regalloc	_ast_regalloc\n");
234	printf("#undef	regcache\n");
235	printf("#define regcache	_ast_regcache\n");
236	printf("#undef	regclass\n");
237	printf("#define regclass	_ast_regclass\n");
238	printf("#undef	regcmp\n");
239	printf("#define regcmp		_ast_regcmp\n");
240	printf("#undef	regcollate\n");
241	printf("#define regcollate      _ast_regcollate\n");
242	printf("#undef	regcomb\n");
243	printf("#define regcomb		_ast_regcomb\n");
244	printf("#undef	regcomp\n");
245	printf("#define regcomp		_ast_regcomp\n");
246	printf("#undef	regdecomp\n");
247	printf("#define regdecomp	_ast_regdecomp\n");
248	printf("#undef	regdup\n");
249	printf("#define regdup		_ast_regdup\n");
250	printf("#undef	regerror\n");
251	printf("#define regerror	_ast_regerror\n");
252	printf("#undef	regex\n");
253	printf("#define regex		_ast_regex\n");
254	printf("#undef	regexec\n");
255	printf("#define regexec		_ast_regexec\n");
256	printf("#undef	regfatal\n");
257	printf("#define regfatal	_ast_regfatal\n");
258	printf("#undef	regfatalpat\n");
259	printf("#define regfatalpat     _ast_regfatalpat\n");
260	printf("#undef	regfree\n");
261	printf("#define regfree		_ast_regfree\n");
262	printf("#undef	regncomp\n");
263	printf("#define regncomp	_ast_regncomp\n");
264	printf("#undef	regnexec\n");
265	printf("#define regnexec	_ast_regnexec\n");
266	printf("#undef	regrecord\n");
267	printf("#define regrecord       _ast_regrecord\n");
268	printf("#undef	regrexec\n");
269	printf("#define regrexec	_ast_regrexec\n");
270	printf("#undef	regstat\n");
271	printf("#define regstat		_ast_regstat\n");
272	printf("#undef	regsub\n");
273	printf("#define regsub		_ast_regsub\n");
274	printf("#undef	regsubcomp\n");
275	printf("#define regsubcomp	_ast_regsubcomp\n");
276	printf("#undef	regsubexec\n");
277	printf("#define regsubexec	_ast_regsubexec\n");
278	printf("#undef	regsubflags\n");
279	printf("#define regsubflags	_ast_regsubflags\n");
280	printf("#undef	regsubfree\n");
281	printf("#define regsubfree	_ast_regsubfree\n");
282	printf("#undef	remove\n");
283	printf("#define remove		_ast_remove\n");
284	printf("extern int		remove(const char*);\n");
285	printf("#undef	resolvepath\n");
286	printf("#define resolvepath	_ast_resolvepath\n");
287	printf("extern int		resolvepath(const char*, char*, size_t);\n");
288	printf("#undef	setenv\n");
289	printf("#define setenv		_ast_setenv\n");
290	printf("extern int		setenv(const char*, const char*, int);\n");
291	printf("#undef	setenviron\n");
292	printf("#define setenviron      _ast_setenviron\n");
293	printf("#undef	sigcritical\n");
294	printf("#define sigcritical      _ast_sigcritical\n");
295	printf("#undef	signal\n");
296	printf("#define signal      	_ast_signal\n");
297	printf("#undef	sigunblock\n");
298	printf("#define sigunblock      _ast_sigunblock\n");
299	printf("#undef	stracmp\n");
300	printf("#define stracmp		_ast_stracmp\n");
301	printf("#undef	strcopy\n");
302	printf("#define strcopy		_ast_strcopy\n");
303	printf("#undef	strelapsed\n");
304	printf("#define strelapsed	_ast_strelapsed\n");
305	printf("#undef	stresc\n");
306	printf("#define stresc		_ast_stresc\n");
307	printf("#undef	streval\n");
308	printf("#define streval		_ast_streval\n");
309	printf("#undef	strexpr\n");
310	printf("#define strexpr		_ast_strexpr\n");
311	printf("#undef	strftime\n");
312	printf("#define strftime	_ast_strftime\n");
313	printf("#undef	strgid\n");
314	printf("#define strgid		_ast_strgid\n");
315	printf("#undef	strgrpmatch\n");
316	printf("#define strgrpmatch	_ast_strgrpmatch\n");
317	printf("#undef	strhash\n");
318	printf("#define strhash		_ast_strhash\n");
319	printf("#undef	strkey\n");
320	printf("#define strkey		_ast_strkey\n");
321	printf("#undef	strlcat\n");
322	printf("#define strlcat		_ast_strlcat\n");
323	printf("extern size_t		strlcat(char*, const char*, size_t);\n");
324	printf("#undef	strlcpy\n");
325	printf("#define strlcpy		_ast_strlcpy\n");
326	printf("extern size_t		strlcpy(char*, const char*, size_t);\n");
327	printf("#undef	strlook\n");
328	printf("#define strlook		_ast_strlook\n");
329	printf("#undef	strmatch\n");
330	printf("#define strmatch	_ast_strmatch\n");
331#endif
332#if _map_libc || _lib_strmode
333	printf("#undef	strmode\n");
334	printf("#define strmode		_ast_strmode\n");
335#endif
336#if _map_libc
337	printf("#undef	strnacmp\n");
338	printf("#define strnacmp	_ast_strnacmp\n");
339	printf("#undef	strncopy\n");
340	printf("#define strncopy	_ast_strncopy\n");
341	printf("#undef	strntod\n");
342	printf("#define strntod		_ast_strntod\n");
343	printf("#undef	strntol\n");
344	printf("#define strntol		_ast_strntol\n");
345	printf("#undef	strntold\n");
346	printf("#define strntold	_ast_strntold\n");
347	printf("#undef	strntoll\n");
348	printf("#define strntoll	_ast_strntoll\n");
349	printf("#undef	strntoul\n");
350	printf("#define strntoul	_ast_strntoul\n");
351	printf("#undef	strntoull\n");
352	printf("#define strntoull	_ast_strntoull\n");
353	printf("#undef	stropt\n");
354	printf("#define stropt		_ast_stropt\n");
355	printf("#undef	strperm\n");
356	printf("#define strperm		_ast_strperm\n");
357	printf("#undef	strpsearch\n");
358	printf("#define strpsearch	_ast_strpsearch\n");
359#if !_lib_strptime
360	printf("#undef	strptime\n");
361	printf("#define strptime	_ast_strptime\n");
362#endif
363	printf("#undef	strsearch\n");
364	printf("#define strsearch	_ast_strsearch\n");
365	printf("#undef	strsort\n");
366	printf("#define strsort		_ast_strsort\n");
367	printf("#undef	strsubmatch\n");
368	printf("#define strsubmatch	_ast_strsubmatch\n");
369	printf("#undef	strsum\n");
370	printf("#define strsum		_ast_strsum\n");
371	printf("#undef	strtape\n");
372	printf("#define strtape		_ast_strtape\n");
373	printf("#undef	strtoip4\n");
374	printf("#define strtoip4	_ast_strtoip4\n");
375	printf("#undef	strton\n");
376	printf("#define strton		_ast_strton\n");
377	printf("#undef	strtonll\n");
378	printf("#define strtonll	_ast_strtonll\n");
379	printf("#undef	struid\n");
380	printf("#define struid		_ast_struid\n");
381	printf("#undef	struniq\n");
382	printf("#define struniq		_ast_struniq\n");
383	printf("#undef	system\n");
384	printf("#define system		_ast_system\n");
385	printf("extern int		system(const char*);\n");
386	printf("#undef	tempnam\n");
387	printf("#define tempnam		_ast_tempnam\n");
388	printf("extern char*		tempnam(const char*, const char*);\n");
389	printf("#undef	tmpnam\n");
390	printf("#define tmpnam		_ast_tmpnam\n");
391	printf("extern char*		tmpnam(char*);\n");
392	printf("#undef	touch\n");
393	printf("#define touch		_ast_touch\n");
394	printf("#undef	wordexp\n");
395	printf("#define wordexp		_ast_wordexp\n");
396	printf("#undef	wordfree\n");
397	printf("#define wordfree	_ast_wordfree\n");
398	printf("#undef	unsetenv\n");
399	printf("#define unsetenv	_ast_unsetenv\n");
400#endif
401#if _std_malloc
402	printf("\n");
403	printf("/* no local malloc override */\n");
404	printf("#define	_std_malloc	1\n");
405#else
406#if _map_malloc
407	printf("\n");
408	printf("/* cannot override local malloc */\n");
409	printf("#define	_map_malloc	1\n");
410	printf("#undef	calloc\n");
411	printf("#define calloc		_ast_calloc\n");
412	printf("extern void*		calloc(size_t, size_t);\n");
413	printf("#undef	cfree\n");
414	printf("#define cfree		_ast_cfree\n");
415	printf("extern void		cfree(void*);\n");
416	printf("#undef	free\n");
417	printf("#define free		_ast_free\n");
418	printf("extern void		free(void*);\n");
419#if _lib_mallinfo
420	printf("#undef	mallinfo\n");
421	printf("#define mallinfo	_ast_mallinfo\n");
422#endif
423	printf("#undef	malloc\n");
424	printf("#define malloc		_ast_malloc\n");
425	printf("extern void*		malloc(size_t);\n");
426#if _lib_mallopt
427	printf("#undef	mallopt\n");
428	printf("#define mallopt		_ast_mallopt\n");
429#endif
430#if _lib_memalign
431	printf("#undef	memalign\n");
432	printf("#define memalign	_ast_memalign\n");
433	printf("extern void*		memalign(size_t, size_t);\n");
434#endif
435#if _lib_mstats
436	printf("#undef	mstats\n");
437	printf("#define mstats		_ast_mstats\n");
438#endif
439#if _lib_pvalloc
440	printf("#undef	pvalloc\n");
441	printf("#define pvalloc		_ast_pvalloc\n");
442#endif
443	printf("#undef	realloc\n");
444	printf("#define realloc		_ast_realloc\n");
445	printf("extern void*		realloc(void*, size_t);\n");
446	printf("#undef	strdup\n");
447	printf("#define strdup		_ast_strdup\n");
448	printf("extern char*		strdup(const char*);\n");
449#if _lib_valloc
450	printf("#undef	valloc\n");
451	printf("#define valloc		_ast_valloc\n");
452	printf("extern void*		valloc(size_t);\n");
453#endif
454#endif
455#endif
456
457	/*
458	 * overriding <stdlib.h> strto*() is problematic to say the least
459	 */
460
461#if _map_libc || _std_strtol
462#if !__CYGWIN__
463	printf("#undef	strtol\n");
464	printf("#define strtol		_ast_strtol\n");
465	printf("#undef	strtoul\n");
466	printf("#define strtoul		_ast_strtoul\n");
467#endif
468	printf("#undef	strtoll\n");
469	printf("#define strtoll		_ast_strtoll\n");
470	printf("#undef	strtoull\n");
471	printf("#define strtoull	_ast_strtoull\n");
472#endif
473#if _map_libc || _std_strtod
474	printf("#undef	strtod\n");
475	printf("#define strtod		_ast_strtod\n");
476#endif
477#if _map_libc || _std_strtold
478	printf("#undef	strtold\n");
479	printf("#define strtold		_ast_strtold\n");
480#endif
481#if !__CYGWIN__
482#if _npt_strtol || _map_libc || _std_strtol
483#if _npt_strtol && !_map_libc && !_std_strtol
484	printf("#ifndef _ISOC99_SOURCE\n");
485#endif
486	printf("extern long		strtol(const char*, char**, int);\n");
487#if _npt_strtol && !_map_libc && !_std_strtol
488	printf("#endif\n");
489#endif
490#endif
491#if _npt_strtoul || _map_libc || _std_strtol
492#if _npt_strtoul && !_map_libc && !_std_strtol
493	printf("#ifndef _ISOC99_SOURCE\n");
494#endif
495	printf("extern unsigned long	strtoul(const char*, char**, int);\n");
496#if _npt_strtoul && !_map_libc && !_std_strtol
497	printf("#endif\n");
498#endif
499#endif
500#endif
501#if _npt_strtod || _map_libc || _std_strtod
502#if _npt_strtod && !_map_libc && !_std_strtod
503	printf("#ifndef _ISOC99_SOURCE\n");
504#endif
505	printf("extern double		strtod(const char*, char**);\n");
506#if _npt_strtod && !_map_libc && !_std_strtod
507	printf("#endif\n");
508#endif
509#endif
510	printf("#if !_UWIN\n");
511	printf("#undef	extern\n");
512	printf("#endif\n");
513#if _npt_strtold || _map_libc || _std_strtold
514#if _npt_strtold && !_map_libc && !_std_strtold
515	printf("#ifndef _ISOC99_SOURCE\n");
516#endif
517	printf("extern _ast_fltmax_t	strtold(const char*, char**);\n");
518#if _npt_strtold && !_map_libc && !_std_strtold
519	printf("#endif\n");
520#endif
521#endif
522	printf("#undef	extern\n");
523#if _npt_strtoll || _map_libc || _std_strtol
524#if _npt_strtoll && !_map_libc && !_std_strtol
525	printf("#ifndef _ISOC99_SOURCE\n");
526#endif
527	printf("extern _ast_intmax_t		strtoll(const char*, char**, int);\n");
528#if _npt_strtoll && !_map_libc && !_std_strtol
529	printf("#endif\n");
530#endif
531#endif
532#if _npt_strtoull || _map_libc || _std_strtol
533#if _npt_strtoull && !_map_libc && !_std_strtol
534	printf("#ifndef _ISOC99_SOURCE\n");
535#endif
536	printf("extern unsigned _ast_intmax_t	strtoull(const char*, char**, int);\n");
537#if _npt_strtoull && !_map_libc && !_std_strtoul
538	printf("#endif\n");
539#endif
540#endif
541
542	/*
543	 * finally some features/api mediation
544	 */
545
546#if defined(_API_ast_MAP) && _map_libc
547	{
548		register const char*	s;
549		register const char*	t;
550
551		static const char	map[] = _API_ast_MAP;
552
553		printf("\n");
554		t = map;
555		do
556		{
557			for (s = t; *t && *t != ' '; t++);
558			printf("#define %-.*s	_ast_%-.*s\n", t - s, s, t - s, s);
559		} while (*t++);
560	}
561#endif
562	printf("\n");
563	printf("#undef	extern\n");
564	return 0;
565}
566