Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_tlsv12/sys/src/libmp/port/betomp.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | 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
// convert a big-endian byte array (most significant byte first) to an mpint
6
mpint*
7
betomp(uchar *p, uint n, mpint *b)
8
{
9
	int m, s;
10
	mpdigit x;
11
 
12
	if(b == nil){
13
		b = mpnew(0);
14
		setmalloctag(b, getcallerpc(&p));
15
	}
16
 
17
	// dump leading zeros
18
	while(*p == 0 && n > 1){
19
		p++;
20
		n--;
21
	}
22
 
23
	// get the space
24
	mpbits(b, n*8);
25
	b->top = DIGITS(n*8);
26
	m = b->top-1;
27
 
28
	// first digit might not be Dbytes long
29
	s = ((n-1)*8)%Dbits;
30
	x = 0;
31
	for(; n > 0; n--){
32
		x |= ((mpdigit)(*p++)) << s;
33
		s -= 8;
34
		if(s < 0){
35
			b->p[m--] = x;
36
			s = Dbits-8;
37
			x = 0;
38
		}
39
	}
40
 
41
	return b;
42
}