github.com/traefik/yaegi@v0.15.1/stdlib/restricted.go (about)

     1  package stdlib
     2  
     3  import (
     4  	"errors"
     5  	"io"
     6  	"log"
     7  	"os"
     8  	"strconv"
     9  )
    10  
    11  var errRestricted = errors.New("restricted")
    12  
    13  // osExit invokes panic instead of exit.
    14  func osExit(code int) { panic("os.Exit(" + strconv.Itoa(code) + ")") }
    15  
    16  // osFindProcess returns os.FindProcess, except for self process.
    17  func osFindProcess(pid int) (*os.Process, error) {
    18  	if pid == os.Getpid() {
    19  		return nil, errRestricted
    20  	}
    21  	return os.FindProcess(pid)
    22  }
    23  
    24  // The following functions call Panic instead of Fatal to avoid exit.
    25  func logFatal(v ...interface{})            { log.Panic(v...) }
    26  func logFatalf(f string, v ...interface{}) { log.Panicf(f, v...) }
    27  func logFatalln(v ...interface{})          { log.Panicln(v...) }
    28  
    29  type logLogger struct {
    30  	l *log.Logger
    31  }
    32  
    33  // logNew Returns a wrapped logger.
    34  func logNew(out io.Writer, prefix string, flag int) *logLogger {
    35  	return &logLogger{log.New(out, prefix, flag)}
    36  }
    37  
    38  // The following methods call Panic instead of Fatal to avoid exit.
    39  func (l *logLogger) Fatal(v ...interface{})            { l.l.Panic(v...) }
    40  func (l *logLogger) Fatalf(f string, v ...interface{}) { l.l.Panicf(f, v...) }
    41  func (l *logLogger) Fatalln(v ...interface{})          { l.l.Panicln(v...) }
    42  
    43  // The following methods just forward to wrapped logger.
    44  func (l *logLogger) Flags() int                        { return l.l.Flags() }
    45  func (l *logLogger) Output(d int, s string) error      { return l.l.Output(d, s) }
    46  func (l *logLogger) Panic(v ...interface{})            { l.l.Panic(v...) }
    47  func (l *logLogger) Panicf(f string, v ...interface{}) { l.l.Panicf(f, v...) }
    48  func (l *logLogger) Panicln(v ...interface{})          { l.l.Panicln(v...) }
    49  func (l *logLogger) Prefix() string                    { return l.l.Prefix() }
    50  func (l *logLogger) Print(v ...interface{})            { l.l.Print(v...) }
    51  func (l *logLogger) Printf(f string, v ...interface{}) { l.l.Printf(f, v...) }
    52  func (l *logLogger) Println(v ...interface{})          { l.l.Println(v...) }
    53  func (l *logLogger) SetFlags(flag int)                 { l.l.SetFlags(flag) }
    54  func (l *logLogger) SetOutput(w io.Writer)             { l.l.SetOutput(w) }
    55  func (l *logLogger) Writer() io.Writer                 { return l.l.Writer() }