-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathutils.go
51 lines (45 loc) · 1.34 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package main
import (
"fmt"
"io/ioutil"
"strings"
)
// int8SliceToString convert and concatenate a []int8 slice to a string
// inspired by perterGo: https://groups.google.com/forum/#!topic/golang-nuts/Jel8Bb-YwX8
func int8SliceToString(char []int8) string {
s := make([]string, len(char))
for i := range s {
s[i] = string(char[i])
}
return strings.Join(s, "")
// TODO maybe change this to convert exclusively to [65]int8 array ?
}
// readAndTrimFile read a text file and return the content without the EOF carriage return
// this utility may be used with files from `/sys` or `/proc` file systems
var readAndTrimFile = func(path string) (ret string, err error) {
ret = ""
data, err := ioutilReadFile(path)
if err == nil {
ret = strings.TrimRight(string(data), "\n") // Trimright remove the EOF carriage return
}
return ret, err
//TODO manage multiple line files ?
}
// appendError() combines two errors into one
func appendError(err1 error, err2 error) (err error) {
switch {
case err1 != nil && err2 != nil:
err = fmt.Errorf("%v; %v", err1, err2)
case err1 != nil:
err = err1
case err2 != nil:
err = err2
case err1 == nil && err2 == nil:
err = nil
}
return err
}
// wrap `ioutil.ReadFile` in an unexported variable for testability
var ioutilReadFile = func(filename string) ([]byte, error) {
return ioutil.ReadFile(filename)
}