...
Source file src/pkg/os/file_posix.go
1
2
3
4
5
6
7 package os
8
9 import (
10 "syscall"
11 "time"
12 )
13
14 func sigpipe()
15
16
17 func syscallMode(i FileMode) (o uint32) {
18 o |= uint32(i.Perm())
19 if i&ModeSetuid != 0 {
20 o |= syscall.S_ISUID
21 }
22 if i&ModeSetgid != 0 {
23 o |= syscall.S_ISGID
24 }
25 if i&ModeSticky != 0 {
26 o |= syscall.S_ISVTX
27 }
28
29 return
30 }
31
32
33 func chmod(name string, mode FileMode) error {
34 if e := syscall.Chmod(fixLongPath(name), syscallMode(mode)); e != nil {
35 return &PathError{"chmod", name, e}
36 }
37 return nil
38 }
39
40
41 func (f *File) chmod(mode FileMode) error {
42 if err := f.checkValid("chmod"); err != nil {
43 return err
44 }
45 if e := f.pfd.Fchmod(syscallMode(mode)); e != nil {
46 return f.wrapErr("chmod", e)
47 }
48 return nil
49 }
50
51
52
53
54
55
56
57
58 func Chown(name string, uid, gid int) error {
59 if e := syscall.Chown(name, uid, gid); e != nil {
60 return &PathError{"chown", name, e}
61 }
62 return nil
63 }
64
65
66
67
68
69
70
71 func Lchown(name string, uid, gid int) error {
72 if e := syscall.Lchown(name, uid, gid); e != nil {
73 return &PathError{"lchown", name, e}
74 }
75 return nil
76 }
77
78
79
80
81
82
83 func (f *File) Chown(uid, gid int) error {
84 if err := f.checkValid("chown"); err != nil {
85 return err
86 }
87 if e := f.pfd.Fchown(uid, gid); e != nil {
88 return f.wrapErr("chown", e)
89 }
90 return nil
91 }
92
93
94
95
96 func (f *File) Truncate(size int64) error {
97 if err := f.checkValid("truncate"); err != nil {
98 return err
99 }
100 if e := f.pfd.Ftruncate(size); e != nil {
101 return f.wrapErr("truncate", e)
102 }
103 return nil
104 }
105
106
107
108
109 func (f *File) Sync() error {
110 if err := f.checkValid("sync"); err != nil {
111 return err
112 }
113 if e := f.pfd.Fsync(); e != nil {
114 return f.wrapErr("sync", e)
115 }
116 return nil
117 }
118
119
120
121
122
123
124
125 func Chtimes(name string, atime time.Time, mtime time.Time) error {
126 var utimes [2]syscall.Timespec
127 utimes[0] = syscall.NsecToTimespec(atime.UnixNano())
128 utimes[1] = syscall.NsecToTimespec(mtime.UnixNano())
129 if e := syscall.UtimesNano(fixLongPath(name), utimes[0:]); e != nil {
130 return &PathError{"chtimes", name, e}
131 }
132 return nil
133 }
134
135
136
137
138 func (f *File) Chdir() error {
139 if err := f.checkValid("chdir"); err != nil {
140 return err
141 }
142 if e := f.pfd.Fchdir(); e != nil {
143 return f.wrapErr("chdir", e)
144 }
145 return nil
146 }
147
148
149 func (f *File) setDeadline(t time.Time) error {
150 if err := f.checkValid("SetDeadline"); err != nil {
151 return err
152 }
153 return f.pfd.SetDeadline(t)
154 }
155
156
157 func (f *File) setReadDeadline(t time.Time) error {
158 if err := f.checkValid("SetReadDeadline"); err != nil {
159 return err
160 }
161 return f.pfd.SetReadDeadline(t)
162 }
163
164
165 func (f *File) setWriteDeadline(t time.Time) error {
166 if err := f.checkValid("SetWriteDeadline"); err != nil {
167 return err
168 }
169 return f.pfd.SetWriteDeadline(t)
170 }
171
172
173
174 func (f *File) checkValid(op string) error {
175 if f == nil {
176 return ErrInvalid
177 }
178 return nil
179 }
180
View as plain text