1
0
Fork 0
mirror of https://github.com/vbatts/go-mtree.git synced 2025-10-06 21:17:19 +00:00

vis: refactored code to reflect using vis/unvis for file names

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() and String()
to account for possible errors Vis() and Unvis() could return.

Signed-off-by: Stephen Chung <schung@redhat.com>
This commit is contained in:
Stephen Chung 2016-07-20 21:18:27 -04:00
parent 9bec5e46b7
commit c4d09ce5f7
7 changed files with 129 additions and 34 deletions

View file

@ -1,15 +1,23 @@
package mtree
// #include "vis.h"
// #include <stdlib.h>
import "C"
import "fmt"
import (
"fmt"
"unsafe"
)
func Unvis(str string) (string, error) {
dst := new(C.char)
ret := C.strunvis(dst, C.CString(str))
if ret == 0 {
return "", fmt.Errorf("failed to encode string")
// 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(dst), nil
return C.GoString(cDst), nil
}