bsdiff-portable

A more portable version of Colin Percival's bsdiff
git clone git://git.sgregoratto.me/bsdiff-portable
Log | Files | Refs | LICENSE

commit 40729c263bcc5354ce08769e35662e3eb5b96d2b
parent d0681e3f0762cc5d2271a55a47e7d5500e9b8e56
Author: Stephen Gregoratto <dev@sgregoratto.me>
Date:   Wed, 23 Sep 2020 19:56:40 +1000

offt(out|in): roll up loops

Diffstat:
Mutil.c | 51+++++++++++----------------------------------------
1 file changed, 11 insertions(+), 40 deletions(-)

diff --git a/util.c b/util.c @@ -206,32 +206,13 @@ offtout(off_t x, uint8_t *buf) { off_t y; - if (x < 0) - y = -x; - else - y = x; - - buf[0] = y % 256; - y -= buf[0]; - y = y / 256; - buf[1] = y % 256; - y -= buf[1]; - y = y / 256; - buf[2] = y % 256; - y -= buf[2]; - y = y / 256; - buf[3] = y % 256; - y -= buf[3]; - y = y / 256; - buf[4] = y % 256; - y -= buf[4]; - y = y / 256; - buf[5] = y % 256; - y -= buf[5]; - y = y / 256; - buf[6] = y % 256; - y -= buf[6]; - y = y / 256; + y = x < 0 ? -x : x; + + for (int i = 0; i <= 6; i++) { + buf[i] = y % 256; + y -= buf[i]; + y /= 256; + } buf[7] = y % 256; if (x < 0) @@ -244,20 +225,10 @@ offtin(u_char *buf) off_t y; y = buf[7] & 0x7F; - y = y * 256; - y += buf[6]; - y = y * 256; - y += buf[5]; - y = y * 256; - y += buf[4]; - y = y * 256; - y += buf[3]; - y = y * 256; - y += buf[2]; - y = y * 256; - y += buf[1]; - y = y * 256; - y += buf[0]; + for (int i = 6; i >= 0; i--) { + y *= 256; + y += buf[i]; + } if (buf[7] & 0x80) y = -y;