1/*	$NetBSD: mem.c,v 1.2 2017/04/10 16:37:48 christos Exp $	*/
2/*	$OpenBSD: mem.c,v 1.7 2015/02/16 20:53:34 jca Exp $	*/
3
4/*
5 * Copyright (c) 2003, Otto Moerbeek <otto@drijf.net>
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 */
19#include <sys/cdefs.h>
20__RCSID("$NetBSD: mem.c,v 1.2 2017/04/10 16:37:48 christos Exp $");
21
22#include <openssl/err.h>
23
24#include <err.h>
25#include <stdlib.h>
26#include <string.h>
27
28#include "extern.h"
29
30struct number *
31new_number(void)
32{
33	struct number *n;
34
35	n = bmalloc(sizeof(*n));
36	n->scale = 0;
37	n->number = BN_new();
38	if (n->number == NULL)
39		err(1, NULL);
40	return n;
41}
42
43void
44free_number(struct number *n)
45{
46	BN_free(n->number);
47	free(n);
48}
49
50struct number *
51dup_number(const struct number *a)
52{
53	struct number *n;
54
55	n = bmalloc(sizeof(*n));
56	n->scale = a->scale;
57	n->number = BN_dup(a->number);
58	bn_checkp(n->number);
59	return n;
60}
61
62void *
63bmalloc(size_t sz)
64{
65	void *p;
66
67	p = malloc(sz);
68	if (p == NULL)
69		err(1, NULL);
70	return p;
71}
72
73void *
74breallocarray(void *p, size_t nmemb, size_t size)
75{
76	int ret = reallocarr(&p, nmemb, size);
77	if (ret)
78		errc(1, ret, NULL);
79	return p;
80}
81
82char *
83bstrdup(const char *p)
84{
85	char *q;
86
87	q = strdup(p);
88	if (q == NULL)
89		err(1, NULL);
90	return q;
91}
92
93void
94bn_check(int x)						\
95{
96	if (x == 0)
97		err(1, "big number failure %lx", ERR_get_error());
98}
99
100void
101bn_checkp(const void *p)						\
102{
103	if (p == NULL)
104		err(1, "allocation failure %lx", ERR_get_error());
105}
106