-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathutil.go
95 lines (91 loc) · 1.79 KB
/
util.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"encoding/hex"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strconv"
)
func align(n, a uint32) uint32 {
if a == 0 {
printerr("warning: file alignment was zero")
return 512
}
// TODO: This might be different
return (a - n) % a
}
func clean(dir string) string {
dir = filepath.ToSlash(dir)
dir = filepath.FromSlash(dir)
return filepath.Clean(dir)
}
func dirof(file string) string {
file = clean(file)
printerr("dirof:", file, "=", filepath.Dir(file))
return filepath.Dir(file)
}
func fatal(v interface{}) {
printerr(v)
os.Exit(1)
}
func hwrite(name string, data []byte) error {
s := hex.Dump(data)
return write(name, []byte(s))
}
func mkdir(dir string) error {
err := os.MkdirAll(clean(dir), 0777)
if err != nil {
printerr(err)
os.Exit(1)
}
return nil
}
func read(name string) ([]byte, error) {
return ioutil.ReadFile(clean(name))
}
func readable(file string) bool {
fd, err := os.Open(clean(file))
defer fd.Close()
if err != nil {
printerr(err) //TODO
}
return true
}
func mustnil(e error) {
if e == nil {
return
}
fatal(e)
}
func println(v ...interface{}) {
fmt.Print(Prefix)
fmt.Println(v...)
}
func printerr(v ...interface{}) {
fmt.Fprint(os.Stderr, Prefix)
fmt.Fprintln(os.Stderr, v...)
}
func read64(file string) (uint64, error) {
data, err := read(clean(file))
if err != nil {
return 0, err
}
return strconv.ParseUint(string(data), 10, 64)
}
func sscan(s string, a ...interface{}) (n int, err error) {
data, err := read(clean(s))
if err != nil {
mustnil(err)
return
}
return fmt.Sscan(string(data), a...)
}
func write(name string, data []byte) error {
printerr("write: rq", name)
name = clean(name)
printerr("write: clean:", name)
printerr("write: dirof:", dirof(name))
mkdir(dirof(name))
return ioutil.WriteFile(name, data, 0777)
}