History

20080611-1539

Charles.Forsyth committed 18 years ago

Commit 19060cf1 parent 450bfc01 file · +116 −117Browse files

Unified · Split

libinterp/ipint.c+116−117
@@ -59,13 +59,12 @@ IPint_iptob64z(void *fp) · 58 unmodified lines
59 char buf[MaxBigBytes]; /* TO DO: should allocate these */59 char buf[MaxBigBytes]; /* TO DO: should allocate these */
60 uchar *p;60 uchar *p;
61 int n, o;61 int n, o;
62 void *v;
62 63
63 f = fp;64 f = fp;
64 destroy(*f->ret);65 v = *f->ret;
65 *f->ret = H;66 *f->ret = H;
66 67 destroy(v);
67 if(f->i == H)
68 error(exNilref);
69 68
70 b = MP(f->i);69 b = MP(f->i);
71 n = (b->top+1)*Dbytes;70 n = (b->top+1)*Dbytes;
@@ -94,13 +93,12 @@ IPint_iptob64(void *fp) · 22 unmodified lines
94{93{
95 F_IPint_iptob64 *f;94 F_IPint_iptob64 *f;
96 char buf[MaxBigBytes];95 char buf[MaxBigBytes];
96 void *v;
97 97
98 f = fp;98 f = fp;
99 destroy(*f->ret);99 v = *f->ret;
100 *f->ret = H;100 *f->ret = H;
101 101 destroy(v);
102 if(f->i == H)
103 error(exNilref);
104 102
105 mptoa(MP(f->i), 64, buf, sizeof(buf));103 mptoa(MP(f->i), 64, buf, sizeof(buf));
106 retstr(buf, f->ret);104 retstr(buf, f->ret);
@@ -111,13 +109,12 @@ IPint_iptobytes(void *fp) · 4 unmodified lines
111{109{
112 F_IPint_iptobytes *f;110 F_IPint_iptobytes *f;
113 uchar buf[MaxBigBytes];111 uchar buf[MaxBigBytes];
112 void *v;
114 113
115 f = fp;114 f = fp;
116 destroy(*f->ret);115 v = *f->ret;
117 *f->ret = H;116 *f->ret = H;
118 117 destroy(v);
119 if(f->i == H)
120 error(exNilref);
121 118
122 /* TO DO: two's complement or have ipmagtobe? */119 /* TO DO: two's complement or have ipmagtobe? */
123 *f->ret = mem2array(buf, mptobe(MP(f->i), buf, sizeof(buf), nil)); /* for now we'll ignore sign */120 *f->ret = mem2array(buf, mptobe(MP(f->i), buf, sizeof(buf), nil)); /* for now we'll ignore sign */
@@ -128,13 +125,12 @@ IPint_iptobebytes(void *fp) · 4 unmodified lines
128{125{
129 F_IPint_iptobebytes *f;126 F_IPint_iptobebytes *f;
130 uchar buf[MaxBigBytes];127 uchar buf[MaxBigBytes];
128 void *v;
131 129
132 f = fp;130 f = fp;
133 destroy(*f->ret);131 v = *f->ret;
134 *f->ret = H;132 *f->ret = H;
135 133 destroy(v);
136 if(f->i == H)
137 error(exNilref);
138 134
139 *f->ret = mem2array(buf, mptobe(MP(f->i), buf, sizeof(buf), nil));135 *f->ret = mem2array(buf, mptobe(MP(f->i), buf, sizeof(buf), nil));
140}136}
@@ -144,13 +140,12 @@ IPint_iptostr(void *fp) · 3 unmodified lines
144{140{
145 F_IPint_iptostr *f;141 F_IPint_iptostr *f;
146 char buf[MaxBigBytes];142 char buf[MaxBigBytes];
143 void *v;
147 144
148 f = fp;145 f = fp;
149 destroy(*f->ret);146 v = *f->ret;
150 *f->ret = H;147 *f->ret = H;
151 148 destroy(v);
152 if(f->i == H)
153 error(exNilref);
154 149
155 mptoa(MP(f->i), f->base, buf, sizeof(buf));150 mptoa(MP(f->i), f->base, buf, sizeof(buf));
156 retstr(buf, f->ret);151 retstr(buf, f->ret);
@@ -179,10 +174,12 @@ void · 22 unmodified lines
179IPint_b64toip(void *fp)174IPint_b64toip(void *fp)
180{175{
181 F_IPint_b64toip *f;176 F_IPint_b64toip *f;
177 void *v;
182 178
183 f = fp;179 f = fp;
184 destroy(*f->ret);180 v = *f->ret;
185 *f->ret = H;181 *f->ret = H;
182 destroy(v);
186 183
187 *f->ret = strtoipint(f->str, 64);184 *f->ret = strtoipint(f->str, 64);
188}185}
@@ -192,10 +189,12 @@ IPint_bytestoip(void *fp) · 3 unmodified lines
192{189{
193 F_IPint_bytestoip *f;190 F_IPint_bytestoip *f;
194 mpint *b;191 mpint *b;
192 void *v;
195 193
196 f = fp;194 f = fp;
197 destroy(*f->ret);195 v = *f->ret;
198 *f->ret = H;196 *f->ret = H;
197 destroy(v);
199 198
200 if(f->buf == H)199 if(f->buf == H)
201 error(exNilref);200 error(exNilref);
@@ -209,10 +208,12 @@ IPint_bebytestoip(void *fp) · 7 unmodified lines
209{208{
210 F_IPint_bebytestoip *f;209 F_IPint_bebytestoip *f;
211 mpint *b;210 mpint *b;
211 void *v;
212 212
213 f = fp;213 f = fp;
214 destroy(*f->ret);214 v = *f->ret;
215 *f->ret = H;215 *f->ret = H;
216 destroy(v);
216 217
217 if(f->mag == H)218 if(f->mag == H)
218 error(exNilref);219 error(exNilref);
@@ -225,10 +226,12 @@ void · 6 unmodified lines
225IPint_strtoip(void *fp)226IPint_strtoip(void *fp)
226{227{
227 F_IPint_strtoip *f;228 F_IPint_strtoip *f;
229 void *v;
228 230
229 f = fp;231 f = fp;
230 destroy(*f->ret);232 v = *f->ret;
231 *f->ret = H;233 *f->ret = H;
234 destroy(v);
232 235
233 *f->ret = strtoipint(f->str, f->base);236 *f->ret = strtoipint(f->str, f->base);
234}237}
@@ -275,10 +278,12 @@ void · 40 unmodified lines
275IPint_inttoip(void *fp)278IPint_inttoip(void *fp)
276{279{
277 F_IPint_inttoip *f;280 F_IPint_inttoip *f;
281 void *v;
278 282
279 f = fp;283 f = fp;
280 destroy(*f->ret);284 v = *f->ret;
281 *f->ret = H;285 *f->ret = H;
286 destroy(v);
282 287
283 *f->ret = newIPint(itomp(f->i, nil));288 *f->ret = newIPint(itomp(f->i, nil));
284}289}
@@ -300,21 +305,23 @@ void · 15 unmodified lines
300IPint_expmod(void *fp)305IPint_expmod(void *fp)
301{306{
302 F_IPint_expmod *f;307 F_IPint_expmod *f;
303 mpint *ret, *mod;308 mpint *ret, *mod, *base, *exp;
309 void *v;
304 310
305 f = fp;311 f = fp;
306 destroy(*f->ret);312 v = *f->ret;
307 *f->ret = H;313 *f->ret = H;
314 destroy(v);
308 315
309 if(f->base == H || f->exp == H)316 base = MP(f->base);
310 error(exNilref);317 exp = MP(f->exp);
311
312 mod = nil;
313 if(f->mod != H)318 if(f->mod != H)
314 mod = MP(f->mod);319 mod = MP(f->mod);
320 else
321 mod = nil;
315 ret = mpnew(0);322 ret = mpnew(0);
316 if(ret != nil)323 if(ret != nil)
317 mpexp(MP(f->base), MP(f->exp), mod, ret);324 mpexp(base, exp, mod, ret);
318 *f->ret = newIPint(ret);325 *f->ret = newIPint(ret);
319}326}
320 327
@@ -324,10 +331,12 @@ IPint_invert(void *fp) · 3 unmodified lines
324{331{
325 F_IPint_invert *f;332 F_IPint_invert *f;
326 mpint *ret;333 mpint *ret;
334 void *v;
327 335
328 f = fp;336 f = fp;
329 destroy(*f->ret);337 v = *f->ret;
330 *f->ret = H;338 *f->ret = H;
339 destroy(v);
331 340
332 ret = mpnew(0);341 ret = mpnew(0);
333 if(ret != nil)342 if(ret != nil)
@@ -341,16 +350,15 @@ IPint_add(void *fp) · 7 unmodified lines
341{350{
342 F_IPint_add *f;351 F_IPint_add *f;
343 mpint *i1, *i2, *ret;352 mpint *i1, *i2, *ret;
353 void *v;
344 354
345 f = fp;355 f = fp;
346 destroy(*f->ret);356 v = *f->ret;
347 *f->ret = H;357 *f->ret = H;
358 destroy(v);
348 359
349 if(f->i1 == H || f->i2 == H)360 i1 = MP(f->i1);
350 error(exNilref);361 i2 = MP(f->i2);
351
352 i1 = ((IPint*)f->i1)->b;
353 i2 = ((IPint*)f->i2)->b;
354 ret = mpnew(0);362 ret = mpnew(0);
355 if(ret != nil)363 if(ret != nil)
356 mpadd(i1, i2, ret);364 mpadd(i1, i2, ret);
@@ -362,16 +370,15 @@ IPint_sub(void *fp) · 5 unmodified lines
362{370{
363 F_IPint_sub *f;371 F_IPint_sub *f;
364 mpint *i1, *i2, *ret;372 mpint *i1, *i2, *ret;
373 void *v;
365 374
366 f = fp;375 f = fp;
367 destroy(*f->ret);376 v = *f->ret;
368 *f->ret = H;377 *f->ret = H;
378 destroy(v);
369 379
370 if(f->i1 == H || f->i2 == H)380 i1 = MP(f->i1);
371 error(exNilref);381 i2 = MP(f->i2);
372
373 i1 = ((IPint*)f->i1)->b;
374 i2 = ((IPint*)f->i2)->b;
375 ret = mpnew(0);382 ret = mpnew(0);
376 if(ret != nil)383 if(ret != nil)
377 mpsub(i1, i2, ret);384 mpsub(i1, i2, ret);
@@ -383,16 +390,15 @@ IPint_mul(void *fp) · 5 unmodified lines
383{390{
384 F_IPint_mul *f;391 F_IPint_mul *f;
385 mpint *i1, *i2, *ret;392 mpint *i1, *i2, *ret;
393 void *v;
386 394
387 f = fp;395 f = fp;
388 destroy(*f->ret);396 v = *f->ret;
389 *f->ret = H;397 *f->ret = H;
398 destroy(v);
390 399
391 if(f->i1 == H || f->i2 == H)400 i1 = MP(f->i1);
392 error(exNilref);401 i2 = MP(f->i2);
393
394 i1 = ((IPint*)f->i1)->b;
395 i2 = ((IPint*)f->i2)->b;
396 ret = mpnew(0);402 ret = mpnew(0);
397 if(ret != nil)403 if(ret != nil)
398 mpmul(i1, i2, ret);404 mpmul(i1, i2, ret);
@@ -404,18 +410,18 @@ IPint_div(void *fp) · 5 unmodified lines
404{410{
405 F_IPint_div *f;411 F_IPint_div *f;
406 mpint *i1, *i2, *quo, *rem;412 mpint *i1, *i2, *quo, *rem;
413 void *v;
407 414
408 f = fp;415 f = fp;
409 destroy(f->ret->t0);416 v = f->ret->t0;
410 f->ret->t0 = H;417 f->ret->t0 = H;
411 destroy(f->ret->t1);418 destroy(v);
419 v = f->ret->t1;
412 f->ret->t1 = H;420 f->ret->t1 = H;
421 destroy(v);
413 422
414 if(f->i1 == H || f->i2 == H)423 i1 = MP(f->i1);
415 error(exNilref);424 i2 = MP(f->i2);
416
417 i1 = ((IPint*)f->i1)->b;
418 i2 = ((IPint*)f->i2)->b;
419 quo = mpnew(0);425 quo = mpnew(0);
420 if(quo == nil)426 if(quo == nil)
421 error(exHeap);427 error(exHeap);
@@ -434,16 +440,15 @@ IPint_mod(void *fp) · 12 unmodified lines
434{440{
435 F_IPint_mod *f;441 F_IPint_mod *f;
436 mpint *i1, *i2, *ret;442 mpint *i1, *i2, *ret;
443 void *v;
437 444
438 f = fp;445 f = fp;
439 destroy(*f->ret);446 v = *f->ret;
440 *f->ret = H;447 *f->ret = H;
448 destroy(v);
441 449
442 if(f->i1 == H || f->i2 == H)450 i1 = MP(f->i1);
443 error(exNilref);451 i2 = MP(f->i2);
444
445 i1 = ((IPint*)f->i1)->b;
446 i2 = ((IPint*)f->i2)->b;
447 ret = mpnew(0);452 ret = mpnew(0);
448 if(ret != nil)453 if(ret != nil)
449 mpmod(i1, i2, ret);454 mpmod(i1, i2, ret);
@@ -454,17 +459,15 @@ void · 4 unmodified lines
454IPint_neg(void *fp)459IPint_neg(void *fp)
455{460{
456 F_IPint_neg *f;461 F_IPint_neg *f;
457 mpint *i, *ret;462 mpint *ret;
463 void *v;
458 464
459 f = fp;465 f = fp;
460 destroy(*f->ret);466 v = *f->ret;
461 *f->ret = H;467 *f->ret = H;
468 destroy(v);
462 469
463 if(f->i == H)470 ret = mpcopy(MP(f->i));
464 error(exNilref);
465
466 i = ((IPint*)f->i)->b;
467 ret = mpcopy(i);
468 if(ret == nil)471 if(ret == nil)
469 error(exHeap);472 error(exHeap);
470 ret->sign = -ret->sign;473 ret->sign = -ret->sign;
@@ -477,13 +480,12 @@ void · 6 unmodified lines
477IPint_copy(void *fp)480IPint_copy(void *fp)
478{481{
479 F_IPint_copy *f;482 F_IPint_copy *f;
483 void *v;
480 484
481 f = fp;485 f = fp;
482 destroy(*f->ret);486 v = *f->ret;
483 *f->ret = H;487 *f->ret = H;
484 488 destroy(v);
485 if(f->i == H)
486 return;
487 489
488 *f->ret = newIPint(mpcopy(MP(f->i)));490 *f->ret = newIPint(mpcopy(MP(f->i)));
489}491}
@@ -496,11 +498,6 @@ IPint_eq(void *fp) · 6 unmodified lines
496 F_IPint_eq *f;498 F_IPint_eq *f;
497 499
498 f = fp;500 f = fp;
499 *f->ret = 0;
500
501 if(f->i1 == H || f->i2 == H)
502 return;
503
504 *f->ret = mpcmp(MP(f->i1), MP(f->i2)) == 0;501 *f->ret = mpcmp(MP(f->i1), MP(f->i2)) == 0;
505}502}
506 503
@@ -511,11 +508,6 @@ IPint_cmp(void *fp) · 4 unmodified lines
511 F_IPint_eq *f;508 F_IPint_eq *f;
512 509
513 f = fp;510 f = fp;
514 *f->ret = 0;
515
516 if(f->i1 == H || f->i2 == H)
517 error(exNilref);
518
519 *f->ret = mpcmp(MP(f->i1), MP(f->i2));511 *f->ret = mpcmp(MP(f->i1), MP(f->i2));
520}512}
521 513
@@ -524,36 +516,36 @@ void · 2 unmodified lines
524IPint_shl(void *fp)516IPint_shl(void *fp)
525{517{
526 F_IPint_shl *f;518 F_IPint_shl *f;
527 mpint *ret;519 mpint *ret, *i;
520 void *v;
528 521
529 f = fp;522 f = fp;
530 destroy(*f->ret);523 v = *f->ret;
531 *f->ret = H;524 *f->ret = H;
525 destroy(v);
532 526
533 if(f->i == H)527 i = MP(f->i);
534 error(exNilref);
535
536 ret = mpnew(0);528 ret = mpnew(0);
537 if(ret != nil)529 if(ret != nil)
538 mpleft(MP(f->i), f->n, ret);530 mpleft(i, f->n, ret);
539 *f->ret = newIPint(ret);531 *f->ret = newIPint(ret);
540}532}
541void533void
542IPint_shr(void *fp)534IPint_shr(void *fp)
543{535{
544 F_IPint_shr *f;536 F_IPint_shr *f;
545 mpint *ret;537 mpint *ret, *i;
538 void *v;
546 539
547 f = fp;540 f = fp;
548 destroy(*f->ret);541 v = *f->ret;
549 *f->ret = H;542 *f->ret = H;
543 destroy(v);
550 544
551 if(f->i == H)545 i = MP(f->i);
552 error(exNilref);
553
554 ret = mpnew(0);546 ret = mpnew(0);
555 if(ret != nil)547 if(ret != nil)
556 mpright(MP(f->i), f->n, ret);548 mpright(i, f->n, ret);
557 *f->ret = newIPint(ret);549 *f->ret = newIPint(ret);
558}550}
559 551
@@ -646,17 +638,19 @@ void · 86 unmodified lines
646IPint_and(void *fp)638IPint_and(void *fp)
647{639{
648 F_IPint_and *f;640 F_IPint_and *f;
649 mpint *ret;641 mpint *ret, *i1, *i2;
642 void *v;
650 643
651 f = fp;644 f = fp;
652 destroy(*f->ret);645 v = *f->ret;
653 *f->ret = H;646 *f->ret = H;
647 destroy(v);
654 648
655 if(f->i1 == H || f->i2 == H)649 i1 = MP(f->i1);
656 error(exNilref);650 i2 = MP(f->i2);
657 ret = mpnew(0);651 ret = mpnew(0);
658 if(ret != nil)652 if(ret != nil)
659 mpand(MP(f->i1), MP(f->i2), ret);653 mpand(i1, i2, ret);
660 *f->ret = newIPint(ret);654 *f->ret = newIPint(ret);
661}655}
662 656
@@ -664,17 +658,19 @@ void · 1 unmodified line
664IPint_ori(void *fp)658IPint_ori(void *fp)
665{659{
666 F_IPint_ori *f;660 F_IPint_ori *f;
667 mpint *ret;661 mpint *ret, *i1, *i2;
662 void *v;
668 663
669 f = fp;664 f = fp;
670 destroy(*f->ret);665 v = *f->ret;
671 *f->ret = H;666 *f->ret = H;
667 destroy(v);
672 668
673 if(f->i1 == H || f->i2 == H)669 i1 = MP(f->i1);
674 error(exNilref);670 i2 = MP(f->i2);
675 ret = mpnew(0);671 ret = mpnew(0);
676 if(ret != nil)672 if(ret != nil)
677 mpor(MP(f->i1), MP(f->i2), ret);673 mpor(i1, i2, ret);
678 *f->ret = newIPint(ret);674 *f->ret = newIPint(ret);
679}675}
680 676
@@ -682,17 +678,19 @@ void · 1 unmodified line
682IPint_xor(void *fp)678IPint_xor(void *fp)
683{679{
684 F_IPint_xor *f;680 F_IPint_xor *f;
685 mpint *ret;681 mpint *ret, *i1, *i2;
682 void *v;
686 683
687 f = fp;684 f = fp;
688 destroy(*f->ret);685 v = *f->ret;
689 *f->ret = H;686 *f->ret = H;
687 destroy(v);
690 688
691 if(f->i1 == H || f->i2 == H)689 i1 = MP(f->i1);
692 error(exNilref);690 i2 = MP(f->i2);
693 ret = mpnew(0);691 ret = mpnew(0);
694 if(ret != nil)692 if(ret != nil)
695 mpxor(MP(f->i1), MP(f->i2), ret);693 mpxor(i1, i2, ret);
696 *f->ret = newIPint(ret);694 *f->ret = newIPint(ret);
697}695}
698 696
@@ -700,16 +698,17 @@ void · 1 unmodified line
700IPint_not(void *fp)698IPint_not(void *fp)
701{699{
702 F_IPint_not *f;700 F_IPint_not *f;
703 mpint *ret;701 mpint *ret, *i1;
702 void *v;
704 703
705 f = fp;704 f = fp;
706 destroy(*f->ret);705 v = *f->ret;
707 *f->ret = H;706 *f->ret = H;
707 destroy(v);
708 708
709 if(f->i1 == H)709 i1 = MP(f->i1);
710 error(exNilref);
711 ret = mpnew(0);710 ret = mpnew(0);
712 if(ret != nil)711 if(ret != nil)
713 mpnot(MP(f->i1), ret);712 mpnot(i1, ret);
714 *f->ret = newIPint(ret);713 *f->ret = newIPint(ret);
715}714}