1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin *                                                                      *
3da2e3ebdSchin *               This software is part of the ast package               *
4*b30d1939SAndy Fiddaman *          Copyright (c) 1985-2011 AT&T Intellectual Property          *
5da2e3ebdSchin *                      and is licensed under the                       *
6*b30d1939SAndy Fiddaman *                 Eclipse Public License, Version 1.0                  *
77c2fbfb3SApril Chin *                    by AT&T Intellectual Property                     *
8da2e3ebdSchin *                                                                      *
9da2e3ebdSchin *                A copy of the License is available at                 *
10*b30d1939SAndy Fiddaman *          http://www.eclipse.org/org/documents/epl-v10.html           *
11*b30d1939SAndy Fiddaman *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
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  * Glenn Fowler
25da2e3ebdSchin  * AT&T Bell Laboratories
26da2e3ebdSchin  *
27da2e3ebdSchin  * single dir support for pathaccess()
28da2e3ebdSchin  */
29da2e3ebdSchin 
30*b30d1939SAndy Fiddaman #define _AST_API_H	1
31*b30d1939SAndy Fiddaman 
32da2e3ebdSchin #include <ast.h>
33da2e3ebdSchin 
34*b30d1939SAndy Fiddaman /*
35*b30d1939SAndy Fiddaman  * building 3d flirts with the dark side
36*b30d1939SAndy Fiddaman  */
37*b30d1939SAndy Fiddaman 
38*b30d1939SAndy Fiddaman #if _BLD_3d
39*b30d1939SAndy Fiddaman 
40*b30d1939SAndy Fiddaman #undef	pathcat
41*b30d1939SAndy Fiddaman #define pathcat_20100601	_3d_pathcat
42*b30d1939SAndy Fiddaman 
43*b30d1939SAndy Fiddaman #else
44*b30d1939SAndy Fiddaman 
45*b30d1939SAndy Fiddaman char*
pathcat(char * path,const char * dirs,int sep,const char * a,const char * b)46*b30d1939SAndy Fiddaman pathcat(char* path, const char* dirs, int sep, const char* a, const char* b)
47*b30d1939SAndy Fiddaman {
48*b30d1939SAndy Fiddaman 	return pathcat_20100601(dirs, sep, a, b, path, PATH_MAX);
49*b30d1939SAndy Fiddaman }
50*b30d1939SAndy Fiddaman 
51*b30d1939SAndy Fiddaman #endif
52*b30d1939SAndy Fiddaman 
53*b30d1939SAndy Fiddaman #undef	_AST_API
54*b30d1939SAndy Fiddaman 
55*b30d1939SAndy Fiddaman #include <ast_api.h>
56*b30d1939SAndy Fiddaman 
57da2e3ebdSchin char*
pathcat_20100601(register const char * dirs,int sep,const char * a,register const char * b,char * path,size_t size)58*b30d1939SAndy Fiddaman pathcat_20100601(register const char* dirs, int sep, const char* a, register const char* b, char* path, size_t size)
59da2e3ebdSchin {
60da2e3ebdSchin 	register char*	s;
61*b30d1939SAndy Fiddaman 	register char*	e;
62da2e3ebdSchin 
63da2e3ebdSchin 	s = path;
64*b30d1939SAndy Fiddaman 	e = path + size;
65da2e3ebdSchin 	while (*dirs && *dirs != sep)
66*b30d1939SAndy Fiddaman 	{
67*b30d1939SAndy Fiddaman 		if (s >= e)
68*b30d1939SAndy Fiddaman 			return 0;
69da2e3ebdSchin 		*s++ = *dirs++;
70*b30d1939SAndy Fiddaman 	}
71da2e3ebdSchin 	if (s != path)
72*b30d1939SAndy Fiddaman 	{
73*b30d1939SAndy Fiddaman 		if (s >= e)
74*b30d1939SAndy Fiddaman 			return 0;
75da2e3ebdSchin 		*s++ = '/';
76*b30d1939SAndy Fiddaman 	}
77da2e3ebdSchin 	if (a)
78da2e3ebdSchin 	{
79da2e3ebdSchin 		while (*s = *a++)
80*b30d1939SAndy Fiddaman 			if (++s >= e)
81*b30d1939SAndy Fiddaman 				return 0;
82da2e3ebdSchin 		if (b)
83*b30d1939SAndy Fiddaman 		{
84*b30d1939SAndy Fiddaman 			if (s >= e)
85*b30d1939SAndy Fiddaman 				return 0;
86da2e3ebdSchin 			*s++ = '/';
87*b30d1939SAndy Fiddaman 		}
88da2e3ebdSchin 	}
89da2e3ebdSchin 	else if (!b)
90da2e3ebdSchin 		b = ".";
91da2e3ebdSchin 	if (b)
92*b30d1939SAndy Fiddaman 		do
93*b30d1939SAndy Fiddaman 		{
94*b30d1939SAndy Fiddaman 			if (s >= e)
95*b30d1939SAndy Fiddaman 				return 0;
96*b30d1939SAndy Fiddaman 		} while (*s++ = *b++);
97da2e3ebdSchin 	return *dirs ? (char*)++dirs : 0;
98da2e3ebdSchin }
99