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>