30 lines
550 B
Go
30 lines
550 B
Go
|
package native
|
||
|
|
||
|
/*
|
||
|
#cgo CFLAGS: -I../../bsdiff
|
||
|
|
||
|
#include "bspatch.h"
|
||
|
#include "cgo.h"
|
||
|
*/
|
||
|
import "C"
|
||
|
import (
|
||
|
"errors"
|
||
|
"io"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
func Patch(oldbytes, newbytes []byte, patch io.Reader) (err error) {
|
||
|
oldptr, oldsize := bytesToUint8PtrAndSize(oldbytes)
|
||
|
newptr, newsize := bytesToUint8PtrAndSize(newbytes)
|
||
|
|
||
|
bufferIndex := readers.Add(patch)
|
||
|
|
||
|
errCode := int(C.bspatch_cgo(oldptr, oldsize, newptr, newsize, C.int(bufferIndex)))
|
||
|
if errCode != 0 {
|
||
|
err = errors.New("bspatch failed with code " + strconv.Itoa(errCode))
|
||
|
return
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|