Annotation of mandoc/compat_strndup.c, Revision 1.3
1.3 ! schwarze 1: /* $Id: compat_strndup.c,v 1.2 2020/06/15 01:37:15 schwarze Exp $ */
! 2: /* $OpenBSD: strndup.c,v 1.3 2019/01/25 00:19:25 millert Exp $ */
! 3:
1.1 schwarze 4: /*
1.3 ! schwarze 5: * Copyright (c) 2010 Todd C. Miller <millert@openbsd.org>
1.1 schwarze 6: *
7: * Permission to use, copy, modify, and distribute this software for any
8: * purpose with or without fee is hereby granted, provided that the above
9: * copyright notice and this permission notice appear in all copies.
10: *
11: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18: */
1.2 schwarze 19: #include "config.h"
1.1 schwarze 20:
21: #include <sys/types.h>
22:
23: #include <stdlib.h>
24: #include <string.h>
25:
26: char *
27: strndup(const char *str, size_t maxlen)
28: {
29: char *copy;
30: size_t len;
31:
32: for (len = 0; len < maxlen && str[len] != '\0'; len++)
33: continue;
34:
35: copy = malloc(len + 1);
36: if (copy != NULL) {
37: (void)memcpy(copy, str, len);
38: copy[len] = '\0';
39: }
40:
41: return copy;
42: }
CVSweb