74 lines
1.9 KiB
C
74 lines
1.9 KiB
C
#include "util-extract.h"
|
|
|
|
|
|
unsigned char
|
|
e_next_byte(struct ebuf_t *ebuf) {
|
|
if (ebuf->offset + 1 > ebuf->max)
|
|
return -1;
|
|
|
|
return ebuf->buf[ebuf->offset++];
|
|
}
|
|
|
|
unsigned short
|
|
e_next_short16(struct ebuf_t *ebuf, int endian) {
|
|
const unsigned char *buf = ebuf->buf;
|
|
size_t offset = ebuf->offset;
|
|
unsigned short result;
|
|
|
|
if (ebuf->offset + 2 > ebuf->max)
|
|
return -1;
|
|
|
|
if (endian == EBUF_BE) {
|
|
result = buf[offset+0]<<8 | buf[offset+1];
|
|
} else {
|
|
result = buf[offset+1]<<8 | buf[offset+0];
|
|
}
|
|
ebuf->offset += 2;
|
|
return result;
|
|
}
|
|
unsigned e_next_int32(struct ebuf_t *ebuf, int endian) {
|
|
const unsigned char *buf = ebuf->buf;
|
|
size_t offset = ebuf->offset;
|
|
unsigned result;
|
|
|
|
if (ebuf->offset + 4 > ebuf->max)
|
|
return -1;
|
|
|
|
if (endian == EBUF_BE) {
|
|
result = buf[offset+0]<<24 | buf[offset+1] << 16
|
|
| buf[offset+2]<<8 | buf[offset+3] << 0;
|
|
} else {
|
|
result = buf[offset+3]<<24 | buf[offset+2] << 16
|
|
| buf[offset+1]<<8 | buf[offset+0] << 0;
|
|
}
|
|
ebuf->offset += 4;
|
|
return result;
|
|
}
|
|
unsigned long long
|
|
e_next_long64(struct ebuf_t *ebuf, int endian) {
|
|
const unsigned char *buf = ebuf->buf;
|
|
size_t offset = ebuf->offset;
|
|
unsigned long long hi;
|
|
unsigned long long lo;
|
|
|
|
if (ebuf->offset + 8 > ebuf->max)
|
|
return -1ll;
|
|
|
|
if (endian == EBUF_BE) {
|
|
hi = buf[offset+0]<<24 | buf[offset+1] << 16
|
|
| buf[offset+2]<<8 | buf[offset+3] << 0;
|
|
lo = buf[offset+4]<<24 | buf[offset+5] << 16
|
|
| buf[offset+6]<<8 | buf[offset+7] << 0;
|
|
} else {
|
|
lo = buf[offset+3]<<24 | buf[offset+2] << 16
|
|
| buf[offset+1]<<8 | buf[offset+0] << 0;
|
|
hi = buf[offset+7]<<24 | buf[offset+6] << 16
|
|
| buf[offset+5]<<8 | buf[offset+4] << 0;
|
|
}
|
|
ebuf->offset += 8;
|
|
return hi<<32ull | lo;
|
|
|
|
}
|
|
|
|
|