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