1 /* usmb - mount SMB shares via FUSE and Samba
2 * Copyright (C) 2006-2009 Geoff Johnstone
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 3 as
6 * published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
30 char * concat_strings (int num
, ...)
36 base
= out
= malloc (INIT_LEN
);
40 size_t buff_size
= INIT_LEN
;
43 for (int i
= 0; i
< num
; ++i
)
45 const char *next
= va_arg (ap
, const char *);
46 assert (NULL
!= next
);
48 size_t next_len
= strlen (next
);
50 size_t required
= (out
- base
) + next_len
+ 1;
52 if (buff_size
< required
)
54 while (buff_size
< required
)
56 size_t dbl_len
= buff_size
* 2;
57 if (dbl_len
< buff_size
)
68 ptrdiff_t diff
= out
- base
;
70 char *newbase
= realloc (base
, buff_size
);
82 memcpy (out
, next
, next_len
);
92 char * xstrdup (const char *in
)
98 size_t len
= strlen (in
) + 1;
100 if ((out
= malloc (len
)))
101 memcpy (out
, in
, len
);
108 // the const here lets us pass a pointer to const
109 void xfree (const void *ptr
)
116 void clear_and_free (char *ptr
)
120 for (char *pch
= ptr
; '\0' != *pch
; ++pch
)
128 void free_errno (const void *ptr
)
136 void xfree_errno (const void *ptr
)