| 317 | } |
| 318 | |
| 319 | static int reftable_ref_record_encode(const void *rec, struct string_view s, |
| 320 | uint32_t hash_size) |
| 321 | { |
| 322 | const struct reftable_ref_record *r = |
| 323 | (const struct reftable_ref_record *)rec; |
| 324 | struct string_view start = s; |
| 325 | int n = put_var_int(&s, r->update_index); |
| 326 | if (n < 0) |
| 327 | return n; |
| 328 | string_view_consume(&s, n); |
| 329 | |
| 330 | switch (r->value_type) { |
| 331 | case REFTABLE_REF_SYMREF: |
| 332 | n = encode_string(r->value.symref, s); |
| 333 | if (n < 0) |
| 334 | return n; |
| 335 | string_view_consume(&s, n); |
| 336 | break; |
| 337 | case REFTABLE_REF_VAL2: |
| 338 | if (s.len < 2 * hash_size) |
| 339 | return REFTABLE_ENTRY_TOO_BIG_ERROR; |
| 340 | memcpy(s.buf, r->value.val2.value, hash_size); |
| 341 | string_view_consume(&s, hash_size); |
| 342 | memcpy(s.buf, r->value.val2.target_value, hash_size); |
| 343 | string_view_consume(&s, hash_size); |
| 344 | break; |
| 345 | case REFTABLE_REF_VAL1: |
| 346 | if (s.len < hash_size) |
| 347 | return REFTABLE_ENTRY_TOO_BIG_ERROR; |
| 348 | memcpy(s.buf, r->value.val1, hash_size); |
| 349 | string_view_consume(&s, hash_size); |
| 350 | break; |
| 351 | case REFTABLE_REF_DELETION: |
| 352 | break; |
| 353 | default: |
| 354 | abort(); |
| 355 | } |
| 356 | |
| 357 | return start.len - s.len; |
| 358 | } |
| 359 | |
| 360 | static int reftable_ref_record_decode(void *rec, struct reftable_buf key, |
| 361 | uint8_t val_type, struct string_view in, |
nothing calls this directly
no test coverage detected