| 352 | } |
| 353 | |
| 354 | static void *get_delta(struct object_entry *entry) |
| 355 | { |
| 356 | unsigned long size, base_size, delta_size; |
| 357 | void *buf, *base_buf, *delta_buf; |
| 358 | enum object_type type; |
| 359 | size_t size_st = 0, base_size_st = 0; |
| 360 | |
| 361 | buf = odb_read_object(the_repository->objects, &entry->idx.oid, |
| 362 | &type, &size_st); |
| 363 | size = cast_size_t_to_ulong(size_st); |
| 364 | if (!buf) |
| 365 | die(_("unable to read %s"), oid_to_hex(&entry->idx.oid)); |
| 366 | base_buf = odb_read_object(the_repository->objects, |
| 367 | &DELTA(entry)->idx.oid, &type, |
| 368 | &base_size_st); |
| 369 | base_size = cast_size_t_to_ulong(base_size_st); |
| 370 | if (!base_buf) |
| 371 | die("unable to read %s", |
| 372 | oid_to_hex(&DELTA(entry)->idx.oid)); |
| 373 | delta_buf = diff_delta(base_buf, base_size, |
| 374 | buf, size, &delta_size, 0); |
| 375 | /* |
| 376 | * We successfully computed this delta once but dropped it for |
| 377 | * memory reasons. Something is very wrong if this time we |
| 378 | * recompute and create a different delta. |
| 379 | */ |
| 380 | if (!delta_buf || delta_size != DELTA_SIZE(entry)) |
| 381 | BUG("delta size changed"); |
| 382 | free(buf); |
| 383 | free(base_buf); |
| 384 | return delta_buf; |
| 385 | } |
| 386 | |
| 387 | static unsigned long do_compress(void **pptr, unsigned long size) |
| 388 | { |
no test coverage detected