xref: /inferno-os/libmp/port/mptoi.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1 #include "os.h"
2 #include <mp.h>
3 #include "dat.h"
4 
5 /*
6  *  this code assumes that mpdigit is at least as
7  *  big as an int.
8  */
9 
10 mpint*
itomp(int i,mpint * b)11 itomp(int i, mpint *b)
12 {
13 	if(b == nil)
14 		b = mpnew(0);
15 	mpassign(mpzero, b);
16 	if(i != 0)
17 		b->top = 1;
18 	if(i < 0){
19 		b->sign = -1;
20 		*b->p = -i;
21 	} else
22 		*b->p = i;
23 	return b;
24 }
25 
26 int
mptoi(mpint * b)27 mptoi(mpint *b)
28 {
29 	uint x;
30 
31 	if(b->top==0)
32 		return 0;
33 	x = *b->p;
34 	if(b->sign > 0){
35 		if(b->top > 1 || (x > MAXINT))
36 			x = (int)MAXINT;
37 		else
38 			x = (int)x;
39 	} else {
40 		if(b->top > 1 || x > MAXINT+1)
41 			x = (int)MININT;
42 		else
43 			x = -(int)x;
44 	}
45 	return x;
46 }
47