]>
Commit | Line | Data |
---|---|---|
1 | #ifndef DELTA_H | |
2 | #define DELTA_H | |
3 | ||
4 | /* handling of delta buffers */ | |
5 | extern void *diff_delta(void *from_buf, unsigned long from_size, | |
6 | void *to_buf, unsigned long to_size, | |
7 | unsigned long *delta_size, unsigned long max_size); | |
8 | extern void *patch_delta(void *src_buf, unsigned long src_size, | |
9 | void *delta_buf, unsigned long delta_size, | |
10 | unsigned long *dst_size); | |
11 | ||
12 | /* the smallest possible delta size is 4 bytes */ | |
13 | #define DELTA_SIZE_MIN 4 | |
14 | ||
15 | /* | |
16 | * This must be called twice on the delta data buffer, first to get the | |
17 | * expected reference buffer size, and again to get the result buffer size. | |
18 | */ | |
19 | static inline unsigned long get_delta_hdr_size(const unsigned char **datap) | |
20 | { | |
21 | const unsigned char *data = *datap; | |
22 | unsigned char cmd; | |
23 | unsigned long size = 0; | |
24 | int i = 0; | |
25 | do { | |
26 | cmd = *data++; | |
27 | size |= (cmd & ~0x80) << i; | |
28 | i += 7; | |
29 | } while (cmd & 0x80); | |
30 | *datap = data; | |
31 | return size; | |
32 | } | |
33 | ||
34 | #endif |