annotate C/port/strndup.c @ 407:25ef13e25338

Json: remove undefined, not part of JSON spec
author David Demelier <markand@malikania.fr>
date Tue, 06 Oct 2015 09:05:53 +0200
parents 0b576ee64d45
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
77
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * strndup.c -- duplicate a string
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
98
b1a084c030c8 Happy new year
David Demelier <markand@malikania.fr>
parents: 77
diff changeset
4 * Copyright (c) 2011, 2012, David Demelier <markand@malikania.fr>
77
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <stdio.h>
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdlib.h>
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <string.h>
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 char *
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 strndup(const char *src, size_t len)
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 {
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 size_t tocopy;
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 char *dst;
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 for (tocopy = 0; tocopy < len && src[tocopy] != '\0'; ++tocopy)
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 continue;
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 if ((dst = calloc(tocopy + 1, 1)) != NULL)
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 strncpy(dst, src, tocopy);
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 return dst;
e48757f916ae Add port of strndup
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 }