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
11word_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
18word_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
28word_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