Permalink
Newer
Older
100644 87 lines (75 sloc) 2.67 KB
1
#include "php.h"
3
#ifndef HAVE_STRLCAT
4
5
/* $OpenBSD: strlcat.c,v 1.2 1999/06/17 16:28:58 millert Exp $ */
6
7
/*
8
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
9
* All rights reserved.
10
*
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions
13
* are met:
14
* 1. Redistributions of source code must retain the above copyright
15
* notice, this list of conditions and the following disclaimer.
16
* 2. Redistributions in binary form must reproduce the above copyright
17
* notice, this list of conditions and the following disclaimer in the
18
* documentation and/or other materials provided with the distribution.
19
* 3. The name of the author may not be used to endorse or promote products
20
* derived from this software without specific prior written permission.
21
*
22
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
25
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
*/
33
34
#if defined(LIBC_SCCS) && !defined(lint)
35
static char *rcsid = "$OpenBSD: strlcat.c,v 1.2 1999/06/17 16:28:58 millert Exp $";
36
#endif /* LIBC_SCCS and not lint */
37
38
#include <sys/types.h>
39
#include <string.h>
40
41
/*
42
* Appends src to string dst of size siz (unlike strncat, siz is the
43
* full size of dst, not space left). At most siz-1 characters
44
* will be copied. Always NUL terminates (unless siz == 0).
45
* Returns strlen(src); if retval >= siz, truncation occurred.
46
*/
47
PHPAPI size_t php_strlcat(dst, src, siz)
48
char *dst;
49
const char *src;
50
size_t siz;
51
{
52
register char *d = dst;
53
register const char *s = src;
54
register size_t n = siz;
55
size_t dlen;
56
57
/* Find the end of dst and adjust bytes left but don't go past end */
58
while (*d != '\0' && n-- != 0)
59
d++;
60
dlen = d - dst;
61
n = siz - dlen;
62
63
if (n == 0)
64
return(dlen + strlen(s));
65
while (*s != '\0') {
66
if (n != 1) {
67
*d++ = *s;
68
n--;
69
}
70
s++;
71
}
72
*d = '\0';
73
74
return(dlen + (s - src)); /* count does not include NUL */
75
}
76
77
#endif /* !HAVE_STRLCAT */
78
79
/*
80
* Local variables:
81
* tab-width: 4
82
* c-basic-offset: 4
83
* End:
84
* vim600: sw=4 ts=4 fdm=marker
85
* vim<600: sw=4 ts=4