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