]> Cypherpunks repositories - gostls13.git/commitdiff
os: add ModeCharDevice
authorRuss Cox <rsc@golang.org>
Mon, 9 Jan 2012 22:22:53 +0000 (14:22 -0800)
committerRuss Cox <rsc@golang.org>
Mon, 9 Jan 2012 22:22:53 +0000 (14:22 -0800)
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

src/pkg/os/stat_darwin.go
src/pkg/os/stat_freebsd.go
src/pkg/os/stat_linux.go
src/pkg/os/stat_netbsd.go
src/pkg/os/stat_openbsd.go
src/pkg/os/types.go

index 81d6cd57c784442d5e0dcf73220d9df7ad3b1afd..efe77cb30b5b54327be62e37fadafa1518a752a3 100644 (file)
@@ -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:
index c142edffab2ac7cba592f2fb971392274e67c4ab..b59c53635ab0f0cd540e4641b57c13295cd821a4 100644 (file)
@@ -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:
index 66189a6b9baaa323ae807eb5904c70a5d45b1d07..b0a569e24cd1c85a9e5c48f67982f2b77af2e876 100644 (file)
@@ -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:
index 66189a6b9baaa323ae807eb5904c70a5d45b1d07..b0a569e24cd1c85a9e5c48f67982f2b77af2e876 100644 (file)
@@ -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:
index 66189a6b9baaa323ae807eb5904c70a5d45b1d07..b0a569e24cd1c85a9e5c48f67982f2b77af2e876 100644 (file)
@@ -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:
index 2638153ddbe1d1fa6ebad5f852d1cbcbdd61a938..bf009805fd730dec8af0a26d7a87974434666d14 100644 (file)
@@ -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 {