annotate extern/libbsd/reallocarray.c @ 1085:91e3def8c708

irccdctl: fix server-part without reason
author David Demelier <markand@malikania.fr>
date Wed, 21 Jul 2021 07:48:41 +0200
parents 8f26ee9cc6dd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1075
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /* $OpenBSD: reallocarray.c,v 1.3 2015/09/13 08:31:47 guenther Exp $ */
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 /*
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net>
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 *
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 * Permission to use, copy, modify, and distribute this software for any
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * purpose with or without fee is hereby granted, provided that the above
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * copyright notice and this permission notice appear in all copies.
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 *
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 */
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
17
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 #include <sys/types.h>
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <errno.h>
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdint.h>
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <stdlib.h>
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 /*
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 * if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 */
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4))
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 void *
1079
8f26ee9cc6dd misc: unconditionnally add BSD->POSIX extensions
David Demelier <markand@malikania.fr>
parents: 1075
diff changeset
30 openbsd_reallocarray(void *optr, size_t nmemb, size_t size)
1075
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 {
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) &&
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 nmemb > 0 && SIZE_MAX / nmemb < size) {
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 errno = ENOMEM;
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 return NULL;
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 }
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 return realloc(optr, size * nmemb);
69b90a8d4d35 misc: fix build on macOS
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 }