147dd1d1bSDag-Erling Smørgrav /* $OpenBSD: strndup.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */ 247dd1d1bSDag-Erling Smørgrav 347dd1d1bSDag-Erling Smørgrav /* 447dd1d1bSDag-Erling Smørgrav * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com> 547dd1d1bSDag-Erling Smørgrav * 647dd1d1bSDag-Erling Smørgrav * Permission to use, copy, modify, and distribute this software for any 747dd1d1bSDag-Erling Smørgrav * purpose with or without fee is hereby granted, provided that the above 847dd1d1bSDag-Erling Smørgrav * copyright notice and this permission notice appear in all copies. 947dd1d1bSDag-Erling Smørgrav * 1047dd1d1bSDag-Erling Smørgrav * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1147dd1d1bSDag-Erling Smørgrav * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1247dd1d1bSDag-Erling Smørgrav * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1347dd1d1bSDag-Erling Smørgrav * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1447dd1d1bSDag-Erling Smørgrav * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1547dd1d1bSDag-Erling Smørgrav * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1647dd1d1bSDag-Erling Smørgrav * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1747dd1d1bSDag-Erling Smørgrav */ 1847dd1d1bSDag-Erling Smørgrav 19*190cef3dSDag-Erling Smørgrav #include "includes.h" 2047dd1d1bSDag-Erling Smørgrav #if !defined(HAVE_STRNDUP) || defined(BROKEN_STRNDUP) 2147dd1d1bSDag-Erling Smørgrav #include <sys/types.h> 2247dd1d1bSDag-Erling Smørgrav 2347dd1d1bSDag-Erling Smørgrav #include <stddef.h> 2447dd1d1bSDag-Erling Smørgrav #include <stdlib.h> 2547dd1d1bSDag-Erling Smørgrav #include <string.h> 2647dd1d1bSDag-Erling Smørgrav 2747dd1d1bSDag-Erling Smørgrav char * 2847dd1d1bSDag-Erling Smørgrav strndup(const char *str, size_t maxlen) 2947dd1d1bSDag-Erling Smørgrav { 3047dd1d1bSDag-Erling Smørgrav char *copy; 3147dd1d1bSDag-Erling Smørgrav size_t len; 3247dd1d1bSDag-Erling Smørgrav 3347dd1d1bSDag-Erling Smørgrav len = strnlen(str, maxlen); 3447dd1d1bSDag-Erling Smørgrav copy = malloc(len + 1); 3547dd1d1bSDag-Erling Smørgrav if (copy != NULL) { 3647dd1d1bSDag-Erling Smørgrav (void)memcpy(copy, str, len); 3747dd1d1bSDag-Erling Smørgrav copy[len] = '\0'; 3847dd1d1bSDag-Erling Smørgrav } 3947dd1d1bSDag-Erling Smørgrav 4047dd1d1bSDag-Erling Smørgrav return copy; 4147dd1d1bSDag-Erling Smørgrav } 4247dd1d1bSDag-Erling Smørgrav DEF_WEAK(strndup); 4347dd1d1bSDag-Erling Smørgrav #endif /* HAVE_STRNDUP */ 44