Commit a143363d authored by Russ Allbery's avatar Russ Allbery

Remove portable version of strndup

We don't use this anywhere in the source tree, so there's no
reason to have it around.
parent 5ba40ffa
......@@ -21,7 +21,6 @@
/tests/plugin/queuing-t
/tests/portable/asprintf-t
/tests/portable/snprintf-t
/tests/portable/strndup-t
/tests/runtests
/tests/util/concat-t
/tests/util/messages-krb5-t
......
......@@ -89,8 +89,7 @@ warnings:
check_PROGRAMS = tests/runtests tests/plugin/heimdal-t tests/plugin/mit-t \
tests/plugin/queue-only-t tests/plugin/queuing-t \
tests/portable/asprintf-t tests/portable/snprintf-t \
tests/portable/strndup-t tests/util/messages-krb5-t \
tests/util/messages-t tests/util/xmalloc
tests/util/messages-krb5-t tests/util/messages-t tests/util/xmalloc
check_LIBRARIES = tests/tap/libtap.a
tests_runtests_CPPFLAGS = -DSOURCE='"$(abs_top_srcdir)/tests"' \
-DBUILD='"$(abs_top_builddir)/tests"'
......@@ -127,9 +126,6 @@ tests_portable_asprintf_t_LDADD = tests/tap/libtap.a portable/libportable.la
tests_portable_snprintf_t_SOURCES = tests/portable/snprintf-t.c \
tests/portable/snprintf.c
tests_portable_snprintf_t_LDADD = tests/tap/libtap.a portable/libportable.la
tests_portable_strndup_t_SOURCES = tests/portable/strndup-t.c \
tests/portable/strndup.c
tests_portable_strndup_t_LDADD = tests/tap/libtap.a portable/libportable.la
tests_util_messages_krb5_t_LDFLAGS = $(KRB5_LDFLAGS)
tests_util_messages_krb5_t_LDADD = tests/tap/libtap.a util/libutil.la \
portable/libportable.la $(KRB5_LIBS)
......
......@@ -66,7 +66,7 @@ AC_CHECK_TYPES([ssize_t], [], [],
[#include <sys/types.h>])
RRA_FUNC_SNPRINTF
AC_CHECK_FUNCS([setrlimit])
AC_REPLACE_FUNCS([asprintf strndup])
AC_REPLACE_FUNCS([asprintf])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_HEADER([config.h])
......
/*
* Replacement for a missing strndup.
*
* The canonical version of this file is maintained in the rra-c-util package,
* which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
*
* Written by Russ Allbery <eagle@eyrie.org>
*
* The authors hereby relinquish any claim to any copyright that they may have
* in this work, whether granted under contract or by operation of law or
* international treaty, and hereby commit to the public, at large, that they
* shall not, at any time in the future, seek to enforce any copyright in this
* work against any person or entity, or prevent any person or entity from
* copying, publishing, distributing or creating derivative works of this
* work.
*/
#include <config.h>
#include <portable/system.h>
#include <errno.h>
/*
* If we're running the test suite, rename the functions to avoid conflicts
* with the system versions.
*/
#if TESTING
# undef strndup
# define strndup test_strndup
char *test_strndup(const char *, size_t);
#endif
char *
strndup(const char *s, size_t n)
{
const char *p;
size_t length;
char *copy;
if (s == NULL) {
errno = EINVAL;
return NULL;
}
/* Don't assume that the source string is nul-terminated. */
for (p = s; (size_t) (p - s) < n && *p != '\0'; p++)
;
length = p - s;
copy = malloc(length + 1);
if (copy == NULL)
return NULL;
memcpy(copy, s, length);
copy[length] = '\0';
return copy;
}
......@@ -124,9 +124,6 @@ extern int snprintf(char *, size_t, const char *, ...)
#if !HAVE_DECL_VSNPRINTF
extern int vsnprintf(char *, size_t, const char *, va_list);
#endif
#if !HAVE_STRNDUP
extern char *strndup(const char *, size_t);
#endif
/* Undo default visibility change. */
#pragma GCC visibility pop
......
......@@ -6,7 +6,6 @@ plugin/queue-only
plugin/queuing
portable/asprintf
portable/snprintf
portable/strndup
util/messages
util/messages-krb5
util/xmalloc
/*
* strndup test suite.
*
* The canonical version of this file is maintained in the rra-c-util package,
* which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
*
* Written by Russ Allbery <eagle@eyrie.org>
*
* The authors hereby relinquish any claim to any copyright that they may have
* in this work, whether granted under contract or by operation of law or
* international treaty, and hereby commit to the public, at large, that they
* shall not, at any time in the future, seek to enforce any copyright in this
* work against any person or entity, or prevent any person or entity from
* copying, publishing, distributing or creating derivative works of this
* work.
*/
#include <config.h>
#include <portable/system.h>
#include <errno.h>
#include <tests/tap/basic.h>
char *test_strndup(const char *, size_t);
int
main(void)
{
char buffer[3];
char *result = NULL;
plan(7);
result = test_strndup("foo", 8);
is_string("foo", result, "strndup longer than string");
free(result);
result = test_strndup("foo", 2);
is_string("fo", result, "strndup shorter than string");
free(result);
result = test_strndup("foo", 3);
is_string("foo", result, "strndup same size as string");
free(result);
result = test_strndup("foo", 0);
is_string("", result, "strndup of size 0");
free(result);
memcpy(buffer, "foo", 3);
result = test_strndup(buffer, 3);
is_string("foo", result, "strndup of non-nul-terminated string");
free(result);
errno = 0;
result = test_strndup(NULL, 0);
is_string(NULL, result, "strndup of NULL");
is_int(errno, EINVAL, "...and returns EINVAL");
return 0;
}
#define TESTING 1
#include <portable/strndup.c>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment