@@ -226,13 +226,12 @@ static bc_num split_bc_num(bc_num num) {
226
226
Returns the sum of two arbitrary precision numbers */
227
227
PHP_FUNCTION (bcadd )
228
228
{
229
- char * left , * right ;
229
+ zend_string * left , * right ;
230
230
zend_long scale_param = 0 ;
231
231
bc_num first , second , result ;
232
- size_t left_len , right_len ;
233
232
int scale = (int )BCG (bc_precision ), argc = ZEND_NUM_ARGS ();
234
233
235
- if (zend_parse_parameters (argc , "ss |l" , & left , & left_len , & right , & right_len , & scale_param ) == FAILURE ) {
234
+ if (zend_parse_parameters (argc , "SS |l" , & left , & right , & scale_param ) == FAILURE ) {
236
235
return ;
237
236
}
238
237
@@ -243,8 +242,8 @@ PHP_FUNCTION(bcadd)
243
242
bc_init_num (& first );
244
243
bc_init_num (& second );
245
244
bc_init_num (& result );
246
- php_str2num (& first , left );
247
- php_str2num (& second , right );
245
+ php_str2num (& first , ZSTR_VAL ( left ) );
246
+ php_str2num (& second , ZSTR_VAL ( right ) );
248
247
bc_add (first , second , & result , scale );
249
248
250
249
if (result -> n_scale > scale ) {
@@ -264,13 +263,12 @@ PHP_FUNCTION(bcadd)
264
263
Returns the difference between two arbitrary precision numbers */
265
264
PHP_FUNCTION (bcsub )
266
265
{
267
- char * left , * right ;
268
- size_t left_len , right_len ;
266
+ zend_string * left , * right ;
269
267
zend_long scale_param = 0 ;
270
268
bc_num first , second , result ;
271
269
int scale = (int )BCG (bc_precision ), argc = ZEND_NUM_ARGS ();
272
270
273
- if (zend_parse_parameters (argc , "ss |l" , & left , & left_len , & right , & right_len , & scale_param ) == FAILURE ) {
271
+ if (zend_parse_parameters (argc , "SS |l" , & left , & right , & scale_param ) == FAILURE ) {
274
272
return ;
275
273
}
276
274
@@ -281,8 +279,8 @@ PHP_FUNCTION(bcsub)
281
279
bc_init_num (& first );
282
280
bc_init_num (& second );
283
281
bc_init_num (& result );
284
- php_str2num (& first , left );
285
- php_str2num (& second , right );
282
+ php_str2num (& first , ZSTR_VAL ( left ) );
283
+ php_str2num (& second , ZSTR_VAL ( right ) );
286
284
bc_sub (first , second , & result , scale );
287
285
288
286
if (result -> n_scale > scale ) {
@@ -302,13 +300,12 @@ PHP_FUNCTION(bcsub)
302
300
Returns the multiplication of two arbitrary precision numbers */
303
301
PHP_FUNCTION (bcmul )
304
302
{
305
- char * left , * right ;
306
- size_t left_len , right_len ;
303
+ zend_string * left , * right ;
307
304
zend_long scale_param = 0 ;
308
305
bc_num first , second , result ;
309
306
int scale = (int )BCG (bc_precision ), argc = ZEND_NUM_ARGS ();
310
307
311
- if (zend_parse_parameters (argc , "ss |l" , & left , & left_len , & right , & right_len , & scale_param ) == FAILURE ) {
308
+ if (zend_parse_parameters (argc , "SS |l" , & left , & right , & scale_param ) == FAILURE ) {
312
309
return ;
313
310
}
314
311
@@ -319,8 +316,8 @@ PHP_FUNCTION(bcmul)
319
316
bc_init_num (& first );
320
317
bc_init_num (& second );
321
318
bc_init_num (& result );
322
- php_str2num (& first , left );
323
- php_str2num (& second , right );
319
+ php_str2num (& first , ZSTR_VAL ( left ) );
320
+ php_str2num (& second , ZSTR_VAL ( right ) );
324
321
bc_multiply (first , second , & result , scale );
325
322
326
323
if (result -> n_scale > scale ) {
@@ -340,13 +337,12 @@ PHP_FUNCTION(bcmul)
340
337
Returns the quotient of two arbitrary precision numbers (division) */
341
338
PHP_FUNCTION (bcdiv )
342
339
{
343
- char * left , * right ;
344
- size_t left_len , right_len ;
340
+ zend_string * left , * right ;
345
341
zend_long scale_param = 0 ;
346
342
bc_num first , second , result ;
347
343
int scale = (int )BCG (bc_precision ), argc = ZEND_NUM_ARGS ();
348
344
349
- if (zend_parse_parameters (argc , "ss |l" , & left , & left_len , & right , & right_len , & scale_param ) == FAILURE ) {
345
+ if (zend_parse_parameters (argc , "SS |l" , & left , & right , & scale_param ) == FAILURE ) {
350
346
return ;
351
347
}
352
348
@@ -357,8 +353,8 @@ PHP_FUNCTION(bcdiv)
357
353
bc_init_num (& first );
358
354
bc_init_num (& second );
359
355
bc_init_num (& result );
360
- php_str2num (& first , left );
361
- php_str2num (& second , right );
356
+ php_str2num (& first , ZSTR_VAL ( left ) );
357
+ php_str2num (& second , ZSTR_VAL ( right ) );
362
358
363
359
switch (bc_divide (first , second , & result , scale )) {
364
360
case 0 : /* OK */
@@ -384,19 +380,18 @@ PHP_FUNCTION(bcdiv)
384
380
Returns the modulus of the two arbitrary precision operands */
385
381
PHP_FUNCTION (bcmod )
386
382
{
387
- char * left , * right ;
388
- size_t left_len , right_len ;
383
+ zend_string * left , * right ;
389
384
bc_num first , second , result ;
390
385
391
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "ss " , & left , & left_len , & right , & right_len ) == FAILURE ) {
386
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "SS " , & left , & right ) == FAILURE ) {
392
387
return ;
393
388
}
394
389
395
390
bc_init_num (& first );
396
391
bc_init_num (& second );
397
392
bc_init_num (& result );
398
- bc_str2num (& first , left , 0 );
399
- bc_str2num (& second , right , 0 );
393
+ bc_str2num (& first , ZSTR_VAL ( left ) , 0 );
394
+ bc_str2num (& second , ZSTR_VAL ( right ) , 0 );
400
395
401
396
switch (bc_modulo (first , second , & result , 0 )) {
402
397
case 0 :
@@ -418,23 +413,22 @@ PHP_FUNCTION(bcmod)
418
413
Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous */
419
414
PHP_FUNCTION (bcpowmod )
420
415
{
421
- char * left , * right , * modulous ;
422
- size_t left_len , right_len , modulous_len ;
416
+ zend_string * left , * right , * modulous ;
423
417
bc_num first , second , mod , result ;
424
418
zend_long scale = BCG (bc_precision );
425
419
int scale_int ;
426
420
427
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "sss |l" , & left , & left_len , & right , & right_len , & modulous , & modulous_len , & scale ) == FAILURE ) {
421
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "SSS |l" , & left , & right , & modulous , & scale ) == FAILURE ) {
428
422
return ;
429
423
}
430
424
431
425
bc_init_num (& first );
432
426
bc_init_num (& second );
433
427
bc_init_num (& mod );
434
428
bc_init_num (& result );
435
- php_str2num (& first , left );
436
- php_str2num (& second , right );
437
- php_str2num (& mod , modulous );
429
+ php_str2num (& first , ZSTR_VAL ( left ) );
430
+ php_str2num (& second , ZSTR_VAL ( right ) );
431
+ php_str2num (& mod , ZSTR_VAL ( modulous ) );
438
432
439
433
scale_int = (int ) ((int )scale < 0 ? 0 : scale );
440
434
@@ -460,13 +454,12 @@ PHP_FUNCTION(bcpowmod)
460
454
Returns the value of an arbitrary precision number raised to the power of another */
461
455
PHP_FUNCTION (bcpow )
462
456
{
463
- char * left , * right ;
464
- size_t left_len , right_len ;
457
+ zend_string * left , * right ;
465
458
zend_long scale_param = 0 ;
466
459
bc_num first , second , result ;
467
460
int scale = (int )BCG (bc_precision ), argc = ZEND_NUM_ARGS ();
468
461
469
- if (zend_parse_parameters (argc , "ss |l" , & left , & left_len , & right , & right_len , & scale_param ) == FAILURE ) {
462
+ if (zend_parse_parameters (argc , "SS |l" , & left , & right , & scale_param ) == FAILURE ) {
470
463
return ;
471
464
}
472
465
@@ -477,8 +470,8 @@ PHP_FUNCTION(bcpow)
477
470
bc_init_num (& first );
478
471
bc_init_num (& second );
479
472
bc_init_num (& result );
480
- php_str2num (& first , left );
481
- php_str2num (& second , right );
473
+ php_str2num (& first , ZSTR_VAL ( left ) );
474
+ php_str2num (& second , ZSTR_VAL ( right ) );
482
475
bc_raise (first , second , & result , scale );
483
476
484
477
if (result -> n_scale > scale ) {
@@ -498,13 +491,12 @@ PHP_FUNCTION(bcpow)
498
491
Returns the square root of an arbitray precision number */
499
492
PHP_FUNCTION (bcsqrt )
500
493
{
501
- char * left ;
502
- size_t left_len ;
494
+ zend_string * left ;
503
495
zend_long scale_param = 0 ;
504
496
bc_num result ;
505
497
int scale = (int )BCG (bc_precision ), argc = ZEND_NUM_ARGS ();
506
498
507
- if (zend_parse_parameters (argc , "s |l" , & left , & left_len , & scale_param ) == FAILURE ) {
499
+ if (zend_parse_parameters (argc , "S |l" , & left , & scale_param ) == FAILURE ) {
508
500
return ;
509
501
}
510
502
@@ -513,7 +505,7 @@ PHP_FUNCTION(bcsqrt)
513
505
}
514
506
515
507
bc_init_num (& result );
516
- php_str2num (& result , left );
508
+ php_str2num (& result , ZSTR_VAL ( left ) );
517
509
518
510
if (bc_sqrt (& result , scale ) != 0 ) {
519
511
if (result -> n_scale > scale ) {
@@ -534,13 +526,12 @@ PHP_FUNCTION(bcsqrt)
534
526
Compares two arbitrary precision numbers */
535
527
PHP_FUNCTION (bccomp )
536
528
{
537
- char * left , * right ;
538
- size_t left_len , right_len ;
529
+ zend_string * left , * right ;
539
530
zend_long scale_param = 0 ;
540
531
bc_num first , second ;
541
532
int scale = (int )BCG (bc_precision ), argc = ZEND_NUM_ARGS ();
542
533
543
- if (zend_parse_parameters (argc , "ss |l" , & left , & left_len , & right , & right_len , & scale_param ) == FAILURE ) {
534
+ if (zend_parse_parameters (argc , "SS |l" , & left , & right , & scale_param ) == FAILURE ) {
544
535
return ;
545
536
}
546
537
@@ -551,8 +542,8 @@ PHP_FUNCTION(bccomp)
551
542
bc_init_num (& first );
552
543
bc_init_num (& second );
553
544
554
- bc_str2num (& first , left , scale );
555
- bc_str2num (& second , right , scale );
545
+ bc_str2num (& first , ZSTR_VAL ( left ) , scale );
546
+ bc_str2num (& second , ZSTR_VAL ( right ) , scale );
556
547
RETVAL_LONG (bc_compare (first , second ));
557
548
558
549
bc_free_num (& first );
0 commit comments