diff options
author | kch42 <laria@laria.me> | 2016-04-30 23:37:03 +0200 |
---|---|---|
committer | kch42 <laria@laria.me> | 2016-04-30 23:37:03 +0200 |
commit | 3a9208ec940a902e1c00580dc17ca422f3e4f0c3 (patch) | |
tree | 6eb94b6f3b29ad29ffa852d76d82925b8b37e93b /librsync/librsync_callback.go | |
parent | 698edd704ce126e1112aba8d7e0e9fb80bacc75a (diff) | |
parent | 3275f0686a08d8e323568036f003b92b6655808c (diff) | |
download | golibrsync-3a9208ec940a902e1c00580dc17ca422f3e4f0c3.tar.gz golibrsync-3a9208ec940a902e1c00580dc17ca422f3e4f0c3.tar.bz2 golibrsync-3a9208ec940a902e1c00580dc17ca422f3e4f0c3.zip |
Merge pull request #2 from aykevl/fix-cgo-callback
Fix CGo callback
Diffstat (limited to 'librsync/librsync_callback.go')
-rw-r--r-- | librsync/librsync_callback.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/librsync/librsync_callback.go b/librsync/librsync_callback.go new file mode 100644 index 0000000..c8b9e4f --- /dev/null +++ b/librsync/librsync_callback.go @@ -0,0 +1,31 @@ +package librsync + +/* +#include <stdio.h> +#include <librsync.h> +*/ +import "C" + +import ( + "io" + "unsafe" +) + +//export patchCallbackGo +func patchCallbackGo(_patcher unsafe.Pointer, pos C.rs_long_t, len *C.size_t, _buf *unsafe.Pointer) C.rs_result { + patcher := (*Patcher)(_patcher) + + patcher.buf = make([]byte, int(*len)) + n, err := patcher.basis.ReadAt(patcher.buf, int64(pos)) + if n < int(*len) { + if err != io.EOF { + panic(jobInternalPanic{err}) + } else { + return C.RS_INPUT_ENDED + } + } + *len = C.size_t(n) + *_buf = unsafe.Pointer(&(patcher.buf[0])) + + return C.RS_DONE +} |