1
0
Fork 1
mirror of https://github.com/vbatts/tar-split.git synced 2025-10-08 13:51:39 +00:00

vis: adding a pure golang Vis()

The current Vis() and Unvis() are using the C implementation from
MTREE(8).

But that means that cgo is used, which is not always desired.

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
This commit is contained in:
Vincent Batts 2016-08-25 14:17:08 -04:00
parent e42c679e89
commit 08b1000418
Signed by: vbatts
GPG key ID: 10937E57733F1362
19 changed files with 580 additions and 61 deletions

View file

@ -1,22 +1,7 @@
package mtree
// #include "vis.h"
// #include <stdlib.h>
import "C"
import (
"fmt"
"unsafe"
)
// Unvis is a wrapper for the C implementation of unvis, which decodes a string
// that potentially has characters that are encoded with Vis
func Unvis(src string) (string, error) {
cDst, cSrc := C.CString(string(make([]byte, len(src)+1))), C.CString(src)
defer C.free(unsafe.Pointer(cDst))
defer C.free(unsafe.Pointer(cSrc))
ret := C.strunvis(cDst, cSrc)
if ret == -1 {
return "", fmt.Errorf("failed to decode: %q", src)
}
return C.GoString(cDst), nil
return unvis(src)
}