From f1888f9e8b3c14bc02b3f2c8c23d7b4e1b0c4dc9 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Thu, 11 Jul 2013 23:13:19 +0200 Subject: [PATCH] Add strlcat(3). --- libc/Makefile | 1 + libc/include/string.h | 1 + libc/string/strlcat.cpp | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 libc/string/strlcat.cpp diff --git a/libc/Makefile b/libc/Makefile index 6cb9e3af..97e2a8ee 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -119,6 +119,7 @@ string/strdup.o \ string/strerror_l.o \ string/strerror.o \ string/strerror_r.o \ +string/strlcat.o \ string/strlcpy.o \ string/strlen.o \ string/strncasecmp.o \ diff --git a/libc/include/string.h b/libc/include/string.h index 4cb13225..2a7b71f9 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -51,6 +51,7 @@ size_t strcspn(const char*, const char*); char* strcpy(char* __restrict, const char* __restrict); char* strdup(const char*); int strerror_r(int, char*, size_t); +size_t strlcat(char* __restrict, const char* __restrict, size_t); size_t strlcpy(char* __restrict, const char* __restrict, size_t); size_t strlen(const char*); char* strncat(char* __restrict, const char* __restrict, size_t); diff --git a/libc/string/strlcat.cpp b/libc/string/strlcat.cpp new file mode 100644 index 00000000..4a60b7b4 --- /dev/null +++ b/libc/string/strlcat.cpp @@ -0,0 +1,35 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2013. + + This file is part of the Sortix C Library. + + The Sortix C Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + The Sortix C Library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with the Sortix C Library. If not, see . + + string/strlcat.cpp + Appends a string onto another string truncating if the string is too small. + +*******************************************************************************/ + +#include + +extern "C" +size_t strlcat(char* restrict dest, const char* restrict src, size_t size) +{ + size_t dest_len = strnlen(dest, size); + if ( size <= dest_len ) + return dest_len; + strcpy(dest + strlen(dest), src); + return dest_len + strlcpy(dest + dest_len, src, size - dest_len); +}