From 34b5bdb6269544fb6ee8099db0fcf4402afaa1c0 Mon Sep 17 00:00:00 2001 From: Ralf Corsepius Date: Tue, 25 Mar 2003 20:48:35 +0000 Subject: Merger from rtems-4-6-branch. --- cpukit/libcsupport/ChangeLog | 7 ++++++ cpukit/libcsupport/Makefile.am | 6 ++++- cpukit/libcsupport/configure.ac | 3 +++ cpukit/libcsupport/src/strlcat.c | 41 +++++++++++++++++++++++++++++++++ cpukit/libcsupport/src/strlcpy.c | 49 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 cpukit/libcsupport/src/strlcat.c create mode 100644 cpukit/libcsupport/src/strlcpy.c (limited to 'cpukit/libcsupport') diff --git a/cpukit/libcsupport/ChangeLog b/cpukit/libcsupport/ChangeLog index 1a53f96b91..8143d251d1 100644 --- a/cpukit/libcsupport/ChangeLog +++ b/cpukit/libcsupport/ChangeLog @@ -1,3 +1,10 @@ +2003-03-18 Ralf Corsepius + + * configure.ac: AC_CHECK_FUNCS(strlcpy strlcat). + * src/strlcat.c: New (extracted from pppd/utils.c). + * src/strlcpy.c: New (extracted from pppd/utils.c). + * Makefile.am: Add BSD_C_FILES, strlcat.c, strlcpy.c. + 2003-03-06 Ralf Corsepius * configure.ac: Remove AC_CONFIG_AUX_DIR. diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am index 44dd1c388c..b0b1a9f407 100644 --- a/cpukit/libcsupport/Makefile.am +++ b/cpukit/libcsupport/Makefile.am @@ -133,7 +133,11 @@ LIBC_GLUE_C_FILES = src/__getpid.c src/__gettod.c src/__times.c \ UNIX_LIBC_C_FILES = src/unixlibc.c src/hosterr.c -COMMON_C_FILES = src/gxx_wrappers.c src/printk.c $(BASE_FS_C_FILES) \ +BSD_LIBC_C_FILES = src/strlcpy.c src/strlcat.c + +COMMON_C_FILES = src/gxx_wrappers.c src/printk.c \ + $(BSD_LIBC_C_FILES) \ + $(BASE_FS_C_FILES) \ $(MALLOC_C_FILES) $(TERMIOS_C_FILES) $(ERROR_C_FILES) \ $(ASSOCIATION_C_FILES) diff --git a/cpukit/libcsupport/configure.ac b/cpukit/libcsupport/configure.ac index d54cc2a39c..6bf9b79ebb 100644 --- a/cpukit/libcsupport/configure.ac +++ b/cpukit/libcsupport/configure.ac @@ -71,6 +71,9 @@ AC_CHECK_DECLS([ECHOPRT],,,[#include ]) ## BSD-ism, excluded from POSIX, but available on most platforms AC_CHECK_DECLS([sbrk],,,[#include ]) +## Check if libc provides BSD's strlcpy/strlcat +AC_CHECK_FUNCS(strlcpy strlcat) + AM_CONDITIONAL([NEED_SYS_CDEFS_H],[test x"$NEED_SYS_CDEFS_H" = x"yes"]) AM_CONFIG_HEADER([src/config.h]) diff --git a/cpukit/libcsupport/src/strlcat.c b/cpukit/libcsupport/src/strlcat.c new file mode 100644 index 0000000000..e0424eef7b --- /dev/null +++ b/cpukit/libcsupport/src/strlcat.c @@ -0,0 +1,41 @@ +/* + * utils.c - various utility functions used in pppd. + * + * Copyright (c) 1999 The Australian National University. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the Australian National University. The name of the University + * may not be used to endorse or promote products derived from this + * software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#ifndef HAVE_STRLCAT +/* + * strlcat - like strcat/strncat, doesn't overflow destination buffer, + * always leaves destination null-terminated (for len > 0). + */ +size_t +strlcat(dest, src, len) + char *dest; + const char *src; + size_t len; +{ + size_t dlen = strlen(dest); + + return dlen + strlcpy(dest + dlen, src, (len > dlen? len - dlen: 0)); +} +#endif diff --git a/cpukit/libcsupport/src/strlcpy.c b/cpukit/libcsupport/src/strlcpy.c new file mode 100644 index 0000000000..2773e877cb --- /dev/null +++ b/cpukit/libcsupport/src/strlcpy.c @@ -0,0 +1,49 @@ +/* + * utils.c - various utility functions used in pppd. + * + * Copyright (c) 1999 The Australian National University. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the Australian National University. The name of the University + * may not be used to endorse or promote products derived from this + * software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#ifndef HAVE_STRLCPY +/* + * strlcpy - like strcpy/strncpy, doesn't overflow destination buffer, + * always leaves destination null-terminated (for len > 0). + */ +size_t +strlcpy(dest, src, len) + char *dest; + const char *src; + size_t len; +{ + size_t ret = strlen(src); + + if (len != 0) { + if (ret < len) + strcpy(dest, src); + else { + strncpy(dest, src, len - 1); + dest[len-1] = 0; + } + } + return ret; +} +#endif -- cgit v1.2.3