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
 
33 7u83 5
// convert an mpint into a big endian byte array (most significant byte first; left adjusted)
2 - 6
//   return number of bytes converted
7
//   if p == nil, allocate and result array
8
int
9
mptobe(mpint *b, uchar *p, uint n, uchar **pp)
10
{
33 7u83 11
	int m;
2 - 12
 
33 7u83 13
	m = (mpsignif(b)+7)/8;
14
	if(m == 0)
15
		m++;
2 - 16
	if(p == nil){
33 7u83 17
		n = m;
2 - 18
		p = malloc(n);
33 7u83 19
		if(p == nil)
20
			sysfatal("mptobe: %r");
2 - 21
		setmalloctag(p, getcallerpc(&b));
33 7u83 22
	} else {
23
		if(n < m)
24
			return -1;
25
		if(n > m)
26
			memset(p+m, 0, n-m);
2 - 27
	}
28
	if(pp != nil)
29
		*pp = p;
33 7u83 30
	mptober(b, p, m);
31
	return m;
2 - 32
}