mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-30 21:42:59 +00:00 
			
		
		
		
	private strndup() implementation in case libc does not provide it
This commit is contained in:
		| @@ -188,7 +188,7 @@ AC_CHECK_FUNCS([ \ | ||||
| # Optional functions | ||||
| AC_CHECK_FUNCS_ONCE([ \ | ||||
| 	gai_strerror getaddrinfo getnameinfo inet_aton sigaction sigprocmask \ | ||||
| 	snprintf vsnprintf strdup strlcpy strlcat strtok_r waitpid]) | ||||
| 	snprintf vsnprintf strdup strndup strlcpy strlcat strtok_r waitpid]) | ||||
|  | ||||
| # -- Configuration options -- | ||||
|  | ||||
|   | ||||
| @@ -15,7 +15,7 @@ EXTRA_DIST = Makefile.ng | ||||
|  | ||||
| noinst_LIBRARIES = libngportab.a | ||||
|  | ||||
| libngportab_a_SOURCES = strdup.c strlcpy.c strtok_r.c vsnprintf.c waitpid.c | ||||
| libngportab_a_SOURCES = strdup.c strndup.c strlcpy.c strtok_r.c vsnprintf.c waitpid.c | ||||
|  | ||||
| check_PROGRAMS = portabtest | ||||
|  | ||||
|   | ||||
| @@ -157,6 +157,10 @@ extern size_t strlcpy PARAMS(( char *dst, const char *src, size_t size )); | ||||
| extern char * strdup PARAMS(( const char *s )); | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_STRNDUP | ||||
| extern char * strndup PARAMS((const char *s, size_t maxlen)); | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_STRTOK_R | ||||
| extern char * strtok_r PARAMS((char *str, const char *delim, char **saveptr)); | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										37
									
								
								src/portab/strndup.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/portab/strndup.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| /* | ||||
|  * ngIRCd -- The Next Generation IRC Daemon | ||||
|  */ | ||||
|  | ||||
| #include "portab.h" | ||||
|  | ||||
| /** | ||||
|  * @file | ||||
|  * strndup() implementation. Public domain. | ||||
|  */ | ||||
|  | ||||
| #ifndef HAVE_STRNDUP | ||||
|  | ||||
| #include "imp.h" | ||||
| #include <string.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/types.h> | ||||
|  | ||||
| #include "exp.h" | ||||
|  | ||||
| GLOBAL char * | ||||
| strndup(const char *s, size_t maxlen) | ||||
| { | ||||
| 	char *dup; | ||||
| 	size_t len = strlen(s); | ||||
|  | ||||
| 	if (len > maxlen) | ||||
| 		len = maxlen; | ||||
| 	len++; | ||||
| 	dup = malloc(len); | ||||
| 	if (dup) | ||||
| 		strlcpy(dup, s, len); | ||||
| 	return dup; | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Federico G. Schwindt
					Federico G. Schwindt