File tree Expand file tree Collapse file tree 1 file changed +20
-4
lines changed Expand file tree Collapse file tree 1 file changed +20
-4
lines changed Original file line number Diff line number Diff line change 19
19
#define READ_BYTE (p ) READ_VALUE(uint8_t, p)
20
20
21
21
//解码一个无符号32位或64整型,目前只会用到32位类型,在大多数实现中占5个字节
22
- int32_t read_leb_u32 (uint8_t * * p ) {
22
+ uint32_t read_leb_u32 (uint8_t * * p ) {
23
23
uint8_t * buf = * p ;
24
- int32_t res = 0 ;
25
- for (int32_t i = 0 ; i < 7 ; i ++ ) {
26
- res |= (buf [i ] & 0x7f ) << (i * 7 ); //出错了,忘记加‘|’
24
+ uint32_t res = 0 ;
25
+ for (int32_t i = 0 ; i < 10 ; i ++ ) {
26
+ res |= (buf [i ] & 0x7f ) << (i * 7 );
27
27
if ((buf [i ] & 0x80 ) == 0 ) {
28
28
* p += i + 1 ;
29
29
return res ;
@@ -32,6 +32,22 @@ int32_t read_leb_u32(uint8_t** p) {
32
32
return 0 ;
33
33
}
34
34
35
+ int32_t read_leb_i32 (uint8_t * * p ) {
36
+ uint8_t * buf = * p ;
37
+ int32_t res = 0 ;
38
+ for (int32_t i = 0 ; i < 10 ; i ++ ) {
39
+ res |= (buf [i ] & 0x7f ) << (i * 7 );
40
+ if ((buf [i ] & 0x80 ) == 0 ) {
41
+ * p += i + 1 ;
42
+ if ((buf [i ] & 0x40 ) != 0 ) {
43
+ res = res | (-1 << ((i + 1 ) * 7 ));
44
+ }
45
+ return res ;
46
+ }
47
+ }
48
+ return 0 ;
49
+ }
50
+
35
51
//检查魔数和版本号
36
52
static bool check_magic_number_and_version (uint8_t * * p ) {
37
53
uint32_t magic_number = 0 , version = 0 ;
You can’t perform that action at this time.
0 commit comments