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