| 140 | } |
| 141 | |
| 142 | int reftable_encode_key(int *restart, struct string_view dest, |
| 143 | struct reftable_buf prev_key, struct reftable_buf key, |
| 144 | uint8_t extra) |
| 145 | { |
| 146 | struct string_view start = dest; |
| 147 | size_t prefix_len = common_prefix_size(&prev_key, &key); |
| 148 | uint64_t suffix_len = key.len - prefix_len; |
| 149 | int n = put_var_int(&dest, prefix_len); |
| 150 | if (n < 0) |
| 151 | return n; |
| 152 | string_view_consume(&dest, n); |
| 153 | |
| 154 | *restart = (prefix_len == 0); |
| 155 | |
| 156 | n = put_var_int(&dest, suffix_len << 3 | (uint64_t)extra); |
| 157 | if (n < 0) |
| 158 | return n; |
| 159 | string_view_consume(&dest, n); |
| 160 | |
| 161 | if (dest.len < suffix_len) |
| 162 | return REFTABLE_ENTRY_TOO_BIG_ERROR; |
| 163 | memcpy(dest.buf, key.buf + prefix_len, suffix_len); |
| 164 | string_view_consume(&dest, suffix_len); |
| 165 | |
| 166 | return start.len - dest.len; |
| 167 | } |
| 168 | |
| 169 | int reftable_decode_keylen(struct string_view in, |
| 170 | uint64_t *prefix_len, |