xref: /inferno-os/libmp/port/mptoui.c (revision d9bd3181330830c49e714609e86eaa3e39a884ca)
137da2899SCharles.Forsyth #include "os.h"
237da2899SCharles.Forsyth #include <mp.h>
337da2899SCharles.Forsyth #include "dat.h"
437da2899SCharles.Forsyth 
537da2899SCharles.Forsyth /*
637da2899SCharles.Forsyth  *  this code assumes that mpdigit is at least as
737da2899SCharles.Forsyth  *  big as an int.
837da2899SCharles.Forsyth  */
937da2899SCharles.Forsyth 
1037da2899SCharles.Forsyth mpint*
uitomp(uint i,mpint * b)1137da2899SCharles.Forsyth uitomp(uint i, mpint *b)
1237da2899SCharles.Forsyth {
1337da2899SCharles.Forsyth 	if(b == nil)
1437da2899SCharles.Forsyth 		b = mpnew(0);
1537da2899SCharles.Forsyth 	mpassign(mpzero, b);
1637da2899SCharles.Forsyth 	if(i != 0)
1737da2899SCharles.Forsyth 		b->top = 1;
1837da2899SCharles.Forsyth 	*b->p = i;
1937da2899SCharles.Forsyth 	return b;
2037da2899SCharles.Forsyth }
2137da2899SCharles.Forsyth 
2237da2899SCharles.Forsyth uint
mptoui(mpint * b)2337da2899SCharles.Forsyth mptoui(mpint *b)
2437da2899SCharles.Forsyth {
2537da2899SCharles.Forsyth 	uint x;
2637da2899SCharles.Forsyth 
2737da2899SCharles.Forsyth 	x = *b->p;
28*d9bd3181SCharles.Forsyth 	if(b->sign < 0)
2937da2899SCharles.Forsyth 		x = 0;
30*d9bd3181SCharles.Forsyth 	else if(b->top > 1 || (sizeof(mpdigit) > sizeof(uint) && x > MAXUINT))
3137da2899SCharles.Forsyth 		x =  MAXUINT;
3237da2899SCharles.Forsyth 	return x;
3337da2899SCharles.Forsyth }
34