summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2009-02-09 12:50:54 -0800
committerRob Pike <r@golang.org>2009-02-09 12:50:54 -0800
commit71ce018f06f1abef7b6e2c42fcf5e890bce9f21f (patch)
treedbef29b455ee0a42d04436a8532b2caff8efc9b6 /src
parent6edf658e1b24f734960ce873d3687b6319bc8042 (diff)
downloadgolang-71ce018f06f1abef7b6e2c42fcf5e890bce9f21f.tar.gz
simple accessors for Dir mode bits
R=rsc DELTA=71 (71 added, 0 deleted, 0 changed) OCL=24687 CL=24694
Diffstat (limited to 'src')
-rw-r--r--src/lib/os/os_types.go34
-rw-r--r--src/lib/syscall/types_amd64_darwin.go19
-rw-r--r--src/lib/syscall/types_amd64_linux.go18
3 files changed, 71 insertions, 0 deletions
diff --git a/src/lib/os/os_types.go b/src/lib/os/os_types.go
index 2e8ce3b9b..5157dca8e 100644
--- a/src/lib/os/os_types.go
+++ b/src/lib/os/os_types.go
@@ -4,6 +4,8 @@
package os
+import "syscall"
+
// An operating-system independent representation of Unix data structures.
// OS-specific routines in this directory convert the OS-local versions to these.
@@ -24,3 +26,35 @@ type Dir struct {
Ctime_ns uint64; // nanoseconds since 1970
Name string;
}
+
+func (dir *Dir) IsFifo() bool {
+ return (dir.Mode & syscall.S_IFMT) == syscall.S_IFIFO
+}
+
+func (dir *Dir) IsChar() bool {
+ return (dir.Mode & syscall.S_IFMT) == syscall.S_IFCHR
+}
+
+func (dir *Dir) IsDirectory() bool {
+ return (dir.Mode & syscall.S_IFMT) == syscall.S_IFDIR
+}
+
+func (dir *Dir) IsBlock() bool {
+ return (dir.Mode & syscall.S_IFMT) == syscall.S_IFBLK
+}
+
+func (dir *Dir) IsRegular() bool {
+ return (dir.Mode & syscall.S_IFMT) == syscall.S_IFREG
+}
+
+func (dir *Dir) IsSymlink() bool {
+ return (dir.Mode & syscall.S_IFMT) == syscall.S_IFLNK
+}
+
+func (dir *Dir) IsSocket() bool {
+ return (dir.Mode & syscall.S_IFMT) == syscall.S_IFSOCK
+}
+
+func (dir *Dir) Permission() int {
+ return int(dir.Mode & 0777)
+}
diff --git a/src/lib/syscall/types_amd64_darwin.go b/src/lib/syscall/types_amd64_darwin.go
index dedf63f36..101f223b8 100644
--- a/src/lib/syscall/types_amd64_darwin.go
+++ b/src/lib/syscall/types_amd64_darwin.go
@@ -69,6 +69,25 @@ const (
NAME_MAX = 255;
)
+// Dir.Mode bits
+const (
+ S_IFMT = 0170000; /* type of file */
+ S_IFIFO = 0010000; /* named pipe (fifo) */
+ S_IFCHR = 0020000; /* character special */
+ S_IFDIR = 0040000; /* directory */
+ S_IFBLK = 0060000; /* block special */
+ S_IFREG = 0100000; /* regular */
+ S_IFLNK = 0120000; /* symbolic link */
+ S_IFSOCK = 0140000; /* socket */
+ S_IFWHT = 0160000; /* whiteout */
+ S_ISUID = 0004000; /* set user id on execution */
+ S_ISGID = 0002000; /* set group id on execution */
+ S_ISVTX = 0001000; /* save swapped text even after use */
+ S_IRUSR = 0000400; /* read permission, owner */
+ S_IWUSR = 0000200; /* write permission, owner */
+ S_IXUSR = 0000100; /* execute/search permission, owner */
+)
+
type Stat_t struct {
Dev uint32;
Mode uint16;
diff --git a/src/lib/syscall/types_amd64_linux.go b/src/lib/syscall/types_amd64_linux.go
index a83c8ef83..ebfe21c86 100644
--- a/src/lib/syscall/types_amd64_linux.go
+++ b/src/lib/syscall/types_amd64_linux.go
@@ -69,6 +69,24 @@ const (
NAME_MAX = 255;
)
+// Dir.Mode bits
+const (
+ S_IFMT = 0170000; /* type of file */
+ S_IFIFO = 0010000; /* named pipe (fifo) */
+ S_IFCHR = 0020000; /* character special */
+ S_IFDIR = 0040000; /* directory */
+ S_IFBLK = 0060000; /* block special */
+ S_IFREG = 0100000; /* regular */
+ S_IFLNK = 0120000; /* symbolic link */
+ S_IFSOCK = 0140000; /* socket */
+ S_ISUID = 0004000; /* set user id on execution */
+ S_ISGID = 0002000; /* set group id on execution */
+ S_ISVTX = 0001000; /* save swapped text even after use */
+ S_IRUSR = 0000400; /* read permission, owner */
+ S_IWUSR = 0000200; /* write permission, owner */
+ S_IXUSR = 0000100; /* execute/search permission, owner */
+)
+
type Stat_t struct {
Dev uint64;
Ino uint64;