github.com/gotranspile/cxgo@v0.3.8-0.20240118201721-29871598a6a2/runtime/csys/stat.go (about)

     1  package csys
     2  
     3  import (
     4  	"log"
     5  	"os"
     6  
     7  	"github.com/gotranspile/cxgo/runtime/libc"
     8  )
     9  
    10  const modeDir = 1
    11  
    12  type Mode int32
    13  
    14  func IsDir(mode Mode) int32 {
    15  	if mode&modeDir != 0 {
    16  		return 1
    17  	}
    18  	return 0
    19  }
    20  
    21  type StatRes struct {
    22  	Dev       int32
    23  	Inode     int32
    24  	Mode      Mode
    25  	Links     int32
    26  	UID       int32
    27  	GID       int32
    28  	RDev      int32
    29  	Size      uint64
    30  	ATime     libc.TimeVal
    31  	MTime     libc.TimeVal
    32  	CTime     libc.TimeVal
    33  	BlockSize int32
    34  	Blocks    int32
    35  }
    36  
    37  func Stat(path *byte, dst *StatRes) int32 {
    38  	name := libc.GoString(path)
    39  	if name == "" {
    40  		panic("empty name")
    41  	}
    42  	st, err := os.Stat(name)
    43  	if err != nil {
    44  		log.Printf("stat(%q, %p): %v", name, dst, err)
    45  		libc.SetErr(err)
    46  		return -1
    47  	}
    48  	dst.Mode = 0
    49  	if st.Mode().IsDir() {
    50  		dst.Mode = modeDir
    51  	}
    52  	dst.Size = uint64(st.Size())
    53  	// TODO: other fields
    54  	return 0
    55  }
    56  
    57  func Chmod(path *byte, mode Mode) int32 {
    58  	spath := libc.GoString(path)
    59  	log.Printf("TODO: chmod(%q, 0%o)", spath, mode) // TODO
    60  	return 0
    61  }
    62  
    63  func Mkdir(path *byte, mode Mode) int32 {
    64  	spath := libc.GoString(path)
    65  	err := os.Mkdir(spath, 0755)
    66  	log.Printf("mkdir(%q, %x): %v", spath, mode, err)
    67  	if err != nil {
    68  		libc.SetErr(err)
    69  		return -1
    70  	}
    71  	return 0
    72  }