mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Compat code for strndup and strnlen.
This commit is contained in:
		| @@ -228,6 +228,12 @@ endif | ||||
| if NO_STRLCPY | ||||
| nodist_tmux_SOURCES += compat/strlcpy.c | ||||
| endif | ||||
| if NO_STRNLEN | ||||
| nodist_tmux_SOURCES += compat/strnlen.c | ||||
| endif | ||||
| if NO_STRNDUP | ||||
| nodist_tmux_SOURCES += compat/strndup.c | ||||
| endif | ||||
| if NO_ASPRINTF | ||||
| nodist_tmux_SOURCES += compat/asprintf.c | ||||
| endif | ||||
|   | ||||
							
								
								
									
										10
									
								
								compat.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								compat.h
									
									
									
									
									
								
							| @@ -247,6 +247,16 @@ size_t	 	 strlcpy(char *, const char *, size_t); | ||||
| size_t	 	 strlcat(char *, const char *, size_t); | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_STRNLEN | ||||
| /* strnlen.c */ | ||||
| size_t		 strnlen(const char *, size_t); | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_STRNDUP | ||||
| /* strndup.c */ | ||||
| char		*strndup(const char *, size_t); | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_DAEMON | ||||
| /* daemon.c */ | ||||
| int	 	 daemon(int, int); | ||||
|   | ||||
							
								
								
									
										41
									
								
								compat/strndup.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								compat/strndup.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| /*	$OpenBSD: strndup.c,v 1.2 2015/08/31 02:53:57 guenther Exp $	*/ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com> | ||||
|  * | ||||
|  * Permission to use, copy, modify, and distribute this software for any | ||||
|  * purpose with or without fee is hereby granted, provided that the above | ||||
|  * copyright notice and this permission notice appear in all copies. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||
|  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||
|  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||
|  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||
|  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||
|  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||
|  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <sys/types.h> | ||||
|  | ||||
| #include <stddef.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #include "compat.h" | ||||
|  | ||||
| char * | ||||
| strndup(const char *str, size_t maxlen) | ||||
| { | ||||
| 	char *copy; | ||||
| 	size_t len; | ||||
|  | ||||
| 	len = strnlen(str, maxlen); | ||||
| 	copy = malloc(len + 1); | ||||
| 	if (copy != NULL) { | ||||
| 		(void)memcpy(copy, str, len); | ||||
| 		copy[len] = '\0'; | ||||
| 	} | ||||
|  | ||||
| 	return copy; | ||||
| } | ||||
							
								
								
									
										34
									
								
								compat/strnlen.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								compat/strnlen.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| /*	$OpenBSD: strnlen.c,v 1.8 2016/10/16 17:37:39 dtucker Exp $	*/ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com> | ||||
|  * | ||||
|  * Permission to use, copy, modify, and distribute this software for any | ||||
|  * purpose with or without fee is hereby granted, provided that the above | ||||
|  * copyright notice and this permission notice appear in all copies. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||||
|  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||||
|  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||||
|  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||
|  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||||
|  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||||
|  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <sys/types.h> | ||||
|  | ||||
| #include <string.h> | ||||
|  | ||||
| #include "compat.h" | ||||
|  | ||||
| size_t | ||||
| strnlen(const char *str, size_t maxlen) | ||||
| { | ||||
| 	const char *cp; | ||||
|  | ||||
| 	for (cp = str; maxlen != 0 && *cp != '\0'; cp++, maxlen--) | ||||
| 		; | ||||
|  | ||||
| 	return (size_t)(cp - str); | ||||
| } | ||||
							
								
								
									
										14
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -423,6 +423,20 @@ if test "x$found_strlcat" = xyes; then | ||||
| fi | ||||
| AM_CONDITIONAL(NO_STRLCAT, [test "x$found_strlcat" = xno]) | ||||
|  | ||||
| # Look for strnlen, compat/strnlen.c used if missing. | ||||
| AC_CHECK_FUNC(strnlen, found_strnlen=yes, found_strnlen=no) | ||||
| if test "x$found_strnlen" = xyes; then | ||||
| 	AC_DEFINE(HAVE_STRNLEN) | ||||
| fi | ||||
| AM_CONDITIONAL(NO_STRNLEN, [test "x$found_strnlen" = xno]) | ||||
|  | ||||
| # Look for strndup, compat/strndup.c used if missing. | ||||
| AC_CHECK_FUNC(strndup, found_strndup=yes, found_strndup=no) | ||||
| if test "x$found_strndup" = xyes; then | ||||
| 	AC_DEFINE(HAVE_STRNDUP) | ||||
| fi | ||||
| AM_CONDITIONAL(NO_STRNDUP, [test "x$found_strndup" = xno]) | ||||
|  | ||||
| # Look for asprintf, compat/asprintf.c used if missing. | ||||
| AC_CHECK_FUNC(asprintf, found_asprintf=yes, found_asprintf=no) | ||||
| if test "x$found_asprintf" = xyes; then | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott