From 752068073af170f4e448eb93fffd85e7a5cc93df Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Fri, 10 Jan 2014 07:09:59 -0600 Subject: [PATCH] Forgot to add stpcpy.c in last commit --- include/stddef.h | 17 +++++++--- include/sys/types.h | 5 +++ libc/string/lib_stpcpy.c | 67 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 libc/string/lib_stpcpy.c diff --git a/include/stddef.h b/include/stddef.h index dd8385c9f8..6e24fbd7cc 100644 --- a/include/stddef.h +++ b/include/stddef.h @@ -48,16 +48,20 @@ /* The header shall define the following macros: * * NULL - * The Null pointer constant. + * The null pointer constant. * - * NOTE: Currently the definition of NULL is in sys/types.h but should be - * moved here sometime. + * NOTE: Currently the definition of NULL is in sys/types.h but should + * be moved here sometime. * * offsetof(type, member-designator) * Integer constant expression of type size_t, the value of which is the * offset in bytes to the structure member (member-designator), from the * beginning of its structure (type). * + * NOTE: This version of offsetof() depends on behaviors that could be + * undefined for some compilers. It would be better to use a builtin + * function if one exists. + * * Reference: Opengroup.org */ @@ -71,6 +75,9 @@ * ptrdiff_t * Signed integer type of the result of subtracting two pointers. * + * NOTE: This type assumes that ssize_t will cover the largest address + * difference. This might not be true of CONFIG_MM_SMALL is defined. + * * wchar_t * Integer type whose range of values can represent distinct wide-character * codes for all members of the largest character set specified among the @@ -82,8 +89,8 @@ * size_t * Unsigned integer type of the result of the sizeof operator. * - * NOTE: Currently the type definitions of both wchar_t and size_t are in - * sys/types.h but should be moved here sometime. + * NOTE: Currently the type definitions of both wchar_t and size_t are + * in sys/types.h but should be moved here sometime. * * The implementation shall support one or more programming environments in * which the widths of ptrdiff_t, size_t, and wchar_t are no greater than the diff --git a/include/sys/types.h b/include/sys/types.h index 0fa01c1178..9726e34501 100644 --- a/include/sys/types.h +++ b/include/sys/types.h @@ -56,6 +56,7 @@ #ifndef TRUE # define TRUE 1 #endif + #ifndef FALSE # define FALSE 0 #endif @@ -129,6 +130,8 @@ typedef unsigned int mode_t; /* size_t is used for sizes of memory objects. * ssize_t is used for a count of bytes or an error indication. + * + * REVISIT: size_t belongs in stddef.h */ #ifdef CONFIG_SMALL_MEMORY @@ -179,6 +182,8 @@ typedef intptr_t ptrdiff_t; /* Wide, 16-bit character types. wchar_t is a built-in type in C++ and * its declaration here may cause compilation errors on some compilers * if -DCONFIG_WCHAR_BUILTIN is not included in the CXXFLAGS. + * + * REVISIT: wchar_t belongs in stddef.h */ #ifndef CONFIG_WCHAR_BUILTIN diff --git a/libc/string/lib_stpcpy.c b/libc/string/lib_stpcpy.c new file mode 100644 index 0000000000..046846468e --- /dev/null +++ b/libc/string/lib_stpcpy.c @@ -0,0 +1,67 @@ +/************************************************************************ + * libc/string/lib_strppy.c + * + * Copyright (C) 2014 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************/ + +/************************************************************************ + * Included Files + ************************************************************************/ + +#include + +#include + +/************************************************************************ + * Public Functions + ************************************************************************/ + +/************************************************************************ + * Name: stpcpy + * + * Description: + * Copies the string pointed to by 'src' (including the terminating NUL + * character) into the array pointed to by 'dest'. + * + * Returned value: + * The stpcpy() function returns a pointer to the terminating NUL + * character copied into the 'dest' buffer + * + ************************************************************************/ + +#ifndef CONFIG_ARCH_STPCPY +FAR char *stpcpy(FAR char *dest, FAR const char *src) +{ + while ((*dest++ = *src++) != '\0'); + return --dest; +} +#endif