MCPcopy Create free account
hub / github.com/git/git / reftable_ref_record_decode

Function reftable_ref_record_decode

reftable/record.c:360–437  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

358}
359
360static int reftable_ref_record_decode(void *rec, struct reftable_buf key,
361 uint8_t val_type, struct string_view in,
362 uint32_t hash_size, struct reftable_buf *scratch)
363{
364 struct reftable_ref_record *r = rec;
365 struct string_view start = in;
366 uint64_t update_index = 0;
367 const char *refname = NULL;
368 size_t refname_cap = 0;
369 int n, err;
370
371 n = get_var_int(&update_index, &in);
372 if (n < 0)
373 return n;
374 string_view_consume(&in, n);
375
376 REFTABLE_SWAP(refname, r->refname);
377 REFTABLE_SWAP(refname_cap, r->refname_cap);
378 reftable_ref_record_release(r);
379 REFTABLE_SWAP(r->refname, refname);
380 REFTABLE_SWAP(r->refname_cap, refname_cap);
381
382 REFTABLE_ALLOC_GROW_OR_NULL(r->refname, key.len + 1, r->refname_cap);
383 if (!r->refname) {
384 err = REFTABLE_OUT_OF_MEMORY_ERROR;
385 goto done;
386 }
387 memcpy(r->refname, key.buf, key.len);
388 r->refname[key.len] = 0;
389
390 r->update_index = update_index;
391 r->value_type = val_type;
392 switch (val_type) {
393 case REFTABLE_REF_VAL1:
394 if (in.len < hash_size) {
395 err = REFTABLE_FORMAT_ERROR;
396 goto done;
397 }
398
399 memcpy(r->value.val1, in.buf, hash_size);
400 string_view_consume(&in, hash_size);
401 break;
402
403 case REFTABLE_REF_VAL2:
404 if (in.len < 2 * hash_size) {
405 err = REFTABLE_FORMAT_ERROR;
406 goto done;
407 }
408
409 memcpy(r->value.val2.value, in.buf, hash_size);
410 string_view_consume(&in, hash_size);
411
412 memcpy(r->value.val2.target_value, in.buf, hash_size);
413 string_view_consume(&in, hash_size);
414 break;
415
416 case REFTABLE_REF_SYMREF: {
417 int n = decode_string(scratch, in);

Callers

nothing calls this directly

Calls 5

get_var_intFunction · 0.85
string_view_consumeFunction · 0.85
decode_stringFunction · 0.85
reftable_buf_detachFunction · 0.85

Tested by

no test coverage detected