# [PATCH] reduce delta head inflated size

3 messages from 2006-10-18 to 2006-10-19. Participants: Nicolas Pitre, Morten Welinder.
Thread: https://gitlist.dev/t/5949

## Nicolas Pitre, 2006-10-18 19:56

Subject: [PATCH] reduce delta head inflated size
Message-ID: <Pine.LNX.4.64.0610181541280.1971@xanadu.home>
URL: https://gitlist.dev/e/Pine.LNX.4.64.0610181541280.1971%40xanadu.home

```
Supposing that both the base and result sizes were both full size 64-bit 
values, their encoding would occupy only 9.2 bytes each.  Therefore 
inflating 64 bytes is way overkill.  Limit it to 20 bytes instead which 
should be plenty enough for a couple years to come.

Signed-off-by: Nicolas Pitre <nico@cam.org>

---

diff --git a/sha1_file.c b/sha1_file.c
index 25c0bf9..e89d24c 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -943,7 +943,7 @@ static int packed_delta_info(struct pack
 
 	if (sizep) {
 		const unsigned char *data;
-		unsigned char delta_head[64];
+		unsigned char delta_head[20];
 		unsigned long result_size;
 		z_stream stream;
 		int st;

```

## Morten Welinder, 2006-10-19 13:49

Subject: Re: [PATCH] reduce delta head inflated size
Message-ID: <118833cc0610190649o484afdc8lb871d4b3c5361166@mail.gmail.com>
URL: https://gitlist.dev/e/118833cc0610190649o484afdc8lb871d4b3c5361166%40mail.gmail.com
In-Reply-To: <Pine.LNX.4.64.0610181541280.1971@xanadu.home>

```
On 10/18/06, Nicolas Pitre <nico@cam.org> wrote:
> Supposing that both the base and result sizes were both full size 64-bit
> values, their encoding would occupy only 9.2 bytes each.  Therefore
> inflating 64 bytes is way overkill.  Limit it to 20 bytes instead which
> should be plenty enough for a couple years to come.

2^63 ~ 9.2e18

Thus one signed 64-bit number can take up 1 sign + 19 digits + 1 nul.
That's 21 bytes.

If you don't like the constant, 4*sizeof(integer type) should work.
(Assuming sizeof measures in bytes.)

M.

```

## Nicolas Pitre, 2006-10-19 14:17

Subject: Re: [PATCH] reduce delta head inflated size
Message-ID: <Pine.LNX.4.64.0610191012090.1971@xanadu.home>
URL: https://gitlist.dev/e/Pine.LNX.4.64.0610191012090.1971%40xanadu.home
In-Reply-To: <118833cc0610190649o484afdc8lb871d4b3c5361166@mail.gmail.com>

```
On Thu, 19 Oct 2006, Morten Welinder wrote:

> On 10/18/06, Nicolas Pitre <nico@cam.org> wrote:
> > Supposing that both the base and result sizes were both full size 64-bit
> > values, their encoding would occupy only 9.2 bytes each.  Therefore
> > inflating 64 bytes is way overkill.  Limit it to 20 bytes instead which
> > should be plenty enough for a couple years to come.
> 
> 2^63 ~ 9.2e18
> 
> Thus one signed 64-bit number can take up 1 sign + 19 digits + 1 nul.
> That's 21 bytes.

No.  In this case the value is kept binary, with bits spread over 
consecutive bytes but with the MSB indicating continuation on the next 
byte.

This means 64 bits / 7 bits per byte = 9.1 bytes, hence 10.  Then there 
are 2 of those values that makes 20 bytes.


Nicolas

```
