Return to init.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / bcmath / libbcmath / src |
1.1 misho 1: /* init.c: bcmath library file. */ 2: /* 3: Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. 4: Copyright (C) 2000 Philip A. Nelson 5: 6: This library is free software; you can redistribute it and/or 7: modify it under the terms of the GNU Lesser General Public 8: License as published by the Free Software Foundation; either 9: version 2 of the License, or (at your option) any later version. 10: 11: This library is distributed in the hope that it will be useful, 12: but WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: Lesser General Public License for more details. (COPYING.LIB) 15: 16: You should have received a copy of the GNU Lesser General Public 17: License along with this library; if not, write to: 18: 19: The Free Software Foundation, Inc. 20: 59 Temple Place, Suite 330 21: Boston, MA 02111-1307 USA. 22: 23: You may contact the author by: 24: e-mail: philnelson@acm.org 25: us-mail: Philip A. Nelson 26: Computer Science Department, 9062 27: Western Washington University 28: Bellingham, WA 98226-9062 29: 30: *************************************************************************/ 31: 32: #include <config.h> 33: #include <stdio.h> 34: #include <assert.h> 35: #include <stdlib.h> 36: #include <ctype.h> 37: #include <stdarg.h> 38: #include "bcmath.h" 39: #include "private.h" 40: 41: #if SANDER_0 42: bc_num _bc_Free_list = NULL; 43: #endif 44: 45: /* new_num allocates a number and sets fields to known values. */ 46: 47: bc_num 48: _bc_new_num_ex (length, scale, persistent) 49: int length, scale, persistent; 50: { 51: bc_num temp; 52: 53: /* PHP Change: malloc() -> pemalloc(), removed free_list code */ 54: temp = (bc_num) safe_pemalloc (1, sizeof(bc_struct)+length, scale, persistent); 55: #if 0 56: if (_bc_Free_list != NULL) { 57: temp = _bc_Free_list; 58: _bc_Free_list = temp->n_next; 59: } else { 60: temp = (bc_num) pemalloc (sizeof(bc_struct), persistent); 61: if (temp == NULL) bc_out_of_memory (); 62: } 63: #endif 64: temp->n_sign = PLUS; 65: temp->n_len = length; 66: temp->n_scale = scale; 67: temp->n_refs = 1; 68: /* PHP Change: malloc() -> pemalloc() */ 69: temp->n_ptr = (char *) safe_pemalloc (1, length, scale, persistent); 70: if (temp->n_ptr == NULL) bc_out_of_memory(); 71: temp->n_value = temp->n_ptr; 72: memset (temp->n_ptr, 0, length+scale); 73: return temp; 74: } 75: 76: 77: /* "Frees" a bc_num NUM. Actually decreases reference count and only 78: frees the storage if reference count is zero. */ 79: 80: void 81: _bc_free_num_ex (num, persistent) 82: bc_num *num; 83: int persistent; 84: { 85: if (*num == NULL) return; 86: (*num)->n_refs--; 87: if ((*num)->n_refs == 0) { 88: if ((*num)->n_ptr) 89: /* PHP Change: free() -> pefree(), removed free_list code */ 90: pefree ((*num)->n_ptr, persistent); 91: pefree(*num, persistent); 92: #if 0 93: (*num)->n_next = _bc_Free_list; 94: _bc_Free_list = *num; 95: #endif 96: } 97: *num = NULL; 98: } 99: 100: 101: /* Intitialize the number package! */ 102: 103: void 104: bc_init_numbers (TSRMLS_D) 105: { 106: BCG(_zero_) = _bc_new_num_ex (1,0,1); 107: BCG(_one_) = _bc_new_num_ex (1,0,1); 108: BCG(_one_)->n_value[0] = 1; 109: BCG(_two_) = _bc_new_num_ex (1,0,1); 110: BCG(_two_)->n_value[0] = 2; 111: } 112: 113: 114: /* Make a copy of a number! Just increments the reference count! */ 115: 116: bc_num 117: bc_copy_num (bc_num num) 118: { 119: num->n_refs++; 120: return num; 121: } 122: 123: 124: /* Initialize a number NUM by making it a copy of zero. */ 125: 126: void 127: bc_init_num (bc_num *num TSRMLS_DC) 128: { 129: *num = bc_copy_num (BCG(_zero_)); 130: } 131: