1 /*
2  * Copyright 2014, General Dynamics C4 Systems
3  *
4  * SPDX-License-Identifier: GPL-2.0-only
5  */
6 
7 #include <config.h>
8 #include <assert.h>
9 #include <string.h>
10 
strnlen(const char * s,word_t maxlen)11 word_t strnlen(const char *s, word_t maxlen)
12 {
13     word_t len;
14     for (len = 0; len < maxlen && s[len]; len++);
15     return len;
16 }
17 
strlcpy(char * dest,const char * src,word_t size)18 word_t strlcpy(char *dest, const char *src, word_t size)
19 {
20     word_t len;
21     for (len = 0; len + 1 < size && src[len]; len++) {
22         dest[len] = src[len];
23     }
24     dest[len] = '\0';
25     return len;
26 }
27 
strlcat(char * dest,const char * src,word_t size)28 word_t strlcat(char *dest, const char *src, word_t size)
29 {
30     word_t len;
31     /* get to the end of dest */
32     for (len = 0; len < size && dest[len]; len++);
33     /* check that dest was at least 'size' length to prevent inserting
34      * a null byte when we shouldn't */
35     if (len < size) {
36         for (; len + 1 < size && *src; len++, src++) {
37             dest[len] = *src;
38         }
39         dest[len] = '\0';
40     }
41     return len;
42 }
43