Skip to content

Commit 22694c6

Browse files
authored
Merge pull request #93 from gupta-ak/ioutils
Added driver utils
2 parents cf279e6 + c718305 commit 22694c6

1 file changed

Lines changed: 74 additions & 0 deletions

File tree

driver/utils.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package driver
2+
3+
import (
4+
"io"
5+
"io/ioutil"
6+
"os"
7+
"sort"
8+
)
9+
10+
// ReadFile works the same as ioutil.ReadFile with the Driver abstraction
11+
func ReadFile(r Driver, filename string) ([]byte, error) {
12+
f, err := r.Open(filename)
13+
if err != nil {
14+
return nil, err
15+
}
16+
defer f.Close()
17+
18+
data, err := ioutil.ReadAll(f)
19+
if err != nil {
20+
return nil, err
21+
}
22+
23+
return data, nil
24+
}
25+
26+
// WriteFile works the same as ioutil.WriteFile with the Driver abstraction
27+
func WriteFile(r Driver, filename string, data []byte, perm os.FileMode) error {
28+
f, err := r.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
29+
if err != nil {
30+
return err
31+
}
32+
defer f.Close()
33+
34+
n, err := f.Write(data)
35+
if err != nil {
36+
return err
37+
} else if n != len(data) {
38+
return io.ErrShortWrite
39+
}
40+
41+
return nil
42+
}
43+
44+
// ReadDir works the same as ioutil.ReadDir with the Driver abstraction
45+
func ReadDir(r Driver, dirname string) ([]os.FileInfo, error) {
46+
f, err := r.Open(dirname)
47+
if err != nil {
48+
return nil, err
49+
}
50+
defer f.Close()
51+
52+
dirs, err := f.Readdir(-1)
53+
if err != nil {
54+
return nil, err
55+
}
56+
57+
sort.Sort(fileInfos(dirs))
58+
return dirs, nil
59+
}
60+
61+
// Simple implementation of the sort.Interface for os.FileInfo
62+
type fileInfos []os.FileInfo
63+
64+
func (fis fileInfos) Len() int {
65+
return len(fis)
66+
}
67+
68+
func (fis fileInfos) Less(i, j int) bool {
69+
return fis[i].Name() < fis[j].Name()
70+
}
71+
72+
func (fis fileInfos) Swap(i, j int) {
73+
fis[i], fis[j] = fis[j], fis[i]
74+
}

0 commit comments

Comments
 (0)