Subversion Repositories planix.SVN

Rev

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

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include "flashfs.h"
4
 
5
char*	prog;
6
ulong	sectsize;
7
ulong	nsects;
8
uchar*	sectbuff;
9
int	readonly;
10
ulong	delta;
11
int	eparity;
12
 
13
uchar	magic[]	= { MAGIC0, MAGIC1, MAGIC2, FFSVERS };
14
 
15
int
16
putc3(uchar *buff, ulong v)
17
{
18
	if(v < (1 << 7)) {
19
		buff[0] = v;
20
		return 1;
21
	}
22
 
23
	if(v < (1 << 13)) {
24
		buff[0] = 0x80 | (v >> 7);
25
		buff[1] = v & ((1 << 7) - 1);
26
		return 2;
27
	}
28
 
29
	if(v < (1 << 21)) {
30
		buff[0] = 0x80 | (v >> 15);
31
		buff[1] = 0x80 | ((v >> 8) & ((1 << 7) - 1));
32
		buff[2] = v;
33
		return 3;
34
	}
35
 
36
	fprint(2, "%s: putc3 fail 0x%lux, called from %#p\n", prog, v, getcallerpc(&buff));
37
	abort();
38
	return -1;
39
}
40
 
41
int
42
getc3(uchar *buff, ulong *p)
43
{
44
	int c, d;
45
 
46
	c = buff[0];
47
	if((c & 0x80) == 0) {
48
		*p = c;
49
		return 1;
50
	}
51
 
52
	c &= ~0x80;
53
	d = buff[1];
54
	if((d & 0x80) == 0) {
55
		*p = (c << 7) | d;
56
		return 2;
57
	}
58
 
59
	d &= ~0x80;
60
	*p = (c << 15) | (d << 8) | buff[2];
61
	return 3;
62
}
63
 
64
ulong
65
get4(uchar *b)
66
{
67
	return	(b[0] <<  0) |
68
		(b[1] <<  8) |
69
		(b[2] << 16) |
70
		(b[3] << 24);
71
}
72
 
73
void
74
put4(uchar *b, ulong v)
75
{
76
	b[0] = v >>  0;
77
	b[1] = v >>  8;
78
	b[2] = v >> 16;
79
	b[3] = v >> 24;
80
}