src/pkg/os/stat_linux.go - The Go Programming Language

Golang

Source file src/pkg/os/stat_linux.go

     1	// Copyright 2009 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package os
     6	
     7	import (
     8		"syscall"
     9		"time"
    10	)
    11	
    12	func sameFile(sys1, sys2 interface{}) bool {
    13		stat1 := sys1.(*syscall.Stat_t)
    14		stat2 := sys2.(*syscall.Stat_t)
    15		return stat1.Dev == stat2.Dev && stat1.Ino == stat2.Ino
    16	}
    17	
    18	func fileInfoFromStat(st *syscall.Stat_t, name string) FileInfo {
    19		fs := &fileStat{
    20			name:    basename(name),
    21			size:    int64(st.Size),
    22			modTime: timespecToTime(st.Mtim),
    23			sys:     st,
    24		}
    25		fs.mode = FileMode(st.Mode & 0777)
    26		switch st.Mode & syscall.S_IFMT {
    27		case syscall.S_IFBLK:
    28			fs.mode |= ModeDevice
    29		case syscall.S_IFCHR:
    30			fs.mode |= ModeDevice | ModeCharDevice
    31		case syscall.S_IFDIR:
    32			fs.mode |= ModeDir
    33		case syscall.S_IFIFO:
    34			fs.mode |= ModeNamedPipe
    35		case syscall.S_IFLNK:
    36			fs.mode |= ModeSymlink
    37		case syscall.S_IFREG:
    38			// nothing to do
    39		case syscall.S_IFSOCK:
    40			fs.mode |= ModeSocket
    41		}
    42		if st.Mode&syscall.S_ISGID != 0 {
    43			fs.mode |= ModeSetgid
    44		}
    45		if st.Mode&syscall.S_ISUID != 0 {
    46			fs.mode |= ModeSetuid
    47		}
    48		if st.Mode&syscall.S_ISVTX != 0 {
    49			fs.mode |= ModeSticky
    50		}
    51		return fs
    52	}
    53	
    54	func timespecToTime(ts syscall.Timespec) time.Time {
    55		return time.Unix(int64(ts.Sec), int64(ts.Nsec))
    56	}
    57	
    58	// For testing.
    59	func atime(fi FileInfo) time.Time {
    60		return timespecToTime(fi.Sys().(*syscall.Stat_t).Atim)
    61	}