From 3893aee8f538093793bc034bfa35dfe1e3681ad4 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Wed, 20 Jun 2018 13:44:02 +0200 Subject: [PATCH] include: add strlcat() implementation CC: Donghwa Jeong Signed-off-by: Christian Brauner --- configure.ac | 4 ++++ src/include/strlcat.c | 37 +++++++++++++++++++++++++++++++++++++ src/include/strlcat.h | 29 +++++++++++++++++++++++++++++ src/lxc/Makefile.am | 8 ++++++++ 4 files changed, 78 insertions(+) create mode 100644 src/include/strlcat.c create mode 100644 src/include/strlcat.h diff --git a/configure.ac b/configure.ac index d58c84c66..649b57afd 100644 --- a/configure.ac +++ b/configure.ac @@ -684,6 +684,10 @@ AC_CHECK_FUNCS([strlcpy], AM_CONDITIONAL(HAVE_STRLCPY, true) AC_DEFINE(HAVE_STRLCPY,1,[Have strlcpy]), AM_CONDITIONAL(HAVE_STRLCPY, false)) +AC_CHECK_FUNCS([strlcat], + AM_CONDITIONAL(HAVE_STRLCAT, true) + AC_DEFINE(HAVE_STRLCAT,1,[Have strlcat]), + AM_CONDITIONAL(HAVE_STRLCAT, false)) # Check for some libraries AX_PTHREAD diff --git a/src/include/strlcat.c b/src/include/strlcat.c new file mode 100644 index 000000000..42fa3f32c --- /dev/null +++ b/src/include/strlcat.c @@ -0,0 +1,37 @@ +/* liblxcapi + * + * Copyright © 2018 Christian Brauner . + * Copyright © 2018 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This function has been copied from musl. + */ + +#include +#include +#include + +#ifndef HAVE_STRLCPY +#include "strlcpy.h" +#endif + +size_t strlcat(char *d, const char *s, size_t n) +{ + size_t l = strnlen(d, n); + if (l == n) + return l + strlen(s); + + return l + strlcpy(d + l, s, n - l); +} diff --git a/src/include/strlcat.h b/src/include/strlcat.h new file mode 100644 index 000000000..1b51e00e6 --- /dev/null +++ b/src/include/strlcat.h @@ -0,0 +1,29 @@ +/* liblxcapi + * + * Copyright © 2018 Christian Brauner . + * Copyright © 2018 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This function has been copied from musl. + */ + +#ifndef _STRLCAT_H +#define _STRLCAT_H + +#include + +extern size_t strlcat(char *d, const char *s, size_t n); + +#endif diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am index 065bf0582..60400d401 100644 --- a/src/lxc/Makefile.am +++ b/src/lxc/Makefile.am @@ -152,6 +152,10 @@ if !HAVE_STRLCPY liblxc_la_SOURCES += ../include/strlcpy.c ../include/strlcpy.h endif +if !HAVE_STRLCAT +liblxc_la_SOURCES += ../include/strlcat.c ../include/strlcat.h +endif + if !HAVE_GETGRGID_R liblxc_la_SOURCES += ../include/getgrgid_r.c ../include/getgrgid_r.h endif @@ -312,6 +316,10 @@ if !HAVE_STRLCPY init_lxc_static_SOURCES += ../include/strlcpy.c ../include/strlcpy.h endif +if !HAVE_STRLCAT +init_lxc_static_SOURCES += ../include/strlcat.c ../include/strlcat.h +endif + if !HAVE_GETGRGID_R liblxc_la_SOURCES += ../include/getgrgid_r.c ../include/getgrgid_r.h endif -- 2.47.2