32
int ceph_armor(char *dst, const char *src, const char *end)
32
static int set_str_val(char **pdst, const char *end, char c)
44
int ceph_armor(char *dst, const char *dst_end, const char *src, const char *end)
49
#define SET_DST(c) do { \
50
int __ret = set_str_val(&dst, dst_end, c); \
37
55
while (src < end) {
38
56
unsigned char a, b, c;
41
*dst++ = encode_bits(a >> 2);
59
SET_DST(encode_bits(a >> 2));
44
*dst++ = encode_bits(((a & 3) << 4) | (b >> 4));
62
SET_DST(encode_bits(((a & 3) << 4) | (b >> 4)));
47
*dst++ = encode_bits(((b & 15) << 2) | (c >> 6));
48
*dst++ = encode_bits(c & 63);
65
SET_DST(encode_bits(((b & 15) << 2) |
67
SET_DST(encode_bits(c & 63));
50
*dst++ = encode_bits((b & 15) << 2);
69
SET_DST(encode_bits((b & 15) << 2));
54
*dst++ = encode_bits(((a & 3) << 4));
73
SET_DST(encode_bits(((a & 3) << 4)));
69
int ceph_unarmor(char *dst, const char *src, const char *end)
88
int ceph_unarmor(char *dst, const char *dst_end, const char *src, const char *end)
84
103
if (a < 0 || b < 0 || c < 0 || d < 0)
87
*dst++ = (a << 2) | (b >> 4);
106
SET_DST((a << 2) | (b >> 4));
88
107
if (src[2] == '=')
90
*dst++ = ((b & 15) << 4) | (c >> 2);
109
SET_DST(((b & 15) << 4) | (c >> 2));
91
110
if (src[3] == '=')
93
*dst++ = ((c & 3) << 6) | d;
112
SET_DST(((c & 3) << 6) | d);