1226645Sattilio/*	$NetBSD: mem.c,v 1.2 2017/04/10 16:37:48 christos Exp $	*/
2246726Sattilio/*	$OpenBSD: mem.c,v 1.7 2015/02/16 20:53:34 jca Exp $	*/
3226930Sjeff
4226645Sattilio/*
5226645Sattilio * Copyright (c) 2003, Otto Moerbeek <otto@drijf.net>
6226645Sattilio *
7226645Sattilio * Permission to use, copy, modify, and distribute this software for any
8226645Sattilio * purpose with or without fee is hereby granted, provided that the above
9226645Sattilio * copyright notice and this permission notice appear in all copies.
10226645Sattilio *
11226645Sattilio * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12226645Sattilio * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13226645Sattilio * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14226645Sattilio * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15226645Sattilio * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16226645Sattilio * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17226645Sattilio * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18226645Sattilio */
19226645Sattilio#include <sys/cdefs.h>
20226645Sattilio__RCSID("$NetBSD: mem.c,v 1.2 2017/04/10 16:37:48 christos Exp $");
21226645Sattilio
22226645Sattilio#include <openssl/err.h>
23226645Sattilio
24226645Sattilio#include <err.h>
25226645Sattilio#include <stdlib.h>
26226645Sattilio#include <string.h>
27226645Sattilio
28226645Sattilio#include "extern.h"
29226645Sattilio
30226645Sattiliostruct number *
31246726Sattilionew_number(void)
32246726Sattilio{
33246726Sattilio	struct number *n;
34246726Sattilio
35246726Sattilio	n = bmalloc(sizeof(*n));
36246726Sattilio	n->scale = 0;
37246726Sattilio	n->number = BN_new();
38246726Sattilio	if (n->number == NULL)
39246726Sattilio		err(1, NULL);
40246726Sattilio	return n;
41246726Sattilio}
42246726Sattilio
43226645Sattiliovoid
44226645Sattiliofree_number(struct number *n)
45226645Sattilio{
46226645Sattilio	BN_free(n->number);
47246726Sattilio	free(n);
48246726Sattilio}
49226645Sattilio
50226645Sattiliostruct number *
51226645Sattiliodup_number(const struct number *a)
52226645Sattilio{
53226645Sattilio	struct number *n;
54226645Sattilio
55226645Sattilio	n = bmalloc(sizeof(*n));
56226645Sattilio	n->scale = a->scale;
57246726Sattilio	n->number = BN_dup(a->number);
58226873Sattilio	bn_checkp(n->number);
59226645Sattilio	return n;
60226876Sjeff}
61226873Sattilio
62226873Sattiliovoid *
63226873Sattiliobmalloc(size_t sz)
64226645Sattilio{
65226645Sattilio	void *p;
66246726Sattilio
67246726Sattilio	p = malloc(sz);
68246726Sattilio	if (p == NULL)
69226645Sattilio		err(1, NULL);
70246794Sattilio	return p;
71246794Sattilio}
72233034Sattilio
73246726Sattiliovoid *
74246726Sattiliobreallocarray(void *p, size_t nmemb, size_t size)
75246726Sattilio{
76246726Sattilio	int ret = reallocarr(&p, nmemb, size);
77233034Sattilio	if (ret)
78246726Sattilio		errc(1, ret, NULL);
79246726Sattilio	return p;
80233034Sattilio}
81246726Sattilio
82233034Sattiliochar *
83233034Sattiliobstrdup(const char *p)
84232326Sattilio{
85232326Sattilio	char *q;
86246726Sattilio
87246726Sattilio	q = strdup(p);
88232326Sattilio	if (q == NULL)
89232326Sattilio		err(1, NULL);
90246726Sattilio	return q;
91246726Sattilio}
92246726Sattilio
93232326Sattiliovoid
94246726Sattiliobn_check(int x)						\
95246726Sattilio{
96246726Sattilio	if (x == 0)
97232326Sattilio		err(1, "big number failure %lx", ERR_get_error());
98232326Sattilio}
99232326Sattilio
100246726Sattiliovoid
101246726Sattiliobn_checkp(const void *p)						\
102246726Sattilio{
103232326Sattilio	if (p == NULL)
104232326Sattilio		err(1, "allocation failure %lx", ERR_get_error());
105226873Sattilio}
106226645Sattilio