/*- * Copyright 2003-2005 Colin Percival * Copyright 2012 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without * modification, are permitted providing that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef BSDIFF_H # define BSDIFF_H #pragma once # include # include #include "config.h" #ifdef __cplusplus extern "C" { #endif struct bsdiff_stream { void* opaque; void* (*malloc)(size_t size); void (*free)(void* ptr); int (*write)(struct bsdiff_stream* stream, const void* buffer, int size); }; static void offtout(int64_t x, uint8_t* buf) { int64_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; buf[7] = y % 256; if (x < 0) buf[7] |= 0x80; } TOOLKIT_API int bsdiff(const uint8_t* old, int64_t oldsize, const uint8_t* newone, int64_t newsize, struct bsdiff_stream* diffstream); #ifdef __cplusplus } // extern "C" { #endif #endif