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