mem.c revision 203443
150476Speter/*	$OpenBSD: mem.c,v 1.5 2009/10/27 23:59:37 deraadt Exp $	*/
21802Sphk
31802Sphk/*
4234746Sobrien * Copyright (c) 2003, Otto Moerbeek <otto@drijf.net>
5284421Sbapt *
6234746Sobrien * Permission to use, copy, modify, and distribute this software for any
744301Swollman * purpose with or without fee is hereby granted, provided that the above
8143334Scperciva * copyright notice and this permission notice appear in all copies.
9220496Smarkm *
10292782Sallanjude * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11220496Smarkm * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12292782Sallanjude * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1355955Srgrimes * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14201381Sed * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15201381Sed * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16234746Sobrien * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
179488Sphk */
1874385Sphk
1974385Sphk#include <sys/cdefs.h>
209488Sphk__FBSDID("$FreeBSD: head/usr.bin/dc/mem.c 203443 2010-02-03 21:06:13Z gabor $");
2174385Sphk
2274385Sphk#include <openssl/err.h>
2344437Sache
2444437Sache#include <err.h>
2544437Sache#include <stdlib.h>
2674385Sphk#include <string.h>
2744437Sache
2874385Sphk#include "extern.h"
2974385Sphk
3044437Sachestruct number *
3174385Sphknew_number(void)
3274385Sphk{
33143334Scperciva	struct number *n;
34143334Scperciva
35143334Scperciva	n = bmalloc(sizeof(*n));
36143334Scperciva	n->scale = 0;
37292782Sallanjude	n->number = BN_new();
38292782Sallanjude	if (n->number == NULL)
39292782Sallanjude		err(1, NULL);
40292782Sallanjude	return (n);
41220496Smarkm}
42220496Smarkm
43220496Smarkmvoid
44220496Smarkmfree_number(struct number *n)
4544290Swollman{
4644301Swollman
47143334Scperciva	BN_free(n->number);
48292782Sallanjude	free(n);
49292782Sallanjude}
50220496Smarkm
51282774Sthomasstruct number *
52282774Sthomasdup_number(const struct number *a)
53282774Sthomas{
54282774Sthomas	struct number *n;
55282774Sthomas
56282774Sthomas	n = bmalloc(sizeof(*n));
57285417Srodrigc	n->scale = a->scale;
58285417Srodrigc	n->number = BN_dup(a->number);
59263218Sjmg	bn_checkp(n->number);
601802Sphk	return (n);
6144290Swollman}
6244301Swollman
63218723Sdimvoid *
6444290Swollmanbmalloc(size_t sz)
6544301Swollman{
6644301Swollman	void *p;
67218723Sdim
6844301Swollman	p = malloc(sz);
69218723Sdim	if (p == NULL)
70218723Sdim		err(1, NULL);
71218723Sdim	return (p);
7244290Swollman}
731802Sphk
7444290Swollmanvoid *
7544290Swollmanbrealloc(void *p, size_t sz)
761802Sphk{
771802Sphk	void *q;
7844290Swollman
7944290Swollman	q = realloc(p, sz);
801802Sphk	if (q == NULL)
8144290Swollman		err(1, NULL);
8244290Swollman	return (q);
8344290Swollman}
8444290Swollman
8544290Swollmanchar *
8644290Swollmanbstrdup(const char *p)
8744290Swollman{
8844290Swollman	char *q;
8944290Swollman
9044290Swollman	q = strdup(p);
91143334Scperciva	if (q == NULL)
92143334Scperciva		err(1, NULL);
93143334Scperciva	return (q);
94143334Scperciva}
95143334Scperciva
96143334Scpercivavoid
97292782Sallanjudebn_check(int x)						\
98292782Sallanjude{
99292782Sallanjude
100292782Sallanjude	if (x == 0)
101292782Sallanjude		err(1, "big number failure %lx", ERR_get_error());
102292782Sallanjude}
103220496Smarkm
104220496Smarkmvoid
105220496Smarkmbn_checkp(const void *p)						\
106220496Smarkm{
107220496Smarkm
108220496Smarkm	if (p == NULL)
10944301Swollman		err(1, "allocation failure %lx", ERR_get_error());
11044301Swollman}
11144301Swollman