libceph: ceph_decode_skip_* helpers
Some of these won't be as efficient as they could be (e.g. ceph_decode_skip_set(... 32 ...) could advance by len * sizeof(u32) once instead of advancing by sizeof(u32) len times), but that's fine and not worth a bunch of extra macro code. Replace skip_name_map() with ceph_decode_skip_map as an example. Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
@@ -132,6 +132,66 @@ bad:
|
||||
return ERR_PTR(-ERANGE);
|
||||
}
|
||||
|
||||
/*
|
||||
* skip helpers
|
||||
*/
|
||||
#define ceph_decode_skip_n(p, end, n, bad) \
|
||||
do { \
|
||||
ceph_decode_need(p, end, n, bad); \
|
||||
*p += n; \
|
||||
} while (0)
|
||||
|
||||
#define ceph_decode_skip_64(p, end, bad) \
|
||||
ceph_decode_skip_n(p, end, sizeof(u64), bad)
|
||||
|
||||
#define ceph_decode_skip_32(p, end, bad) \
|
||||
ceph_decode_skip_n(p, end, sizeof(u32), bad)
|
||||
|
||||
#define ceph_decode_skip_16(p, end, bad) \
|
||||
ceph_decode_skip_n(p, end, sizeof(u16), bad)
|
||||
|
||||
#define ceph_decode_skip_8(p, end, bad) \
|
||||
ceph_decode_skip_n(p, end, sizeof(u8), bad)
|
||||
|
||||
#define ceph_decode_skip_string(p, end, bad) \
|
||||
do { \
|
||||
u32 len; \
|
||||
\
|
||||
ceph_decode_32_safe(p, end, len, bad); \
|
||||
ceph_decode_skip_n(p, end, len, bad); \
|
||||
} while (0)
|
||||
|
||||
#define ceph_decode_skip_set(p, end, type, bad) \
|
||||
do { \
|
||||
u32 len; \
|
||||
\
|
||||
ceph_decode_32_safe(p, end, len, bad); \
|
||||
while (len--) \
|
||||
ceph_decode_skip_##type(p, end, bad); \
|
||||
} while (0)
|
||||
|
||||
#define ceph_decode_skip_map(p, end, ktype, vtype, bad) \
|
||||
do { \
|
||||
u32 len; \
|
||||
\
|
||||
ceph_decode_32_safe(p, end, len, bad); \
|
||||
while (len--) { \
|
||||
ceph_decode_skip_##ktype(p, end, bad); \
|
||||
ceph_decode_skip_##vtype(p, end, bad); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define ceph_decode_skip_map_of_map(p, end, ktype1, ktype2, vtype2, bad) \
|
||||
do { \
|
||||
u32 len; \
|
||||
\
|
||||
ceph_decode_32_safe(p, end, len, bad); \
|
||||
while (len--) { \
|
||||
ceph_decode_skip_##ktype1(p, end, bad); \
|
||||
ceph_decode_skip_map(p, end, ktype2, vtype2, bad); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* struct ceph_timespec <-> struct timespec
|
||||
*/
|
||||
|
Reference in New Issue
Block a user