~ubuntu-branches/ubuntu/quantal/ceph/quantal

« back to all changes in this revision

Viewing changes to src/common/armor.c

  • Committer: Bazaar Package Importer
  • Author(s): Clint Byrum, Clint Byrum, Micah Gersten
  • Date: 2011-02-12 22:50:26 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20110212225026-yyyw4tk0msgql3ul
Tags: 0.24.2-0ubuntu1
[ Clint Byrum <clint@ubuntu.com> ]
* New upstream release. (LP: #658670, LP: #684011)
* debian/patches/fix-mkcephfs.patch: dropped (applied upstream)
* Removed .la files from libceph1-dev, libcrush1-dev and 
  librados1-dev (per Debian policy v3.9.1 10.2).
* debian/control: adding pkg-config as a build dependency
* debian/control: depend on libcrypto++-dev instead of libssl-dev
* debian/watch: added watch file

[ Micah Gersten <micahg@ubuntu.com> ]
* debian/control: add Homepage

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
        return -EINVAL; 
30
30
}
31
31
 
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)
 
33
{
 
34
        if (*pdst < end) {
 
35
                char *p = *pdst;
 
36
                *p = c;
 
37
                (*pdst)++;
 
38
        } else
 
39
                return -ERANGE;
 
40
 
 
41
        return 0;
 
42
}
 
43
 
 
44
int ceph_armor(char *dst, const char *dst_end, const char *src, const char *end)
33
45
{
34
46
        int olen = 0;
35
47
        int line = 0;
36
48
 
 
49
#define SET_DST(c) do { \
 
50
        int __ret = set_str_val(&dst, dst_end, c); \
 
51
        if (__ret < 0) \
 
52
                return __ret; \
 
53
} while (0);
 
54
 
37
55
        while (src < end) {
38
56
                unsigned char a, b, c;
39
57
 
40
58
                a = *src++;
41
 
                *dst++ = encode_bits(a >> 2);
 
59
                SET_DST(encode_bits(a >> 2));
42
60
                if (src < end) {
43
61
                        b = *src++;
44
 
                        *dst++ = encode_bits(((a & 3) << 4) | (b >> 4));
 
62
                        SET_DST(encode_bits(((a & 3) << 4) | (b >> 4)));
45
63
                        if (src < end) {
46
64
                                c = *src++;
47
 
                                *dst++ = encode_bits(((b & 15) << 2) | (c >> 6));
48
 
                                *dst++ = encode_bits(c & 63);
 
65
                                SET_DST(encode_bits(((b & 15) << 2) |
 
66
                                                                (c >> 6)));
 
67
                                SET_DST(encode_bits(c & 63));
49
68
                        } else {
50
 
                                *dst++ = encode_bits((b & 15) << 2);
51
 
                                *dst++ = '=';                           
 
69
                                SET_DST(encode_bits((b & 15) << 2));
 
70
                                SET_DST('=');
52
71
                        }
53
72
                } else {
54
 
                        *dst++ = encode_bits(((a & 3) << 4));
55
 
                        *dst++ = '=';
56
 
                        *dst++ = '=';
 
73
                        SET_DST(encode_bits(((a & 3) << 4)));
 
74
                        SET_DST('=');
 
75
                        SET_DST('=');
57
76
                }
58
77
                olen += 4;
59
78
                line += 4;
60
79
                if (line == 64) {
61
80
                        line = 0;
62
 
                        *(dst++) = '\n';
 
81
                        SET_DST('\n');
63
82
                        olen++;
64
83
                }
65
84
        }
66
85
        return olen;
67
86
}
68
87
 
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)
70
89
{
71
90
        int olen = 0;
72
91
 
84
103
                if (a < 0 || b < 0 || c < 0 || d < 0)
85
104
                        return -EINVAL;
86
105
 
87
 
                *dst++ = (a << 2) | (b >> 4);
 
106
                SET_DST((a << 2) | (b >> 4));
88
107
                if (src[2] == '=')
89
108
                        return olen + 1;
90
 
                *dst++ = ((b & 15) << 4) | (c >> 2);
 
109
                SET_DST(((b & 15) << 4) | (c >> 2));
91
110
                if (src[3] == '=')
92
111
                        return olen + 2;
93
 
                *dst++ = ((c & 3) << 6) | d;
 
112
                SET_DST(((c & 3) << 6) | d);
94
113
                olen += 3;
95
114
                src += 4;
96
115
        }