mirror of
https://github.com/golang/go
synced 2024-11-24 22:57:57 -07:00
os: add ModeCharDevice
This should make conversion from Unix mode to os.FileMode and back not lossy. R=golang-dev, iant CC=golang-dev https://golang.org/cl/5531052
This commit is contained in:
parent
f942736495
commit
cc02ef0258
@ -24,8 +24,10 @@ func fileInfoFromStat(st *syscall.Stat_t, name string) FileInfo {
|
||||
}
|
||||
fs.mode = FileMode(st.Mode & 0777)
|
||||
switch st.Mode & syscall.S_IFMT {
|
||||
case syscall.S_IFBLK, syscall.S_IFCHR, syscall.S_IFWHT:
|
||||
case syscall.S_IFBLK, syscall.S_IFWHT:
|
||||
fs.mode |= ModeDevice
|
||||
case syscall.S_IFCHR:
|
||||
fs.mode |= ModeDevice | ModeCharDevice
|
||||
case syscall.S_IFDIR:
|
||||
fs.mode |= ModeDir
|
||||
case syscall.S_IFIFO:
|
||||
|
@ -24,8 +24,10 @@ func fileInfoFromStat(st *syscall.Stat_t, name string) FileInfo {
|
||||
}
|
||||
fs.mode = FileMode(st.Mode & 0777)
|
||||
switch st.Mode & syscall.S_IFMT {
|
||||
case syscall.S_IFBLK, syscall.S_IFCHR:
|
||||
case syscall.S_IFBLK:
|
||||
fs.mode |= ModeDevice
|
||||
case syscall.S_IFCHR:
|
||||
fs.mode |= ModeDevice | ModeCharDevice
|
||||
case syscall.S_IFDIR:
|
||||
fs.mode |= ModeDir
|
||||
case syscall.S_IFIFO:
|
||||
|
@ -24,8 +24,10 @@ func fileInfoFromStat(st *syscall.Stat_t, name string) FileInfo {
|
||||
}
|
||||
fs.mode = FileMode(st.Mode & 0777)
|
||||
switch st.Mode & syscall.S_IFMT {
|
||||
case syscall.S_IFBLK, syscall.S_IFCHR:
|
||||
case syscall.S_IFBLK:
|
||||
fs.mode |= ModeDevice
|
||||
case syscall.S_IFCHR:
|
||||
fs.mode |= ModeDevice | ModeCharDevice
|
||||
case syscall.S_IFDIR:
|
||||
fs.mode |= ModeDir
|
||||
case syscall.S_IFIFO:
|
||||
|
@ -24,8 +24,10 @@ func fileInfoFromStat(st *syscall.Stat_t, name string) FileInfo {
|
||||
}
|
||||
fs.mode = FileMode(st.Mode & 0777)
|
||||
switch st.Mode & syscall.S_IFMT {
|
||||
case syscall.S_IFBLK, syscall.S_IFCHR:
|
||||
case syscall.S_IFBLK:
|
||||
fs.mode |= ModeDevice
|
||||
case syscall.S_IFCHR:
|
||||
fs.mode |= ModeDevice | ModeCharDevice
|
||||
case syscall.S_IFDIR:
|
||||
fs.mode |= ModeDir
|
||||
case syscall.S_IFIFO:
|
||||
|
@ -24,8 +24,10 @@ func fileInfoFromStat(st *syscall.Stat_t, name string) FileInfo {
|
||||
}
|
||||
fs.mode = FileMode(st.Mode & 0777)
|
||||
switch st.Mode & syscall.S_IFMT {
|
||||
case syscall.S_IFBLK, syscall.S_IFCHR:
|
||||
case syscall.S_IFBLK:
|
||||
fs.mode |= ModeDevice
|
||||
case syscall.S_IFCHR:
|
||||
fs.mode |= ModeDevice | ModeCharDevice
|
||||
case syscall.S_IFDIR:
|
||||
fs.mode |= ModeDir
|
||||
case syscall.S_IFIFO:
|
||||
|
@ -30,19 +30,23 @@ type FileMode uint32
|
||||
|
||||
// The defined file mode bits are the most significant bits of the FileMode.
|
||||
// The nine least-significant bits are the standard Unix rwxrwxrwx permissions.
|
||||
// The values of these bits should be considered part of the public API and
|
||||
// may be used in wire protocols or disk representations: they must not be
|
||||
// changed, although new bits might be added.
|
||||
const (
|
||||
// The single letters are the abbreviations
|
||||
// used by the String method's formatting.
|
||||
ModeDir FileMode = 1 << (32 - 1 - iota) // d: is a directory
|
||||
ModeAppend // a: append-only
|
||||
ModeExclusive // l: exclusive use
|
||||
ModeTemporary // t: temporary file (not backed up)
|
||||
ModeSymlink // L: symbolic link
|
||||
ModeDevice // D: device file
|
||||
ModeNamedPipe // p: named pipe (FIFO)
|
||||
ModeSocket // S: Unix domain socket
|
||||
ModeSetuid // u: setuid
|
||||
ModeSetgid // g: setgid
|
||||
ModeDir FileMode = 1 << (32 - 1 - iota) // d: is a directory
|
||||
ModeAppend // a: append-only
|
||||
ModeExclusive // l: exclusive use
|
||||
ModeTemporary // t: temporary file (not backed up)
|
||||
ModeSymlink // L: symbolic link
|
||||
ModeDevice // D: device file
|
||||
ModeNamedPipe // p: named pipe (FIFO)
|
||||
ModeSocket // S: Unix domain socket
|
||||
ModeSetuid // u: setuid
|
||||
ModeSetgid // g: setgid
|
||||
ModeCharDevice // c: Unix character device, when ModeDevice is set
|
||||
|
||||
// Mask for the type bits. For regular files, none will be set.
|
||||
ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
|
||||
@ -51,7 +55,7 @@ const (
|
||||
)
|
||||
|
||||
func (m FileMode) String() string {
|
||||
const str = "daltLDpSug"
|
||||
const str = "daltLDpSugc"
|
||||
var buf [20]byte
|
||||
w := 0
|
||||
for i, c := range str {
|
||||
|
Loading…
Reference in New Issue
Block a user