]> Cypherpunks repositories - gostls13.git/commitdiff
os: add ModeIrregular flag
authorJoe Tsai <joetsai@digital-static.net>
Thu, 30 Nov 2017 01:11:45 +0000 (17:11 -0800)
committerJoe Tsai <joetsai@google.com>
Thu, 29 Mar 2018 23:17:53 +0000 (23:17 +0000)
There is currently no way for os.FileMode.IsRegular to report false
without being one of the following types:
ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice

This makes it difficult for custom implementations of os.FileInfo to return
a Mode that is explicitly not regular without resorting to setting one
of the types listed above. However, every one of the aforementioned types
are ill-suited as a general-purpose "not regular" file type.

Thus, add a ModeIrregular to serve exactly for that purpose.
The ModeIrregular type carries no information other than the fact that the
file is not regular.

Updates #22903
Fixes #23878

Change-Id: I4f34d88f960bcb014816d8e7b5de8b1035077948
Reviewed-on: https://go-review.googlesource.com/94856
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/os/types.go

index db7848759cbd0a2c457c0c3013c4426f6970b1d3..b0b7d8d94d6203ee4dc206be4bfca556ef0dab20 100644 (file)
@@ -54,15 +54,16 @@ const (
        ModeSetgid                                     // g: setgid
        ModeCharDevice                                 // c: Unix character device, when ModeDevice is set
        ModeSticky                                     // t: sticky
+       ModeIrregular                                  // ?: non-regular file; nothing else is known about this file
 
        // Mask for the type bits. For regular files, none will be set.
-       ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
+       ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice | ModeIrregular
 
        ModePerm FileMode = 0777 // Unix permission bits
 )
 
 func (m FileMode) String() string {
-       const str = "dalTLDpSugct"
+       const str = "dalTLDpSugct?"
        var buf [32]byte // Mode is uint32.
        w := 0
        for i, c := range str {