xref: /freebsd/contrib/ncurses/include/nc_string.h (revision aae38d10b4eebf81c0942947e8b83a9bb8651d88)
173f0a83dSXin LI /****************************************************************************
2*aae38d10SBaptiste Daroussin  * Copyright (c) 2012-2013,2016 Free Software Foundation, Inc.              *
373f0a83dSXin LI  *                                                                          *
473f0a83dSXin LI  * Permission is hereby granted, free of charge, to any person obtaining a  *
573f0a83dSXin LI  * copy of this software and associated documentation files (the            *
673f0a83dSXin LI  * "Software"), to deal in the Software without restriction, including      *
773f0a83dSXin LI  * without limitation the rights to use, copy, modify, merge, publish,      *
873f0a83dSXin LI  * distribute, distribute with modifications, sublicense, and/or sell       *
973f0a83dSXin LI  * copies of the Software, and to permit persons to whom the Software is    *
1073f0a83dSXin LI  * furnished to do so, subject to the following conditions:                 *
1173f0a83dSXin LI  *                                                                          *
1273f0a83dSXin LI  * The above copyright notice and this permission notice shall be included  *
1373f0a83dSXin LI  * in all copies or substantial portions of the Software.                   *
1473f0a83dSXin LI  *                                                                          *
1573f0a83dSXin LI  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
1673f0a83dSXin LI  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
1773f0a83dSXin LI  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
1873f0a83dSXin LI  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
1973f0a83dSXin LI  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
2073f0a83dSXin LI  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
2173f0a83dSXin LI  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
2273f0a83dSXin LI  *                                                                          *
2373f0a83dSXin LI  * Except as contained in this notice, the name(s) of the above copyright   *
2473f0a83dSXin LI  * holders shall not be used in advertising or otherwise to promote the     *
2573f0a83dSXin LI  * sale, use or other dealings in this Software without prior written       *
2673f0a83dSXin LI  * authorization.                                                           *
2773f0a83dSXin LI  ****************************************************************************/
2873f0a83dSXin LI 
2973f0a83dSXin LI /****************************************************************************
3073f0a83dSXin LI  *  Author: Thomas E. Dickey                        2012                    *
3173f0a83dSXin LI  ****************************************************************************/
3273f0a83dSXin LI 
3373f0a83dSXin LI #ifndef STRING_HACKS_H
3473f0a83dSXin LI #define STRING_HACKS_H 1
3573f0a83dSXin LI 
3673f0a83dSXin LI #include <ncurses_cfg.h>
3773f0a83dSXin LI 
38*aae38d10SBaptiste Daroussin #if HAVE_BSD_STRING_H
39*aae38d10SBaptiste Daroussin #include <bsd/string.h>
40*aae38d10SBaptiste Daroussin #endif
41*aae38d10SBaptiste Daroussin 
4273f0a83dSXin LI /*
43*aae38d10SBaptiste Daroussin  * $Id: nc_string.h,v 1.7 2016/09/10 19:57:15 tom Exp $
4473f0a83dSXin LI  *
4573f0a83dSXin LI  * String-hacks.  Use these macros to stifle warnings on (presumably) correct
4673f0a83dSXin LI  * uses of strcat, strcpy and sprintf.
4773f0a83dSXin LI  *
4873f0a83dSXin LI  * By the way -
4973f0a83dSXin LI  * A fundamental limitation of the interfaces (and frequent issue in bug
5073f0a83dSXin LI  * reports using these functions) is that sizes are passed as unsigned values
5173f0a83dSXin LI  * (with associated sign-extension problems), limiting their effectiveness
5273f0a83dSXin LI  * when checking for buffer overflow.
5373f0a83dSXin LI  */
5473f0a83dSXin LI 
5573f0a83dSXin LI #ifdef __cplusplus
5673f0a83dSXin LI #define NCURSES_VOID		/* nothing */
5773f0a83dSXin LI #else
5873f0a83dSXin LI #define NCURSES_VOID (void)
5973f0a83dSXin LI #endif
6073f0a83dSXin LI 
6173f0a83dSXin LI #if USE_STRING_HACKS && HAVE_STRLCAT
6273f0a83dSXin LI #define _nc_STRCAT(d,s,n)	NCURSES_VOID strlcat((d),(s),NCURSES_CAST(size_t,n))
63*aae38d10SBaptiste Daroussin #define _nc_STRNCAT(d,s,m,n)	NCURSES_VOID strlcat((d),(s),NCURSES_CAST(size_t,m))
6473f0a83dSXin LI #else
6573f0a83dSXin LI #define _nc_STRCAT(d,s,n)	NCURSES_VOID strcat((d),(s))
66*aae38d10SBaptiste Daroussin #define _nc_STRNCAT(d,s,m,n)	NCURSES_VOID strncat((d),(s),(n))
6773f0a83dSXin LI #endif
6873f0a83dSXin LI 
6973f0a83dSXin LI #if USE_STRING_HACKS && HAVE_STRLCPY
7073f0a83dSXin LI #define _nc_STRCPY(d,s,n)	NCURSES_VOID strlcpy((d),(s),NCURSES_CAST(size_t,n))
71*aae38d10SBaptiste Daroussin #define _nc_STRNCPY(d,s,n)	NCURSES_VOID strlcpy((d),(s),NCURSES_CAST(size_t,n))
7273f0a83dSXin LI #else
7373f0a83dSXin LI #define _nc_STRCPY(d,s,n)	NCURSES_VOID strcpy((d),(s))
74*aae38d10SBaptiste Daroussin #define _nc_STRNCPY(d,s,n)	NCURSES_VOID strncpy((d),(s),(n))
7573f0a83dSXin LI #endif
7673f0a83dSXin LI 
7773f0a83dSXin LI #if USE_STRING_HACKS && HAVE_SNPRINTF
7873f0a83dSXin LI #define _nc_SPRINTF             NCURSES_VOID snprintf
7973f0a83dSXin LI #define _nc_SLIMIT(n)           NCURSES_CAST(size_t,n),
8073f0a83dSXin LI #else
8173f0a83dSXin LI #define _nc_SPRINTF             NCURSES_VOID sprintf
8273f0a83dSXin LI #define _nc_SLIMIT(n)		/* nothing */
8373f0a83dSXin LI #endif
8473f0a83dSXin LI 
8573f0a83dSXin LI #endif /* STRING_HACKS_H */
86