Ruby
2.7.6p219 (2022-04-12 revision c9c2245c0a25176072e02db9254f0e0c84c805cd)
missing
strlcat.c
Go to the documentation of this file.
1
/* $OpenBSD: strlcat.c,v 1.15 2015/03/02 21:41:08 millert Exp $ */
2
3
/*
4
* Copyright (c) 1998, 2015 Todd C. Miller <Todd.Miller@courtesan.com>
5
*
6
* Permission to use, copy, modify, and distribute this software for any
7
* purpose with or without fee is hereby granted, provided that the above
8
* copyright notice and this permission notice appear in all copies.
9
*
10
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
*/
18
19
#include "
ruby/missing.h
"
20
#include <sys/types.h>
21
#include <string.h>
22
23
/*
24
* Appends src to string dst of size dsize (unlike strncat, dsize is the
25
* full size of dst, not space left). At most dsize-1 characters
26
* will be copied. Always NUL terminates (unless dsize <= strlen(dst)).
27
* Returns strlen(src) + MIN(dsize, strlen(initial dst)).
28
* If retval >= dsize, truncation occurred.
29
*/
30
size_t
31
strlcat
(
char
*dst,
const
char
*
src
,
size_t
dsize)
32
{
33
const
char
*odst = dst;
34
const
char
*osrc =
src
;
35
size_t
n
= dsize;
36
size_t
dlen;
37
38
/* Find the end of dst and adjust bytes left but don't go past end. */
39
while
(
n
-- != 0 && *dst !=
'\0'
)
40
dst++;
41
dlen = dst - odst;
42
n
= dsize - dlen;
43
44
if
(
n
-- == 0)
45
return
(dlen +
strlen
(
src
));
46
while
(*
src
!=
'\0'
) {
47
if
(
n
!= 0) {
48
*dst++ = *
src
;
49
n
--;
50
}
51
src
++;
52
}
53
*dst =
'\0'
;
54
55
return
(dlen + (
src
- osrc));
/* count does not include NUL */
56
}
missing.h
strlen
size_t strlen(const char *)
n
const char size_t n
Definition:
rb_mjit_min_header-2.7.6.h:5525
src
__inline__ const void *__restrict__ src
Definition:
rb_mjit_min_header-2.7.6.h:3017
strlcat
size_t strlcat(char *dst, const char *src, size_t dsize)
Definition:
strlcat.c:31
Generated by
1.9.2