mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-04 11:07:46 +00:00
a545f17d2e
This adds true GOOS=wasip1 support in addition to our existing -target=wasi support. The old support for WASI isn't removed, but should be treated as deprecated and will likely be removed eventually to reduce the test burden.
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
//go:build (linux && !baremetal) || wasip1
|
|
|
|
// Copyright 2009 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Note: this file is used for both Linux and WASI.
|
|
// Eventually it might be better to spit it up, and make the syscall constants
|
|
// match the typical WASI constants instead of the Linux-equivalents used here.
|
|
|
|
package os
|
|
|
|
import (
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
func fillFileStatFromSys(fs *fileStat, name string) {
|
|
fs.name = basename(name)
|
|
fs.size = fs.sys.Size
|
|
fs.modTime = timespecToTime(fs.sys.Mtim)
|
|
fs.mode = FileMode(fs.sys.Mode & 0777)
|
|
switch fs.sys.Mode & syscall.S_IFMT {
|
|
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:
|
|
fs.mode |= ModeNamedPipe
|
|
case syscall.S_IFLNK:
|
|
fs.mode |= ModeSymlink
|
|
case syscall.S_IFREG:
|
|
// nothing to do
|
|
case syscall.S_IFSOCK:
|
|
fs.mode |= ModeSocket
|
|
}
|
|
if fs.sys.Mode&syscall.S_ISGID != 0 {
|
|
fs.mode |= ModeSetgid
|
|
}
|
|
if fs.sys.Mode&syscall.S_ISUID != 0 {
|
|
fs.mode |= ModeSetuid
|
|
}
|
|
if fs.sys.Mode&syscall.S_ISVTX != 0 {
|
|
fs.mode |= ModeSticky
|
|
}
|
|
}
|
|
|
|
func timespecToTime(ts syscall.Timespec) time.Time {
|
|
return time.Unix(int64(ts.Sec), int64(ts.Nsec))
|
|
}
|
|
|
|
// For testing.
|
|
func atime(fi FileInfo) time.Time {
|
|
return timespecToTime(fi.Sys().(*syscall.Stat_t).Atim)
|
|
}
|