15ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen/*************************************************************************** 25ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * _ _ ____ _ 35ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * Project ___| | | | _ \| | 45ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * / __| | | | |_) | | 55ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * | (__| |_| | _ <| |___ 65ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * \___|\___/|_| \_\_____| 75ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * 8e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. 95ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * 105ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * This software is licensed as described in the file COPYING, which 115ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * you should have received as part of this distribution. The terms 128f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo * are also available at https://curl.haxx.se/docs/copyright.html. 135ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * 145ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * You may opt to use, copy, modify, merge, publish, distribute and/or sell 155ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * copies of the Software, and permit persons to whom the Software is 165ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * furnished to do so, under the terms of the COPYING file. 175ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * 185ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 195ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * KIND, either express or implied. 205ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen * 215ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen ***************************************************************************/ 22e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "tool_strdup.h" 23e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 24e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#ifndef HAVE_STRDUP 25e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETchar *strdup(const char *str) 26e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET{ 27e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET size_t len; 28e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET char *newstr; 29e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 30e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(!str) 31e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET return (char *)NULL; 32e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 33e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET len = strlen(str); 34e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 35e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(len >= ((size_t)-1) / sizeof(char)) 36e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET return (char *)NULL; 37e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 38e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET newstr = malloc((len+1)*sizeof(char)); 39e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(!newstr) 40e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET return (char *)NULL; 41e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 42e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET memcpy(newstr, str, (len+1)*sizeof(char)); 43e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 44e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET return newstr; 455ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen 46e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} 475ab5018bf8f0e39957d264f33c3eeddd958ed5d8Kristian Monsen#endif 48