Annotation of embedaddon/php/ext/bcmath/libbcmath/src/init.c, revision 1.1.1.1
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:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>