PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LTP GCOV extension - code coverage report
Current view: directory - bcmath/libbcmath/src - str2num.c
Test: PHP Code Coverage
Date: 2009-11-19 Instrumented lines: 36
Code covered: 88.9 % Executed lines: 32
Legend: not executed executed

       1                 : /* str2num.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                 : /* Convert strings to bc numbers.  Base 10 only.*/
      42                 : 
      43                 : void
      44                 : bc_str2num (bc_num *num, char *str, int scale TSRMLS_DC)
      45              61 : {
      46                 :   int digits, strscale;
      47                 :   char *ptr, *nptr;
      48                 :   char zero_int;
      49                 : 
      50                 :   /* Prepare num. */
      51              61 :   bc_free_num (num);
      52                 : 
      53                 :   /* Check for valid number and count digits. */
      54              61 :   ptr = str;
      55              61 :   digits = 0;
      56              61 :   strscale = 0;
      57              61 :   zero_int = FALSE;
      58              61 :   if ( (*ptr == '+') || (*ptr == '-'))  ptr++;  /* Sign */
      59              61 :   while (*ptr == '0') ptr++;                    /* Skip leading zeros. */
      60              61 :   while (isdigit((int)*ptr)) ptr++, digits++;   /* digits */
      61              61 :   if (*ptr == '.') ptr++;                       /* decimal point */
      62              61 :   while (isdigit((int)*ptr)) ptr++, strscale++; /* digits */
      63              61 :   if ((*ptr != '\0') || (digits+strscale == 0))
      64                 :     {
      65               1 :       *num = bc_copy_num (BCG(_zero_));
      66               1 :       return;
      67                 :     }
      68                 : 
      69                 :   /* Adjust numbers and allocate storage and initialize fields. */
      70              60 :   strscale = MIN(strscale, scale);
      71              60 :   if (digits == 0)
      72                 :     {
      73               0 :       zero_int = TRUE;
      74               0 :       digits = 1;
      75                 :     }
      76              60 :   *num = bc_new_num (digits, strscale);
      77                 : 
      78                 :   /* Build the whole number. */
      79              60 :   ptr = str;
      80              60 :   if (*ptr == '-')
      81                 :     {
      82               8 :       (*num)->n_sign = MINUS;
      83               8 :       ptr++;
      84                 :     }
      85                 :   else
      86                 :     {
      87              52 :       (*num)->n_sign = PLUS;
      88              52 :       if (*ptr == '+') ptr++;
      89                 :     }
      90              60 :   while (*ptr == '0') ptr++;                    /* Skip leading zeros. */
      91              60 :   nptr = (*num)->n_value;
      92              60 :   if (zero_int)
      93                 :     {
      94               0 :       *nptr++ = 0;
      95               0 :       digits = 0;
      96                 :     }
      97             424 :   for (;digits > 0; digits--)
      98             364 :     *nptr++ = CH_VAL(*ptr++);
      99                 : 
     100                 : 
     101                 :   /* Build the fractional part. */
     102              60 :   if (strscale > 0)
     103                 :     {
     104               4 :       ptr++;  /* skip the decimal point! */
     105              10 :       for (;strscale > 0; strscale--)
     106               6 :         *nptr++ = CH_VAL(*ptr++);
     107                 :     }
     108                 : }
     109                 : 

Generated by: LTP GCOV extension version 1.5

Generated at Thu, 19 Nov 2009 08:20:05 +0000 (5 days ago)

Copyright © 2005-2009 The PHP Group
All rights reserved.