xref: /utopia/UTPA2-700.0.x/projects/build/scripts/dtc/util.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /*
2*53ee8cc1Swenshuai.xi  * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc.
3*53ee8cc1Swenshuai.xi  *
4*53ee8cc1Swenshuai.xi  * This program is free software; you can redistribute it and/or
5*53ee8cc1Swenshuai.xi  * modify it under the terms of the GNU General Public License as
6*53ee8cc1Swenshuai.xi  * published by the Free Software Foundation; either version 2 of the
7*53ee8cc1Swenshuai.xi  * License, or (at your option) any later version.
8*53ee8cc1Swenshuai.xi  *
9*53ee8cc1Swenshuai.xi  *  This program is distributed in the hope that it will be useful,
10*53ee8cc1Swenshuai.xi  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11*53ee8cc1Swenshuai.xi  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*53ee8cc1Swenshuai.xi  *  General Public License for more details.
13*53ee8cc1Swenshuai.xi  *
14*53ee8cc1Swenshuai.xi  *  You should have received a copy of the GNU General Public License
15*53ee8cc1Swenshuai.xi  *  along with this program; if not, write to the Free Software
16*53ee8cc1Swenshuai.xi  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
17*53ee8cc1Swenshuai.xi  *                                                                   USA
18*53ee8cc1Swenshuai.xi  */
19*53ee8cc1Swenshuai.xi 
20*53ee8cc1Swenshuai.xi #include <stdio.h>
21*53ee8cc1Swenshuai.xi #include <stdlib.h>
22*53ee8cc1Swenshuai.xi #include <stdarg.h>
23*53ee8cc1Swenshuai.xi #include <string.h>
24*53ee8cc1Swenshuai.xi 
25*53ee8cc1Swenshuai.xi #include "util.h"
26*53ee8cc1Swenshuai.xi 
xstrdup(const char * s)27*53ee8cc1Swenshuai.xi char *xstrdup(const char *s)
28*53ee8cc1Swenshuai.xi {
29*53ee8cc1Swenshuai.xi 	int len = strlen(s) + 1;
30*53ee8cc1Swenshuai.xi 	char *dup = xmalloc(len);
31*53ee8cc1Swenshuai.xi 
32*53ee8cc1Swenshuai.xi 	memcpy(dup, s, len);
33*53ee8cc1Swenshuai.xi 
34*53ee8cc1Swenshuai.xi 	return dup;
35*53ee8cc1Swenshuai.xi }
36*53ee8cc1Swenshuai.xi 
join_path(const char * path,const char * name)37*53ee8cc1Swenshuai.xi char *join_path(const char *path, const char *name)
38*53ee8cc1Swenshuai.xi {
39*53ee8cc1Swenshuai.xi 	int lenp = strlen(path);
40*53ee8cc1Swenshuai.xi 	int lenn = strlen(name);
41*53ee8cc1Swenshuai.xi 	int len;
42*53ee8cc1Swenshuai.xi 	int needslash = 1;
43*53ee8cc1Swenshuai.xi 	char *str;
44*53ee8cc1Swenshuai.xi 
45*53ee8cc1Swenshuai.xi 	len = lenp + lenn + 2;
46*53ee8cc1Swenshuai.xi 	if ((lenp > 0) && (path[lenp-1] == '/')) {
47*53ee8cc1Swenshuai.xi 		needslash = 0;
48*53ee8cc1Swenshuai.xi 		len--;
49*53ee8cc1Swenshuai.xi 	}
50*53ee8cc1Swenshuai.xi 
51*53ee8cc1Swenshuai.xi 	str = xmalloc(len);
52*53ee8cc1Swenshuai.xi 	memcpy(str, path, lenp);
53*53ee8cc1Swenshuai.xi 	if (needslash) {
54*53ee8cc1Swenshuai.xi 		str[lenp] = '/';
55*53ee8cc1Swenshuai.xi 		lenp++;
56*53ee8cc1Swenshuai.xi 	}
57*53ee8cc1Swenshuai.xi 	memcpy(str+lenp, name, lenn+1);
58*53ee8cc1Swenshuai.xi 	return str;
59*53ee8cc1Swenshuai.xi }
60