Subversion Repositories planix.SVN

Rev

Rev 33 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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*
11
itomp(int i, mpint *b)
12
{
33 7u83 13
	if(b == nil){
2 - 14
		b = mpnew(0);
33 7u83 15
		setmalloctag(b, getcallerpc(&i));
16
	}
17
	b->sign = (i >> (sizeof(i)*8 - 1)) | 1;
18
	i *= b->sign;
19
	*b->p = i;
20
	b->top = 1;
21
	return mpnorm(b);
2 - 22
}
23
 
24
int
25
mptoi(mpint *b)
26
{
27
	uint x;
28
 
29
	if(b->top==0)
30
		return 0;
31
	x = *b->p;
32
	if(b->sign > 0){
33
		if(b->top > 1 || (x > MAXINT))
34
			x = (int)MAXINT;
35
		else
36
			x = (int)x;
37
	} else {
38
		if(b->top > 1 || x > MAXINT+1)
39
			x = (int)MININT;
40
		else
41
			x = -(int)x;
42
	}
43
	return x;
44
}