mirror of
https://github.com/vbatts/go-mtree.git
synced 2024-11-28 19:15:40 +00:00
773763fb87
Added some more test cases for `vis`ing and `unvis`ing strings, and a test case that walks/checks a directory with filenames that require encoding. Had to change Path() to account for possible errors Unvis() could return. Refactored Vis()/Unvis() into go-mtree tar functionality as well. Signed-off-by: Stephen Chung <schung@redhat.com>
22 lines
562 B
Go
22 lines
562 B
Go
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
|
|
}
|