private strndup() implementation in case libc does not provide it
[ngircd-alex.git] / src / portab / strndup.c
1 /*
2  * ngIRCd -- The Next Generation IRC Daemon
3  */
4
5 #include "portab.h"
6
7 /**
8  * @file
9  * strndup() implementation. Public domain.
10  */
11
12 #ifndef HAVE_STRNDUP
13
14 #include "imp.h"
15 #include <string.h>
16 #include <stdlib.h>
17 #include <sys/types.h>
18
19 #include "exp.h"
20
21 GLOBAL char *
22 strndup(const char *s, size_t maxlen)
23 {
24         char *dup;
25         size_t len = strlen(s);
26
27         if (len > maxlen)
28                 len = maxlen;
29         len++;
30         dup = malloc(len);
31         if (dup)
32                 strlcpy(dup, s, len);
33         return dup;
34 }
35
36 #endif
37