1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#include <stdlib.h>
#include <string.h>
#include "fileserv.h"
char *
catfile_suf_n(char const *dir, size_t len, char const *file, char const *suf)
{
size_t flen, slen;
char *res;
while (len > 0 && dir[len-1] == '/')
len--;
while (*file == '/')
file++;
flen = strlen(file);
while (flen && file[flen-1] == '/')
--flen;
slen = suf ? strlen(suf) : 0;
res = malloc(len + flen + slen + 2);
if (res) {
char *p;
memcpy(res, dir, len);
p = res + len;
if (flen) {
*p++ = '/';
memcpy(p, file, flen);
p += flen;
}
if (slen) {
memcpy(p, suf, slen);
p += slen;
}
*p = 0;
} else
alloc_warn();
return res;
}
char *
catfile_n(char const *dir, size_t len, char const *file)
{
return catfile_suf_n(dir, len, file, NULL);
}
char *
catfile_suf(char const *dir, char const *file, char const *suf)
{
return catfile_suf_n(dir, strlen(dir), file, suf);
}
char *
catfile(char const *dir, char const *file)
{
return catfile_n(dir, strlen(dir), file);
}
|